Últimamente he estado investigando diferentes métodos para la transmisión de MP4 al navegador. Flash Media Server es una opción obvia aquí (usando Cloudfront), y la mayoría de las soluciones que he visto usan el protocolo RTMP.¿Tecnología HD Streaming Server de YouTube?
Sin embargo, pasé un tiempo en YouTube con el depurador Firebug y Chrome averiguando cómo funcionaba la transmisión y descubrí algunas diferencias interesantes entre algunos de sus videos y las tasas de calidad.
Mis dos videos de muestra son A y B. A está disponible hasta 480p y B está disponible hasta 1080p. Para ambos videos, todas las tarifas de hasta 480p se sirven en un contenedor FLV con video H.264 y audio AAC, a través de HTTP. Lo que es interesante aquí es que si aún no ha descargado (en caché) todo el video, e intenta pasar a una parte del video que no se ha guardado en la memoria caché, se realizará una nueva solicitud con un parámetro 'comenzar' igual al desplazamiento del objetivo en milisegundos. Ejemplo de vídeo 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
El archivo devuelto por esta URL es un FLV totalmente válido que contenga sólo la parte del vídeo después de lo solicitado offset.
Hice el mismo tipo de prueba en las versiones de mayor resolución de Video B. A 720p y 1080p, YouTube devolverá un video en un contenedor MP4, también con video H.264 y audio AAC. Lo que es impresionante para mí es que su servidor toma el mismo tipo de compensación para un video MP4 (a través del parámetro 'begin') y devuelve un MP4 válido y transmisible (átomo moov en la parte delantera del archivo con compensaciones correctas) que también solo incluye la porción solicitada del video.
Entonces, ¿cómo lo hace YouTube? ¿Cómo generan el contenedor FLV o MP4 sobre la marcha con los encabezados correctos y solo el segmento deseado del video solicitado? Sé que esto se puede lograr utilizando FFMPEG para buscar el punto de inicio deseado y la secuencia de comandos qt-faststart para reposicionar el átomo de moov al frente de la secuencia, pero parece que esto sería demasiado lento para manejarlo a demanda para millones de Espectadores de YouTube.
Ideas?
¡Gracias de antemano!
Nota al pie: No tengo permitido incluir más de 1 enlace en este momento, así que aquí está la URL del video A: http: // www.youtube .com/watch? V = hWjrMTWXH28 "Video disponible hasta 480p"
Como nota al margen ... Vimeo no utiliza ninguna tecnología similar. Cuando ve un video en Vimeo, todo el MP4 se descarga progresivamente y no puede arrastrar hacia adelante más allá de la parte que ya se almacenó en el búfer. – bgentry