2010-02-07 37 views
2

我在浏览苹果的​​提案。 尝试一个虚拟的HTTP Live Streaming到我的iphone,我写了一个与Django相对应的.m3u8文件的webservice。我begining与用于IPhone的HTTP实时流式传输

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

响应然后我写段的网址的响应内(每个10秒6段):

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

,这一切。我每分钟都会更改包含细分受众群网址的部分,因此理论上我期待着一个连续的直播流。

然而,当我与我的iPhone检查流我遵守下列规定:

手机连接到... M3U8,得到它的内容,开始下载.ts文件,并开始显示视频。然后,下载第6段(在.m3u8最后一段)后到达文件结束,看不到

EXT-X-ENDLIST 

,并搜索新.m3u8。新的.m3u8已经准备好在服务器上了,因为我每60秒更新.m3u8的内容。

但是,手机暂停,我无法在手机上实现连续流。

所以,很明显我在某个地方犯了一个大错。任何帮助和建议都非常受欢迎。

编辑:原来,递增媒体序列的作品。

回答

0

你如何发送回应?
如果你的return是Django响应对象,那么服务器只是发送一个带有六个段的响应,然后静静地坐着等待来自客户端的新请求。
如果要连续发送服务器的数据,则应该改为yield的结果,并使用某种同步,以确保不会一遍又一遍地发送相同的数据。

+0

我用我在原文中提到的内容返回Django响应对象。不过,我认为这就是我应该做的,只是定期更改.m3u8索引文件。我错了吗? – 2010-02-07 22:40:46

+0

如果使用“return”关键字,则响应完成,并且Django将等待来自客户端的新请求。另一方面,如果使用“yield”关键字,那么响应没有完成,并且Django将继续为客户端提供新数据,直到您停止它或者直到连接断开。 – 2010-02-08 12:19:25

+0

感谢您的帮助。 – 2010-02-09 11:31:31

相关问题