views:

428

answers:

1

I'm folowing Apple's proposal in http://tools.ietf.org/html/draft-pantos-http-live-streaming-01. Trying a dummy HTTP Live Streaming to my iphone, I wrote a webservice with Django corresponding to a .m3u8 file. I'm begining the response with

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

I then write the URLs of the segments (6 segments of 10 seconds each )inside the response:

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

and that's all. I change the part containing URLs of segments every minute, so in theory I'm expecting a continuous live stream.

However, when I check the stream with my iphone I observe the following:

The phone connects to ...m3u8 , gets its contents, starts downloading .ts files and starts showing the video. Then, after downloading 6th segment(last segment in the .m3u8) it reaches end of file, sees no

EXT-X-ENDLIST

and searches for the new .m3u8. The new .m3u8 is ready at the server at this point, as I renew the contents of .m3u8 every 60 seconds.

However, the phone pauses, and I cannot achieve a continuous stream on the phone.

So, obviously I make a huge mistake somewhere. Any helps and suggestions are very welcome.

Edit : Turns out that incrementing media sequence works.

A: 

How do you send the response back?
If you return the Django response object, then the server is simply sending a response with the six segments, and then will sit quietly, waiting for a new request from the client.
If you want to continuously send data from the server, you should instead yield the result, and use some kind of synchronization, so that you are sure you are not sending the same data over and over again.

Roberto Liffredo
I return the Django response object with the content I mentioned in the original post. However, I think that's what I'm supposed to do, just change the .m3u8 index file regularly. Am I wrong?
ahmet emrah
If you use "return" keyword, then the response is complete, and Django will wait for a new request from the client. On the other hand, if you use the "yield" keyword, then the response is not complete, and Django will continue to feed the client with new data, until you stop it, or until the connection is dropped.
Roberto Liffredo
Thanks for your help.
ahmet emrah