2013-05-24 32 views
6

Sto utilizzando il tag video per riprodurre video.mp4 da PHP - Non riprodotto in HTML5 Tag video

ho utilizzando i file PHP per la riproduzione in questo modo:

<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> 

Tutti i file .php stanno giocando bene quando i check direttamente nel Brower. Ma la configurazione di cui sopra con tutti i file .php come sorgenti non verrà riprodotta. Se fornisco una sorgente .mp4 diretta, funzionerà correttamente.

Il getvideo_mp4.php assomiglia a questo:

$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(); 
} 

Così che cosa sto facendo male?

+0

ORA ... sembra che FUNZIONA con il codice di cui sopra ..: -/ – Niels

+0

Buon lavoro Niels ... –

risposta

3

Il codice di cui sopra sta lavorando. Dopo aver cambiato l'URL di src per i file .php, funzionava davvero. Ora suona in moz, cioè cromato con solo file php come sorgenti nel tag video.

+0

Potresti spiegare cosa hai cambiato? Ho lo stesso problema ma il codice sopra non funzionava – ChronosMOT

+1

Il tuo file ha QUALSIASI altro codice o il codice è sopra l'UNICO codice nel tuo file php? – Niels

+0

C'è molto altro codice, sto decodificando il file e sto ottenendo tutte le risorse crittografate tramite questo script php (ma sto usando il codice sopra solo per mp4s). Tuttavia da ieri ho avuto modo di girare su IE11 e Firefox 40.0.3. Chrome non riprodurrà comunque il file. Inoltre ora sto usando una versione modificata di questo codice: http://www.pixelstech.net/article/1357732373-Output-a-file-with-HTTP-range-header-in-PHP che è molto vicino:) al codice ma utilizza intestazioni leggermente diverse. – ChronosMOT

0

Dovrai eseguire il richiamo del percorso dopo averlo recuperato e trasferito all'attributo 'src' del tag video di HTML5. Il tuo attuale strategia non funziona bene, spero ...

Per esempio,

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

Ciao Vijay .. Sembra che tu "solo" vogliate servire il diretto src di php. Voglio nascondere l'effettiva posizione del file multimediale e caricarli dinamicamente dai file php getvideo_xx. – Niels

+0

Se lo fai anche, gli utenti possono facilmente scaricare i tuoi video semplicemente facendo clic destro sui video e selezionando l'opzione "Copia posizione video" dal menu contestuale Tag video. Ho già provato questo lavoro ma non ci sono riuscito. Prova questo link, http://stackoverflow.com/questions/9756837/prevent-html5-video-from-being-downloaded-right-click-saved –

+1

Hi Vijay. Anche se ora sembra che il codice sopra sia funzionante .. Mi sembra un passo piuttosto sfortunato di provare diversi modi .. Il rightclick è disabilitato e viene mostrato in una finestra modale. So che non è sicuro per questo file. Non voglio che l'utente conosca la posizione esatta dei file .. – Niels

0

Il browser identifica il contenuto del video dall'intestazione inviata ad esso con la richiesta. Basta manipolare l'intestazione e mantenere l'estensione PHP. Funzionerà perfettamente

Problemi correlati