Ultimamente sto studiando diversi metodi per lo streaming di MP4 al browser. Flash Media Server è una scelta ovvia qui (utilizzando Cloudfront) e la maggior parte delle soluzioni che ho visto utilizzano il protocollo RTMP.Tecnologia di streaming video HD di YouTube?
Tuttavia, ho trascorso un po 'di tempo su YouTube con Firebug e il debugger di Chrome per capire come funzionava il loro streaming e ho scoperto alcune differenze interessanti tra alcuni dei loro video e le tariffe di qualità.
I miei due video di esempio sono A e B. A è disponibile fino a 480p e B è disponibile fino a 1080p. Per entrambi i video, tutte le frequenze fino a 480p vengono offerte in un contenitore FLV con video H.264 e audio AAC, su HTTP. Ciò che è interessante qui è che se non hai ancora scaricato (memorizzato nella cache) l'intero video, e provi a saltare a una parte non codificata del video, verrà creata una nuova richiesta con un parametro 'begin' uguale all'offset target in millisecondi. Esempio da video a 480p A:
http://v11.lscache8.c.youtube.com/videoplayback?ip=0.0.0.0&sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0dWTldQVF9FSkNNNl9PSlhJ&fexp=904806%2C902906%2C903711&algorithm=throttle-factor&itag=35&ipbits=0&burst=40&sver=3&expire=1279756800&key=yt1&signature=D2D704D63C242CF187CAA5B5D5BAFB8DFACAC5FF.39180C01559C976717B651A7EB1D0C6249231EB7&factor=1.25&id=8568eb3135971f6f&begin=111863
Response Headers:
Cache-Control:public,max-age=23472
Connection:close
Content-Length:14320637
Content-Type:video/x-flv
Date:Wed, 21 Jul 2010 17:23:48 GMT
Expires:Wed, 21 Jul 2010 23:55:00 GMT
Last-Modified:Wed, 19 May 2010 12:31:41 GMT
Server:gvs 1.0
X-Content-Type-Options:nosniff
Il file restituito da questo URL è un FLV pienamente valida che contiene solo la parte del video dopo l'offset richiesto.
Ho eseguito lo stesso tipo di test sulle versioni a risoluzione più alta del video B. A 720p e 1080p, YouTube restituirà un video in un contenitore MP4, anche con video H.264 e audio AAC. Quello che mi colpisce è che il loro server utilizza lo stesso tipo di offset per un video MP4 (tramite il parametro 'begin') e restituisce un MP4 valido (l'atomo di moov nella parte anteriore del file con offset corretti) che include anche solo la parte richiesta del video.
Quindi, come fa YouTube? Come generano al volo il contenitore FLV o MP4 con le intestazioni corrette e solo il segmento desiderato del video richiesto? So che questo può essere ottenuto usando FFMPEG per cercare il punto di partenza desiderato e lo script qt-faststart per riposizionare l'atomo moov nella parte anteriore dello stream, ma sembra che questo sarebbe troppo lento per gestire on-demand per milioni di Spettatori di YouTube
Idee?
Grazie in anticipo!
Nota: non mi è permesso di includere più di 1 collegamento a questo punto, ecco l'URL del video A: http: // www.youtube .com/watch v = hWjrMTWXH28 "Video disponibile fino a 480p"
?
Come nota a margine .. Vimeo non utilizza alcuna tecnologia simile. Quando si visualizza un video su Vimeo, l'intero MP4 viene scaricato progressivamente e non è possibile scorrere in avanti la porzione che è già stata memorizzata. – bgentry