Comment Adaptive HTTP Bitrate travail en streaming sur l'iPhone?
-
21-08-2019 - |
Question
Apple a inclus HTTP Adaptive Bitrate dans le streaming iPhone OS 3.0, en particulier gère cela automatiquement Safari.
Je voudrais jouer avec cette façon à faible coût, mais je pense qu'il va me falloir un serveur HTTP personnalisé dans le pire des cas, et PHP / etc script intéressant dans le meilleur des cas.
Mais d'abord, je dois savoir quelles sont les différences de protocole ou une norme est. HTTP est assez simple comme un protocole, mais le débit adaptatif signifie que la taille de fichier est différent, les emplacements de chunk sont différents à différents bitrates, etc. Par exemple, ce que le client dit au serveur quelque chose de spécial au sujet du flux comme il est le téléchargement, ou est-ce tous les traités sur le côté serveur?
L'élimination des pauses de mise en mémoire tampon pour l'utilisateur final est très attrayant pour les deux vivent et des flux vidéo pré-enregistrés, et de faire à la fois sur HTTP est encore mieux donné de nombreux réseaux et les gouvernements limitent le port non 80 trafic.
- Quels sont les détails techniques pour le streaming à débit adaptatif HTTP, en particulier la mise en œuvre d'Apple?
-
Où est-ce mieux mis en œuvre - une partie du serveur HTTP lui-même, une partie d'un mod, dans un script ...
-
Quels sont les changements nécessaires pour le côté client, si l'on implémenter dans une application?
La solution
Mise à jour
On dirait Apple a fait une proposition de projet de l'IETF, et certaines personnes travaillent déjà sur segmenteurs:
HTTP Live Streaming - projet-pantos-http-live streaming-01
http://tools.ietf.org/id/draft -pantos-http-live-streaming 01.txt
iPhone Streaming HTTP avec ffmpeg et un Open Source Segmenter
http: // www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
On dirait que le serveur HTTP agit simplement comme un serveur HTTP muet. Farfouillé le site exemple fourni par Akamai me donne assez d'informations pour commencer à utiliser le streaming du contenu statique.
Le livre blanc ( http://www.akamai.com/dl/akamai/iphone_wp pdf ) fournit des informations sur le flux de transport de codage, de sorte que les courants .ts sont simples.
Le codeur (ou un segmenteur séparé processus) produira H.264 / AAC contenu dans une séquence de faible teneur segments, en format MPEG-2 TS (.ts). Il y a aussi un fichier d'index qui M3U8 références les segments; dans le cas du contenu en direct la M3U8 est continuellement mis à jour pour refléter la le dernier contenu.
L'encodage H.264 devrait être une seule passe Profil de référence, réordonnancement cadre désactivé. Les images clés sont proposées toutes les 5 secondes, idéalement une même diviseur de la longueur du segment sélectionné.
Le site Web fournit un fichier M3U8, qui est simplement une liste de lecture M3U, mais dans le jeu de caractères UTF-8 format de codage.
Ce fichier lie alors à un fichier M3U8 pour chaque bitrate. Je suppose qu'ils doivent tous avoir des coupes dans les mêmes positions (tous les 2 ou 10 secondes, par exemple), de sorte que la commutation peut être transparente. Il semble être complètement axée sur le client -. Le client décide comment mesurer la bande passante et quelle version il va obtenir
Le contenu du fichier principal sont:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
hi/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
med/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
lo/prog_index.m3u8
Alors chacun des autres fichiers sont:
salut / prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
med / prog_index.m3u8
<video width="640" height="480">
<source src="content1/content1.m3u8" />
</video>
lo / prog_index.m3u8
<*>Cela fonctionne avec la balise vidéo HTML 5:
<*>Il y a encore beaucoup de questions sans réponse, mais cela est probablement suffisant pour commencer.
Autres conseils
Et un petit joueur en Python + GStreamer http://code.google.com/ p / HLS-lecteur /
Voir ce pour un codeur open source et segmenteur et quelques autres trucs cool:)