Flowplayer Secure Streaming с Apache

Обновление: Теперь это учебник о том, как обеспечить определенный уровень безопасности для потокового видео, если:
1) вы используете Flowplayer с Apache
2) вы не хотите, чтобы пользователи могли загружать видео (только потоковая передача)
3) вы не хотите, чтобы пользователи могли размещать URL-адрес видео в браузере (видео с ограниченным доступом)
4) вы хотите, чтобы пользователи могли транслировать видео, если у них есть правильные учетные данные.

У вас должны быть знания PHP и .htaccess.

Оригинальное сообщение:
Мой клиент хочет, чтобы его видео было скрыто, чтобы они не могли транслироваться до тех пор, пока они не приобретут его домен (он не хочет, чтобы пользователи могли загрузить видео). Я пытаюсь сделать это с помощью Flowplayer Secure Streaming, и я думаю, что я почти там. Теперь я здесь!). После поиска везде я нашел этот пост.

Я ограничил горячую ссылку другими сайтами через .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]

Update: Цель файла php - 1) получить хэш, временную метку и видеофайлы (test.mov или что-то еще) 2) Убедитесь, что все проверено (I специально пропустили проверки безопасности в этом примере для длины) и 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. Надеюсь, это поможет кому-то вроде меня!

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

Ответ 1

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

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

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

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

Ответ 2

Пришло мне 2 дня, чтобы обнаружить это....

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

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

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

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