2012-07-11 8 views
13

Attualmente sto cercando di distribuire video MP4 per l'utilizzo in video HTML5 (utilizzando video-js) tramite uno script PHP per il controllo dell'accesso video. Dopo alcune ricerche sono riuscito a farlo funzionare, con l'aiuto di stackoverflow article found here. Se passo allo script PHP, posso visualizzare il video come se lo stessimo visualizzando tramite il suo percorso assoluto (ad esempio localhost/myvideo.mp4 piuttosto che localhost/myscript.php) in Firefox, Safari e IE. Il mio problema è con Google Chrome, che mostra semplicemente uno schermo oscurato con un piccolo lettore multimediale al centro e non fa nulla.Consegna video MP4 tramite PHP non riuscita in Google Chrome

Ho provato a utilizzare una riscrittura rapida come localhost/avideo.mp4 che indirizza allo script PHP, ma sfortunatamente questo non ha cambiato nulla.

Ecco il mio script:

if (is_file($uri)) { 
    header('Content-Type: video/mp4'); 
    if (isset($_SERVER['HTTP_RANGE'])) { 
     $this->rangeDownload($uri); 
     exit; 
    } else { 
     header("Content-Length: ".filesize($uri)); 
     $this->readfile_chunked($uri); 
     exit; 
    } 
} else { 
    //error 
} 

Il metodo rangeDownload è stata presa direttamente da appendice A di this link come suggerito nel già citato articolo StackOverflow.

+0

Puoi pubblicare tutte le informazioni di intestazione che si sta inviando? – ethrbunny

+0

Content-type, Accept-Ranges, Content-Range, Content-Length, HTTP/1.1 206 Contenuto parziale. Queste intestazioni vengono utilizzate nel primo caso utilizzando rangeDownload, che viene utilizzato per Chrome, sebbene readfile_chunked utilizzi meno intestazioni (non funziona ancora in chrome). – AaronDS

+0

L'unico altro che posso suggerire è Content-Transfer-Encoding: binary. Sono in grado di trasferire audio tramite PHP a tutti i browser utilizzando questa combo. – ethrbunny

risposta

2

Forse il problema è con l'URL (in particolare, l'estensione). Normalmente, dovresti utilizzare l'intestazione Content-Disposition, ma capisco che ciò non è auspicabile quando fornisci contenuti ai dispositivi mobili.

Provare a utilizzare localhost/myscript.php/myvideo.mp4

E 'importante non usare l'intestazione HTTP "Content-Disposition", dal momento che alcuni telefoni rifiutano di accettare i contenuti quando lo si utilizza. Includendo il nome file sull'URL, farai credere al telefono che si tratta di un file reale e di accettarlo.

Ora, quando si invia l'URL di download al cliente, di solito non si sa ancora quale dispositivo ha il cliente, quindi non si sa quali formati di file il dispositivo supporterà. Pertanto, non è possibile includere il nome file su quell'URL e, ancora una volta, sarà necessaria una pagina di download intermedia. Ancora una volta, useremo un URL del tipo:

http://wap.mydomain.tld/get.php/123456abcdef 

Questa volta, quando si connette al cliente di scaricare il contenuto, lo script get.php non creerà un file temporaneo, ma punto ad un altro script che il file torrenti contenuto. Supponendo il contenuto risultante per scaricare sarà "image.jpg", la pagina di download intermedia potrebbe puntare al cliente di un URL del tipo:

http://wap.mydomain.tld/download.php/123456abcdef/image.jpg 

Da (http://mobiforge.com/developing/story/content-delivery-mobile-devices)

+0

Grazie per la vostra risposta, anche se come ho affermato nella mia domanda, "Ho provato a usare una riscrittura rapida come localhost/avideo.mp4 che indirizza allo script PHP, ma sfortunatamente questo non ha cambiato nulla.". Non sono sicuro di cos'altro stai suggerendo di fare diversamente? – AaronDS

+0

La differenza potrebbe essere nell'URL effettivo ottenuto dal browser. Se si utilizza il reindirizzamento (30x), il browser ottiene infine l'URL finale, con l'estensione .php anziché l'estensione .mp4 - questo può essere molto importante. Hai provato a confrontare tutte le intestazioni di richiesta/risposta (usando Fiddler, ad esempio?) –

+0

Sto guardando le informazioni di intestazione ora in Chrome, ma non sono sicuro di cosa farne. Quello che posso dire è che c'è una chiara differenza. Seguirò questo post con uno screenshot tra un paio d'ore. – AaronDS

2

ho capito che sei utilizzando video-js, ma io raccomando di usare html5media (controlla anche il github page per maggiori informazioni). Ho dovuto rendere i video disponibili su un sito Web per lavoro e ho provato alcune cose tra cui video-js ma html5media era l'unico che potevo ottenere lavorando su tutti i browser.

Una nota a margine che potrebbe aiutare gli altri: Uno dei requisiti è che abbiamo ospitato tutti i file in modo che non saremmo affidamento su server di terze parti per servire file JavaScript o lettori flash, non riesco a ricordare se con video-js questo è stato facile ma so con html5media siamo stati in grado di scaricare flowplayer e avere tutto sui nostri server.

E per generare i 3 raccomandare formati video (MP4, WebM e Theora) ho usato Miro Video Converter

+0

Grazie per questo post, tuttavia, il problema non riguarda Video-JS, è specificamente con chrome (il il video non viene riprodotto su Chrome con video-j s fuori l'immagine, e quando si utilizza il normale file video, video-js funziona bene). Le mie esperienze con i video-j sono state buone; Ho usato il freno a mano per la conversione dei file e finora non ho avuto accesso a nessun problema. Tuttavia, ho notato html5media nel caso in cui avessi bisogno di trovare qualcosa di nuovo in futuro. Saluti. – AaronDS

+0

Nessun problema @Noobatron. Non voglio scoraggiare le persone dall'usare video-js, perché se riesci a farlo funzionare allora hey, fantastico! Ho solo pensato che qualcuno potesse trarre beneficio dall'avere sentito parlare di quello che ho fatto nel caso in cui avessero incontrato lo stesso tipo di problemi (forse non sapevo cosa stavo facendo con i video-js). Ho un freno a mano a casa che uso per convertire i dvd sul mio telefono Android e funziona benissimo.Andrei comunque a lavorare a Miro per quei 3 formati per il web semplicemente perché l'interfaccia è davvero semplice. Spero che i tuoi video funzionino su Chrome! – Dean

Problemi correlati