2010-02-07 82 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