Как отключить функцию "Сохранить видео как..." в меню правой кнопки мыши браузера, чтобы клиенты не скачивали видео?
Существуют ли более полные решения, которые предотвращают прямой доступ клиента к пути к файлу?
*Вы не можете. Это потому, что браузеры были созданы именно для этого: предоставлять контент. Но вы можете усложнить его загрузку*.
Во-первых, вы можете отключить событие contextmenu
, оно же "правый клик". Это помешало бы обычным юзерам откровенно копировать ваше видео, щелкнув правой кнопкой мыши и сохранив как. Но тогда они могли бы просто отключить JS и обойти это или найти источник видео через отладчик браузера. К тому же это плохой UX. Есть много законных вещей в контекстном меню, а не только "Сохранить как".
Вы также можете использовать пользовательские библиотеки видеоплееров. Большинство из них реализуют видеоплееры, которые настраивают контекстное меню по вашему вкусу. Таким образом, вы не получите контекстное меню браузера по умолчанию. А если вдруг в нем появится пункт меню, похожий на Save As, вы сможете его отключить. Но опять же, это обходной путь JS. Слабые стороны аналогичны предыдущему варианту.
Другой способ сделать это - передать видео с помощью HTTP Live Streaming. По сути, это означает, что видео разбивается на фрагменты и подается один за другим. Именно так подают видео большинство сайтов потокового вещания. Поэтому даже если вам удастся Сохранить как, вы сохраните только фрагмент, а не все видео. Чтобы собрать все фрагменты и сшить их с помощью специального программного обеспечения, потребуется немного больше усилий.
Другая техника - это рисование <видео>
на <холсте>
. В этой технике, с помощью небольшого количества JavaScript, то, что вы видите на странице - это элемент <canvas>
, отображающий кадры из скрытого <video>
. И поскольку это <холст>
, контекстное меню будет использовать <img>
'меню, а не <видео>
'меню. Вы получите команду "Сохранить изображение как" вместо "Сохранить видео как".
Вы также можете использовать CSRF-токены в своих интересах. Вы заставите ваш сервер отправить токен на страницу. Затем вы используете этот токен для получения видео. Ваш сервер проверяет, действителен ли этот токен, прежде чем отправить видео, или получает HTTP 401. Идея заключается в том, что вы можете получить видео, только имея токен, который вы можете получить, только если вы пришли со страницы, а не напрямую посетили url видео.
В конце концов, я бы просто загрузил свое видео на сторонний видеосайт, например, YouTube или Vimeo. У них хорошие инструменты управления видео, они оптимизируют воспроизведение под устройство и прилагают усилия для предотвращения копирования их видео без каких-либо усилий с вашей стороны.
Это простое решение для тех, кто хочет просто убрать опцию "сохранить" правой кнопкой мыши из html5-видео.
$(document).ready(function(){
$('#videoElementID').bind('contextmenu',function() { return false; });
});
www.foo.com/player.html <БР> www.foo.com/videos/video.mp4 <БР>
www.foo.com/videos/.htaccess
RewriteEngine на RewriteCond %{HTTP_REFERER} !^http://foo.com/.$ [НЗ] RewriteCond %{HTTP_REFERER} !^http://www.foo.com/.$ [НЗ] RewriteRule .(МР4|МР3|Ави)$ - [Ф]
Теперь источник ссылка становится бесполезной, но мы все еще должны убедиться, что любой пользователь, который пытается скачать файл не может быть непосредственно подан на файл. <БР>
<oncontextmenu тела=то"Возвращение ложным; и">
<БР>
www.foo.com/player.html правильно играть в видео -, но если вы посетите www.foo.com/videos/video.mp4:
код ошибки 403: запрещено
<БР>
Это полный ответ на два вопроса задал, а не ответ на вопрос: "Я могу остановить пользователей от скачивания видео, они уже скачали.&ьquot;
Лучший способ, который я обычно использую очень простой, я полностью отключить контекстное меню на всю страницу, только HTML+JavaScript-код:
<body oncontextmenu="return false;">
Что's это! Я делаю это, потому что вы всегда можете видеть источник, щелкнув правой кнопкой мыши.
Ок, вы говорите: "Я могу использовать прямо в браузере просмотреть исходный код" и это's садится но мы отталкиваемся от того, что вы можете'Т остановить скачивание HTML5
с видео.
В качестве клиентского разработчика рекомендую использовать URL-адрес Blob, URL-адрес Blob-это клиентский URL, который ссылается на двоичный объект
<video id="id" width="320" height="240" type='video/mp4' controls > </video>
в HTML оставить свой видео ГРЦ
пустой,
и в JS загружать видео файл с помощью AJAX, убедитесь, что тип ответа клякса
window.onload = function() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'mov_bbb.mp4', true);
xhr.responseType = 'blob'; //important
xhr.onload = function(e) {
if (this.status == 200) {
console.log("loaded");
var blob = this.response;
var video = document.getElementById('id');
video.oncanplaythrough = function() {
console.log("Can play through video without stopping");
URL.revokeObjectURL(this.src);
};
video.src = URL.createObjectURL(blob);
video.load();
}
};
xhr.send();
}
Примечание: этот метод не рекомендуется для больших файлов
Редактировать
Использовать кросс-происхождения, либо избегая прямого скачивания
если видео передается с помощью использования API различных метода (пут/пост) вместо 'вам'
PHP отправляет видео тег HTML5 вместе с сеансом, где ключ представляет собой случайную строку и значение имени.
ini_set('session.use_cookies',1);
session_start();
$ogv=uniqid();
$_SESSION[$ogv]='myVideo.ogv';
$webm=uniqid();
$_SESSION[$webm]='myVideo.webm';
echo '<video autoplay="autoplay">'
.'<source src="video.php?video='.$ogv.' type="video/ogg">'
.'<source src="video.php?video='.$webm.' type="video/webm">'
.'</video>';
Сейчас PHP-это попросили прислать видео. В PHP восстанавливает именем; удаляет сессии и отправляет видео мгновенно. Кроме того, все 'а без кэша' и заголовки MIME-тип должен присутствовать.
ini_set('session.use_cookies',1);
session_start();
$file='myhiddenvideos/'.$_SESSION[$_GET['video']];
$_SESSION=array();
$params = session_get_cookie_params();
setcookie(session_name(),'', time()-42000,$params["path"],$params["domain"],
$params["secure"], $params["httponly"]);
if(!file_exists($file) or $file==='' or !is_readable($file)){
header('HTTP/1.1 404 File not found',true);
exit;
}
readfile($file);
exit:
Теперь если пользователь скопирует ссылку в новой вкладке или с помощью контекстного меню он не повезет.
Вы можете, по крайней мере, остановить не-технически продвинутых людей с помощью правой кнопкой мыши контекстное меню для загрузки видео. Вы можете отключить контекстное меню для любого элемента с помощью атрибута oncontextmenu.
oncontextmenu="return false;"
Это работает для элемента body (все страницы) или просто одного видео, используя его в тег видео.
<video oncontextmenu="return false;" controls>...</video>
Мы закончили тем, используя AWS CloudFront установлены с истекающим URL-адреса. Видео будет загружаться, но к тому времени клики пользователей и выбирает Сохранить как ссылку на видео они получили изначально истек. Сделайте поиск для обслуживания происхождения идентификаторов доступа.
Производить видео url требуется пара ключей, которые могут быть созданы в командной строки AWS. К вашему сведению это не мой код, но он отлично работает!
$resource = 'http://cdn.yourwebsite.com/videos/yourvideourl.mp4';
$timeout = 4;
//This comes from key pair you generated for cloudfront
$keyPairId = "AKAJSDHFKASWERASDF";
$expires = time() + $timeout; //Time out in seconds
$json = '{"Statement":[{"Resource":"'.$resource.'","Condition" {"DateLessThan":{"AWS:EpochTime":'.$expires.'}}}]}';
//Read Cloudfront Private Key Pair
$fp=fopen("/absolute/path/to/your/cloudfront_privatekey.pem","r");
$priv_key=fread($fp,8192);
fclose($fp);
//Create the private key
$key = openssl_get_privatekey($priv_key);
if(!$key)
{
echo "<p>Failed to load private key!</p>";
return;
}
//Sign the policy with the private key
if(!openssl_sign($json, $signed_policy, $key, OPENSSL_ALGO_SHA1))
{
echo '<p>Failed to sign policy: '.openssl_error_string().'</p>';
return;
}
//Create url safe signed policy
$base64_signed_policy = base64_encode($signed_policy);
$signature = str_replace(array('+','=','/'), array('-','_','~'), $base64_signed_policy);
//Construct the URL
$url = $resource.'?Expires='.$expires.'&Signature='.$signature.'&Key-Pair-Id='.$keyPairId;
return '<div class="videowrapper" ><video autoplay controls style="width:100%!important;height:auto!important;"><source src="'.$url.'" type="video/mp4">Your browser does not support the video tag.</video></div>';
В
<body oncontextmenu="return false;">
больше не работает. Хром и опера по состоянию на июнь 2018 имеет подменю на временной шкале, чтобы позволить прямой загрузки, так что пользователь не'т нужно кликнуть правой кнопкой мыши, чтобы скачать видео. Интересно Firefox и края Дон'т иметь эту ...
+1 Простая и кросс-браузер способ: Вы также можете поставить прозрачную картинку поверх видео с помощью CSS Z-индекса и непрозрачность. Так пользователи будут видеть, что "Сохранить Изображение как" вместо "и сохранить видео" в контекстном меню.
В первую очередь понимать невозможно полностью предотвратить видео загружается, все, что вы можете сделать, это затруднит. Т. е. вы скрываете Источник видео.
Веб-браузер временно загружает видео в буфер, так что если можно предотвратить скачать вам также будет предотвращать они рассматриваются как хорошо.
Вы также должны знать, что <1% от общей численности населения мира будут в состоянии понять исходный код в любом случае, что делает его довольно безопасным. Это не значит, вы должны не скрывать его, а также в источнике - вы должны.
Вы должны не отключение правой кнопкой мыши, и даже менее, вы должны выводиться надпись "Вы не можете сохранить это видео по причине нарушения авторских прав. Сожалею об этом.&и"
. Как было предложено в этот ответ.
Это может быть весьма раздражающим и непонятным для пользователей. Кроме того, если они отключить JavaScript в своем браузере, они будут иметь возможность правой кнопкой мыши и сохранить.
Здесь это CSS трюк вы могли бы использовать:
video {
pointer-events: none;
}
CSS не может быть отключено в браузере, защищая ваши видео без фактического отключения щелкните правой кнопкой мыши. Однако одна из проблем заключается в том, что "управления" не может быть включен, другими словами они должны иметь значение "ложь". Если вы собираетесь inplament свой собственный воспроизведение/пауза или использовать API, который имеет отдельные кнопки для тега "видео", то это представляется возможным.
контроль
также есть кнопка Скачать это не такая хорошая идея.
Вот [JSFiddle][2] пример.
Если вы собираетесь отключить щелкните правой кнопкой мыши с помощью JavaScript также хранить Источник видео в JavaScript, а также. Таким образом, если пользователь отключает JavaScript (он позволяет Правой Кнопкой Мыши) видео не будет нагрузки (она также скрывает источник видео немного лучше).
От TxRegex ответ:
<video oncontextmenu="return false;" controls>
<source type="video/mp4" id="video">
</video>
Теперь добавьте видео через JavaScript:
document.getElementById("video").src = "https://www.w3schools.com/html/mov_bbb.mp4";
Функциональные [JSFiddle][4]
Другой способ предотвращения Правой Кнопкой Мыши предполагает использование размещения
тег. Это, однако, не обеспечивает контроль, чтобы запустить видео, так что они должны быть inplamented в JavaScript:
<embed src="https://www.w3schools.com/html/mov_bbb.mp4"></embed>
Использование таких сервисов как Vimeo: войдите в виме и gt; Перейти к видео-и gt; Настройки > приватность > Марка как обеспеченные, а также выбрать размещения доменов. После размещения доменов устанавливаются, он никому не позволит вставлять видео или отобразить ее в браузере, если не подключения из указанных доменов. Поэтому, если у вас есть страница, которая крепится на ваш сервер, который загружает Vimeo плеер в iframe, это делает его довольно трудно обойти.
Краткий ответ: зашифровать ссылку, как YouTube делает, Дон'т знаю, как спросить, чем YouTube и Google о том, как они это делают. (Только в случае, если вы хотите получить прямо в точку.)
Я хотел бы отметить, что это возможно, потому что YouTube это и смогут ли они так могут любой другой сайт, и это вовсе'т из браузера, либо потому, что я проверял его на пару браузеров, таких как Microsoft Edge и Internet Explorer, а так есть способ, чтобы отключить его и видел, что люди до сих пор говорят, что это...нах мне искать ответ, потому что если YouTube сможет чем там должен быть способ, и единственный способ, чтобы увидеть, как они это делают, если кто-то смотрел в Скрипты YouTube, в котором я сейчас занимаюсь. Я также проверил, чтобы увидеть, если он был настраиваемого контекстного меню, а также, и это't, потому что контекстное меню над течет проверить элемент и я имею в виду, как он над ней и я взглянул, и она не создает нового класса и также невозможно, чтобы на самом деле открыть инспектировать элемент с помощью JavaScript, поэтому он может'т быть. Вы можете сказать, когда он дважды щелкните правой кнопкой мыши по видео на YouTube, всплывает контекстное меню для Chrome. Кроме того...на YouTube не'т добавить эту функцию. Я занимаюсь исследованиями и, глядя через Источник YouTube, так что я вернусь, если я найду ответ...если кто-то говорит, что вы можете'т Не, ну они не'т сделать исследование, как у меня. Единственный способ скачать видео с YouTube через Как скачать видео.
Ладно...я сделал исследований и научных стажировок, что вы можете отключить его, разве нет JavaScript для его...вы должны иметь возможность шифровать ссылки на видео для вас, чтобы быть в состоянии отключить его потому что я думаю, что любой браузер выиграл'т показать его, если он может'т найти его и когда я открыл на ютубе ссылку на видео он показал, как это на "капля:протокол HTTPS://ВСП.на YouTube.ком/e5c4808e-297e-451ф-80da-3e838caa1275" без кавычек, так это шифрования, поэтому он может быть сохранен...что вам нужно знать PHP для этого, но, как ответ, который вы выбрали, затрудняя, YouTube делает это тяжелее тяжелого шифрования, вы должны быть заранее РНР программистом, но если вы Don'знаю, что, чем принять человека, которого вы выбрали как лучший ответ сделать это трудно, чтобы загрузить его...но если ты знаешь PHP, чем тяжелые зашифровать ссылку на видео, так это только может быть прочитан по твоему...я не'т знаю, как объяснить, как они это делают, но они же и есть путь. Кстати на YouTube есть видео шифрует довольно умный, так что если вы хотите знать, как, чем просто задать ютубе/гугле, как они это делают...надеюсь, что это помогает для вас, хотя вы уже выбрали лучший ответ. Поэтому шифрование ссылки лучше в короткие сроки.
Кажется, что потоковое видео через WebSocket является жизнеспособным вариантом, как в потоке кадров и рисовать их на холсте подобное.
https://stackoverflow.com/questions/4241992/video-streaming-over-websockets-using-javascript
Я думаю, что бы обеспечить еще один уровень защиты, что делает его более трудным для клиента, чтобы приобрести видео и конечно решить вашу проблему с "Сохранить видео как..." в правой кнопкой мыши контекстное меню ( перебор ?! ).
Здесь's то, что я сделал:
в
function noRightClick() {
alert("You cannot save this video for copyright reasons. Sorry about that.");
}
<body oncontextmenu="noRightClick();">
<video>
<source src="http://calumchilds.com/videos/big_buck_bunny.mp4" type="video/mp4">
</video>
</body>
в Это также работает для изображений, текста и почти все. Однако, вы все еще можете получить доступ в "Проверить" и "по мнению источников" и инструментом, с помощью сочетания клавиш. (Как ответ наверху говорит, Вы можете'т остановить его полностью.) Но вы можете попробовать поставить заграждения, чтобы остановить их.
@Клэйтон-Граул было то, что я ищу, только мне нужен код CoffeeScript версия для сайта с помощью AngularJS. На всякий случай вам это нужно тоже, здесь's то, что вы положили в контроллер в AngularJS в вопрос:
# This is how to we do JQuery ready() dom stuff
$ ->
# let's hide those annoying download video options.
# of course anyone who knows how can still download
# the video, but hey... more power to 'em.
$('#my-video').bind 'contextmenu', ->
false
то "странные вещи появляются в кругу я к&; (это's садится)