Flowplayer Secure Streaming с Apache - PullRequest
       39

Flowplayer Secure Streaming с Apache

10 голосов
/ 25 марта 2012

Обновление: Теперь это учебник о том, как обеспечить некоторый уровень безопасности для потокового видео, если: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.Надеюсь, что это поможет кому-то вроде меня!

Кто-нибудь видит проблемы с безопасностью при таком способе?

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Хорошо, я решил это! В этой строке:

$streamname = "http://www.mydomain.com/videos/".$streamname; (Его там больше нет)

У меня все было не так. Все, что мне нужно было сделать, это удалить эту строку, и она сработала. Это начнется с вашего baseUrl. Так что это уже было в папке 'videos', поэтому $ streamname должно совпадать только с расположением файла после baseUrl.

Кстати, это заняло у меня около недели, чтобы решить, что я искал повсюду в Интернете, чтобы собрать все воедино. Я создал это в учебнике, чтобы у других не было такой головной боли (надеюсь!)

2 голосов
/ 06 апреля 2012

Мне понадобилось 2 дня, чтобы узнать это ...

Если каталог, в котором хранятся ваши видео, - это CHMOD - 777, тогда он остановит поток ...

Я ходил по домам, пытаясь понять, почему, черт возьми, это не передавало бы мое видео ...

У меня уже был установлен каталог для видеофайлов, который использовался другим популярным php-скриптом изображения, который установил для этого каталога значение CHMOD 777 в это время ... просто установив его на CHMOD 755, можно было транслировать flv или mp4 на мой проигрыватель встроенный в мою страницу PHP ... что я рельеф!

Так что спасибо за облегчение головной боли ... это очень помогло, ура

...