2010-02-07 5 views
2

Je suis en train de suivre la proposition d'Apple au http://tools.ietf.org/html/draft-pantos-http-live-streaming-01. En essayant un HTTP Live Streaming fictif sur mon iphone, j'ai écrit un service web avec Django correspondant à un fichier .m3u8. Je begining la réponse avecHTTP Live Streaming pour IPhone

#EXTM3U 
#EXT-X-TARGETDURATION:#10 
#EXT-X-MEDIA-SEQUENCE:#0 

Je vous écris alors les URL des segments (6 segments de 10 secondes chacun) à l'intérieur de la réponse:

#EXTINF:10, 
http://...../sample_low-1.ts 
... 

et c'est tout. Je change la partie contenant les URL des segments chaque minute, donc en théorie je m'attends à un flux continu.

Cependant, quand je vérifie le flux avec mon iphone je respectez les consignes suivantes:

Le téléphone se connecte ... m3u8, obtient son contenu, commence à télécharger des fichiers .ts et commence à montrer la vidéo. Puis, après avoir téléchargé 6ème segment (dernier segment dans le .m3u8), il atteint la fin du fichier, ne voit pas

EXT-X-ENDLIST 

et recherche le nouveau .m3u8. Le nouveau .m3u8 est prêt au serveur à ce stade, car je renouvelle le contenu de .m3u8 toutes les 60 secondes. Toutefois, le téléphone s'interrompt et je n'arrive pas à obtenir un flux continu sur le téléphone. Donc, évidemment, je fais une énorme erreur quelque part. Toute aide et suggestion sont les bienvenues. Editer: Il s'avère que la séquence de média incrémentielle fonctionne.

Répondre

0

Comment renvoyez-vous la réponse?
Si vous return l'objet de réponse Django, alors le serveur envoie simplement une réponse avec les six segments, puis reste assis tranquillement, en attendant une nouvelle demande du client.
Si vous souhaitez envoyer des données en continu à partir du serveur, vous devez plutôt utiliser le résultat yield et utiliser une sorte de synchronisation, de sorte que vous êtes sûr de ne pas envoyer les mêmes données encore et encore.

+0

Je renvoie l'objet de réponse Django avec le contenu que j'ai mentionné dans le message d'origine. Cependant, je pense que c'est ce que je suis censé faire, juste changer le fichier d'index .m3u8 régulièrement. Ai-je tort? –

+0

Si vous utilisez un mot clé "return", la réponse est terminée et Django attend une nouvelle requête du client. D'un autre côté, si vous utilisez le mot-clé "yield", la réponse n'est pas complète et Django continuera à alimenter le client avec de nouvelles données, jusqu'à ce que vous l'arrêtiez, ou jusqu'à ce que la connexion soit abandonnée. –

+0

Merci pour votre aide. –