2013-05-24 26 views
6

Używam tagu wideo do odtwarzania filmów.mp4 z PHP - Nie odtwarza w tagu wideo HTML5

ja użyciu plików php do odtwarzania tak:

<video id="playvideo" preload="auto" width="845" height="395" 
    poster="http://video-js.zencoder.com/oceans-clip.png"> 

    <source src="../getvideo_webm.php" type='video/webm' /> 
    <source src="../getvideo_mp4.php" type='video/mp4'/> 
    <source src="../getvideo_ogv.php" type='video/ogg' /> 

    </video> 

Wszystkie pliki .php grają dobrze, gdy ja je sprawdzić bezpośrednio w Brower. Ale powyższe ustawienia ze wszystkimi .php jako plikami źródłowymi nie będą odtwarzane. Jeśli podaję proste źródło .mp4, gra się dobrze.

getvideo_mp4.php wygląda następująco:

$path = 'oceans-clip.mp4'; 
if (file_exists($path)) 
{ 
$size=filesize($path); 
[email protected]($path,'rb'); 
if(!$fm) { 
// You can also redirect here 
header ("HTTP/1.0 404 Not Found"); 
die(); 
} 
$begin=0; 
$end=$size; 
if(isset($_SERVER['HTTP_RANGE'])) { 
if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', 
$_SERVER['HTTP_RANGE'],$matches)){ 
$begin=intval($matches[0]); 
if(!empty($matches[1])) { 
$end=intval($matches[1]); 
} 
} 
} 
if($begin>0||$end<$size) 
header('HTTP/1.0 206 Partial Content'); 
else 
header('HTTP/1.0 200 OK'); 
header("Content-Type: video/mp4"); 
header('Accept-Ranges: bytes'); 
header('Content-Length:'.($end-$begin)); 
header("Content-Disposition: inline;"); 
header("Content-Range: bytes $begin-$end/$size"); 
header("Content-Transfer-Encoding: binary\n"); 
header('Connection: close'); 
$cur=$begin; 
fseek($fm,$begin,0); 
while(!feof($fm)&&$cur<$end&&(connection_status()==0)) 
{ print fread($fm,min(1024*16,$end-$cur)); 
$cur+=1024*16; 
usleep(1000); 
} 
die(); 
} 

Więc co robię źle?

+0

TERAZ ... wygląda na to, że DZIAŁA powyższym kodem ..: -/ – Niels

+0

Dobra robota Niels ... –

Odpowiedz

3

Powyższy kod działa. Po zmianie adresu URL src dla plików .php, faktycznie działało. Teraz gra w moz, tzn. Chrome z plikami php jako źródłami w tagu wideo.

+0

Czy mógłbyś wyjaśnić, co zmieniłeś? Mam ten sam problem, ale powyższy kod nie zadziałał. – ChronosMOT

+1

Czy Twój plik ma KAŻDY inny kod lub jest kodem powyżej TYLKO kodu w twoim pliku php? – Niels

+0

Istnieje wiele innych kodów, odszyfrowuję plik i otrzymuję wszystkie zaszyfrowane zasoby za pośrednictwem tego skryptu php (ale używam powyższego kodu tylko dla mp4s). Jednak od wczoraj dostałem go do uruchomienia na IE11 i Firefox 40.0.3. Jednak Chrome nadal nie będzie odtwarzał pliku. Do tej pory używam zmodyfikowanej wersji tego kodu: http://www.pixelstech.net/article/1357732373-Output-a-file-w-HTTP- header-head-in-PHP, który jest bardzo blisko:) do kodu, ale używa nieco innych nagłówków. – ChronosMOT

0

Będziesz musiał powtórzyć ścieżkę po pobraniu i przekazać ją do atrybutu "src" znacznika wideo HTML5. Aktualne strategia nie będzie działać dobrze, mam nadzieję ...

Na przykład,

<source src="<?php echo getMp4VideoUrl(); ?>" type='video/mp4'/> 
+0

Cześć Vijay .. Wygląda na to, że "chcesz" służyć bezpośrednio src przez php. Chcę ukryć rzeczywistą lokalizację plików multimedialnych i załadować je dynamicznie z plików php getvideo_xx. – Niels

+0

Jeśli to zrobisz, użytkownicy będą mogli łatwo pobierać filmy, klikając je prawym przyciskiem myszy i wybierając opcję "Kopiuj lokalizację wideo" z menu kontekstowego znacznika wideo. Próbowałem już tej pracy, ale się nie udało. Spróbuj tego linku, http://stackoverflow.com/questions/9756837/prevent-html5-video-from-being-downloaded-right-click-saved –

+1

Witaj Vijay. Wygląda jednak na to, że powyższy kod działa. Wydaje mi się, że mam całkiem nieszczęśliwe kroki próbowania różnych sposobów. Prawy przycisk jest wyłączony i jest obsługiwany w trybie modalnym. Wiem, że ten plik nie jest bezpieczny. Po prostu nie chcę, aby użytkownik znał lokalizację plików. – Niels

0

Przeglądarka identyfikuje treść wideo z nagłówka wysłanego do niego wraz z żądaniem. Po prostu zmodyfikuj nagłówek i zachowaj rozszerzenie PHP. To zadziała idealnie

Powiązane problemy