9
votes

Comment fonctionne HTTP Adaptive Bittrate Streaming sur l'iPhone?

Apple a inclus le streaming de bittrate adaptatif HTTP dans l'iPhone OS 3.0, en particulier Safari gère ce problème automatiquement.

J'aimerais jouer avec cela de manière peu coûteuse, mais je m'attends à ce que cela nécessiterait un serveur HTTP personnalisé dans le pire des cas et des scripts PHP / etc intéressants dans le meilleur cas.

Mais je dois d'abord savoir quelles sont les différences de protocole ou la norme. HTTP est raisonnablement simple comme un protocole, mais un débit d'adaptation signifie que la taille du fichier est différente, les emplacements des morceaux sont différents à différents débits, etc. Par exemple, le client dit-il au serveur quelque chose de spécial sur le flux, ou est-ce tous gérés sur le côté serveur?

Éliminer les pauses de mise en mémoire tampon pour l'utilisateur final est très attrayante pour les flux vidéo en direct et pré-enregistré et que les deux sur HTTP sont encore mieux que de nombreux réseaux et gouvernements limitant le trafic non-Port 80.

  • Quels sont les détails techniques du streaming de bittrate adaptatif HTTP, en particulier la mise en œuvre d'Apple?
  • Où est la meilleure mise en œuvre - une partie du serveur HTTP lui-même, une partie d'un mod, dans un script ...?

  • Quels changements sont nécessaires pour le côté client, si on devait mettre en œuvre cela dans une application?


0 commentaires

3 Réponses :


21
votes

Mise à jour

On dirait que Apple a formulé une proposition de projet IETF, et certaines personnes travaillent déjà sur les segmentations: p>

streaming en direct http - Draft-Pantos-http-live-streaming-01
http://tools.ietf.org/id/draft -pantos-http-live-streaming-01.txt p>

streaming http iPhone avec FFMPEG et un segmentateur à source ouvert de
http: // www.ioncannon.net/programmer/452/iphone-http-streaming-with-ffmpmpeg-and-an-open-source-segmenter/ p>


semble que le serveur HTTP agit simplement comme un serveur http muet. Poker autour de l'exemple Site Web fourni par Akamai me donne assez d'informations pour commencer avec le streaming de contenu statique. P>

HTTP : //iphone.akamai.com/ p>

Le papier blanc ( http://www.akamai.com/dl/akamai/iphone_wp.pdf ) fournit des informations sur le codage du flux de transport. Les flux .TS sont donc simples. P>

le codeur (ou un segmentateur séparé processus) produira H.264 / AAC Contenu dans une séquence de petite teneur segments, au format MPEG-2 TS (.TS). Il y a aussi un fichier d'index M3U8 qui références les segments; dans le cas de contenu en direct le m3u8 est continuellement mis à jour pour refléter le Dernier contenu. P>

Le codage H.264 devrait être une seule passe Profil de base, cadre de réchorcage de cadre désactivée. Les cadres clés sont suggérés toutes les 5 secondes, idéalement un même diviseur de la longueur du segment choisi. p> blockQuote>

Le site Web fournit un fichier M3U8, qui est simplement une liste de lecture M3U, mais dans le format de codage de caractères UTF-8. p>

Ce fichier est ensuite relié à un fichier M3U8 pour chaque bittrate. Je suppose qu'ils doivent tous avoir des coupures aux mêmes positions (toutes les 2 ou 10 secondes, par exemple) afin que la commutation puisse être transparente. Il semble être complètement axé sur le client - le client décide de mesurer la bande passante et de la version à obtenir. P>

Le contenu du fichier principal est le suivant: P>

<video width="640" height="480">
   <source src="content1/content1.m3u8" />
</video>


0 commentaires

2
votes

Voir ceci pour un codeur et un segmentateur Open Source et une autre chose cool :)

http://www.ioncannon.net/programmer/452/iphone-http-streaming-with-ffmpmpeg-and-an-open-source-segmenter/


0 commentaires

3
votes

et un petit joueur à Python + gstreamer http://code.google.com/ P / HLS-Player /


0 commentaires