Dernièrement, j'ai recherché différentes méthodes pour diffuser des MP4 dans le navigateur. Flash Media Server est un choix évident ici (en utilisant Cloudfront), et la plupart des solutions que j'ai vues utilisent le protocole RTMP.La technologie de streaming vidéo HD de YouTube?
Cependant, j'ai passé du temps sur YouTube avec Firebug et Chrome débogueur à comprendre comment leur streaming fonctionnait et j'ai découvert des différences intéressantes entre certaines de leurs vidéos et les tarifs de qualité.
Mes deux exemples de vidéos sont A et B. A est disponible jusqu'à 480p et B est disponible jusqu'à 1080p. Pour les deux vidéos, tous les débits jusqu'à 480p sont servis dans un conteneur FLV avec vidéo H.264 et audio AAC, via HTTP. Ce qui est intéressant ici est que si vous n'avez pas encore téléchargé (mis en cache) la vidéo entière, et que vous essayez de passer à une partie non-attachée de la vidéo, une nouvelle requête sera faite avec un paramètre 'begin' égal au décalage cible millisecondes. Exemple de vidéo A à 480p:
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
Le fichier retourné par cette URL est un FLV entièrement valide contenant uniquement la partie de la vidéo après le décalage ont sollicité. J'ai fait le même genre de test sur les versions haute résolution de la vidéo B. À 720p et 1080p, YouTube renvoie une vidéo dans un conteneur MP4, également avec la vidéo H.264 et l'audio AAC. Ce qui m'impressionne, c'est que leur serveur prend le même type de décalage pour une vidéo MP4 (via le paramètre 'begin') et renvoie un MP4 streamable valide (atome moov à l'avant du fichier avec des corrections correctes) la partie demandée de la vidéo.
Alors, comment YouTube fait-il cela? Comment génèrent-ils le conteneur FLV ou MP4 à la volée avec les en-têtes appropriés et seulement le segment souhaité de la vidéo demandée? Je sais que cela peut être accompli en utilisant FFMPEG pour chercher le point de départ désiré et le script qt-faststart pour repositionner l'atome moov au début du flux, mais il semble que ce serait trop lent pour gérer à la demande des millions de Visionneuses YouTube.
Des idées?
Merci d'avance! Footnote: Je ne suis pas autorisé à inclure plus d'un lien à ce stade, donc voici l'URL de Video A: http://www.youtube.com/watch?v=hWjrMTWXH28 "Vidéo disponible jusqu'à 480p"
En note .. Vimeo n'utilise aucune technologie similaire. Lorsque vous regardez une vidéo sur Vimeo, l'ensemble du MP4 est progressivement téléchargé et vous ne pouvez pas passer devant la partie qui a déjà été mise en mémoire tampon. – bgentry