2012-03-25 19 views
10

Aktualizacja: Jest to obecnie tutorial jak dać pewien poziom bezpieczeństwa do strumieniowego wideo, jeśli:
1) używasz Flowplayer z Apache
2) nie ma użytkowników aby móc pobrać wideo (tylko strumieniowe przesyłanie)
3) nie chcesz, aby użytkownicy mogli umieścić adres URL filmu w przeglądarce (filmy z ograniczonym dostępem)
4) chcesz, aby użytkownicy byli w stanie przesyłać strumieniowo wideo, jeśli mają odpowiednie poświadczenia. Musisz mieć wcześniejszą wiedzę na temat PHPPlikii .htaccess.Flowplayer Bezpieczne żywo z Apache

Original post:
Mój klient chce, żeby jego filmy ukryte tak, że nie mogą być przesyłane, dopóki nie zostaną zakupione na swojej domeny (nie chce, aby użytkownicy mogli pobrać plik wideo albo). Próbuję to zrobić w Secure Streaming Flowplayera i myślę, że już prawie jestem tam 9! Po przeszukaniu wszędzie znalazłem this post.

mam ograniczony hot-łączenie przez innych stron za pomocą .htaccess teraz staram się ograniczyć dostęp przez kogoś po prostu skopiować adres URL i wkleić go w pasku adresu (tzn http://www.mydomain.com/videos/testVideo.mov)

Użyłem PHP/AJAX do generowania tego kodu HTML (większość przykładów używa wtyczki JS Flowplayer, używam znacznika <object> do osadzenia odtwarzacza, bez JS. Jeśli używasz wtyczki JS, użyj tego zamiast wersji wbudowanej, plik .htaccess i plik video.php będzie taki sam.)

$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>'; 

teraz w katalogu videos umieścić ten plik .htaccess:

RewriteEngine on 
RewriteRule ^(.*)/(.*)/(.*)$ http://www.mydomain.com/vidoeos/video.php?h=$1&t=$2&v=$3 
RewriteRule ^$ - [F] 
RewriteRule ^[^/]+\.(mov|mp4)$ - [F] 

Aktualizacja: Celem pliku php jest 1) uzyskać hash danych, datownika i wideo pliku (test.mov lub cokolwiek) 2) Upewnij się, że wszystko się zgadza (celowo anulowałem sprawdzanie bezpieczeństwa w tym przykładzie dla długości) i 3) Daj Flowplayer strumień wideo. Upewnij się, że $originaltimestamp i $hash są dobre przed udzieleniem dostępu. Możesz również sprawdzić dane uwierzytelniające sesję, uzyskać "prawdziwą" lokalizację pliku z bazy danych lub wykonać dowolne sprawdzanie zabezpieczeń php przed udzieleniem dostępu użytkownikowi.

również pamiętać, aby zmienić pole Content-type: więc koreluje z odpowiednim rozszerzeniem (tj video/mp4 jeśli film jest * .mp4)

I videos/video.php wygląda następująco:

<?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); 
?> 

trzy pliki łącznie, plik HTML z odtwarzaczem, plik i na końcu plik video.php. Mój pierwotny problem polegał na tym, że $streamname było nieprawidłowe. Pamiętaj, że $streamname powinna być lokalizacją pliku po (lub poniżej) BaseUrl. Mam nadzieję, że to pomoże komuś jak ja!

Ktoś widzi problemy bezpieczeństwa z robieniem tego w ten sposób?

+0

** Aktualizacja: Nie używaj Flowplayer-3.2.8.swf z tego kodu ** Użyj Flowplayer-3.2.7.. swf z flowplayer.controls-3.2.5.swf. Jeśli użyjesz flowplayer-3.2.8.swf, będzie działać tylko w Chrome, a nie w FF, Safari lub IE (9) – phpKid

+0

** Aktualizacja: Możesz użyć flowplayer-3.2.8 ** tylko upewnij się, że masz najnowszą wersję wersja Flasha! (moje złe) – phpKid

+0

Czy ta sama technika jest możliwa w odtwarzaczu Flow Player HTML5? – Wikki

Odpowiedz

3

OK, rozwiązałem to! W tej linii:

$streamname = "http://www.mydomain.com/videos/".$streamname; (nie jest tam już)

miałem to wszystko źle. Jedyne, co musiałem zrobić, to usunąć tę linię i zadziałało. Zacznie się od twojego baseUrl. Tak więc był już w folderze "wideo", więc nazwa strumienia $ powinna być równa lokalizacji pliku po bazie danych baseUrl.

Na marginesie zajęło mi to około tygodnia, aby rozwiązać, szukałem wszędzie w Internecie, aby połączyć elementy. Stworzyłem ten w poradniku więc inni nie mają takiego bólu głowy (mam nadzieję!)

2

Zajęło mi 2 dni, aby odkryć to ....

Jeśli katalog, w którym przechowywane są pliki wideo jest CHMOD na 777 to będzie stoisko strumień ...

pojechałem okrągłe domy stara się wypracować dlaczego w imię piekła to nie mój film strumień ...

miałem już ustalony katalog dla plików wideo używany przez inny popularny skrypt php, który ustawił ten katalog na CHMOD 777 w tym czasie ... po prostu ustawiając go na CHMOD 755 dozwolony flv lub MP4 do strumienia do mojego odtwarzacza osadzonego na mojej stronie php ... co ulżyło!

Więc dzięki za ulgi ból głowy ... to pomogło tyle, okrzyki

+0

Dzięki za dodatkowe informacje, wkrótce przeniesie moją witrynę na inny serwer, więc cieszę się, że wspomniałeś o tym na wypadek, gdy otrzymam te same błędy. – phpKid

Powiązane problemy