Обновление: Теперь это учебник о том, как обеспечить некоторый уровень безопасности для потокового видео, если:1) вы используете Flowplayer с Apache2) вы не хотите, чтобы пользователи могли загружать видео (только потоковое видео)3) вы не хотите, чтобы пользователи могли размещать URL-адрес видео в браузере (видео с ограниченным доступом)4) вы хотите, чтобы пользователи могли передавать потоковое видео только при наличии надлежащих учетных данных
. Вы должны иметь предварительные знания о PHP и .htaccess файлах.
Исходное сообщение: Мой клиент хочет, чтобы его видео были скрыты, чтобы их нельзя было транслировать до тех пор, пока они не будут куплены на его домене (он также не хочет, чтобы пользователи могли загружать видео).Я пытаюсь сделать это с помощью безопасной потоковой передачи Flowplayer, и я думаю, что я почти там. Я сейчас там!).После поиска везде я нашел этот пост .
Я ограничил возможность горячей ссылки на другие сайты через .htaccess, сейчас я пытаюсь ограничить доступ кем-то, просто копируя URL-адрес и вставляя егов адресной строке (т.е. http://www.mydomain.com/videos/testVideo.mov)
Я использовал PHP / AJAX для генерации этого HTML (большинство примеров там используют плагин JS Flowplayer, я использую тег <object>
для встраивания проигрывателя), JS не задействован. Если вы используете плагин JS, используйте его вместо встроенной версии, файл .htaccess и файл video.php будут одинаковыми.)
$videofilename = 'testVideo.mov';
$hash = md5('1234');
$timestamp = time();
$videoPath = $hash.'/'.$timestamp.'/'.$videofilename;
echo '
<object width="667" height="375" type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.8.swf">
<param name="wmode" value="transparent"/>
<param name="movie" value="../swf/flowplayer.securestreaming-3.2.8.swf" />
<param name="allowfullscreen" value="true" />
<param name="timestamp" value="'.$timestamp.'" />
<param name="token" value="'.$hash.'" />
<param name="streamName" value="'.$videofilename.'" />
<param name="flashvars" value=\'config={
"playlist":[
{"url": "'.$videoPath.'", "baseUrl": "http://www.mydomain.com/videos", "autoPlay":false,"autoBuffering":true,"bufferLength":5}
]
}\' />
</object>';
Теперь в каталоге videos
Я поместил этот файл .htaccess:
RewriteEngine on
RewriteRule ^(.*)/(.*)/(.*)$ http://www.mydomain.com/vidoeos/video.php?h=$1&t=$2&v=$3
RewriteRule ^$ - [F]
RewriteRule ^[^/]+\.(mov|mp4)$ - [F]
Обновление: Цель php-файла - 1) получить хэш данных, отметку времени иимя файла видео (test.mov или что-то еще) 2) Убедитесь, что все проверено (я намеренно пропустил проверки безопасности в этом примере для длины) и 3) Дайте Flowplayer поток вашеговидео.Убедитесь, что $originaltimestamp
и $hash
хороши, прежде чем дать доступ.Вы также можете проверить учетные данные сеанса, получить «реальное» местоположение файла из базы данных или выполнить любой вид проверки безопасности php, который вы хотите, прежде чем предоставить пользователю доступ.
Также не забудьте изменить поле Content-type:
, чтобы оно соответствовало правильному расширению файла (например, video/mp4
, если видео является * .mp4)
И videos/video.php
выглядит следующим образом:
<?php
session_start();
$hash = $_GET['h'];
$streamname = $_GET['v'];
$originaltimestamp = $_GET['t'];
header('Content-Description: File Transfer');
header('Content-type: video/quicktime');
header("Content-length: " . filesize($streamname));
header("Expires: 0");
header("Content-Transfer-Encoding: binary");
$file = fopen($streamname, 'r');
echo stream_get_contents($file);
fclose($file);
?>
Всего три файла: HTML с проигрывателем, файл .htaccess и, наконец, файл video.php .Моя первоначальная проблема была $streamname
не так.Помните, что $streamname
должно быть расположением файла после (или под) BaseUrl.Надеюсь, что это поможет кому-то вроде меня!
Кто-нибудь видит проблемы с безопасностью при таком способе?