2016-04-06 55 views
2

我在讀一本動態地生成的M3U8的HLS播放列表從FFmpeg的Outputing HLS M3U8 TS段PHP-FPM Nginx的

基本文件看起來像

#EXTM3U 
#EXT-X-VERSION:3 
#EXT-X-TARGETDURATION:11 
#EXT-X-MEDIA-SEQUENCE:3 
#EXTINF:11.000000, 
2_3.ts 
#EXTINF:8.000000, 
2_4.ts 
#EXTINF:11.000000, 
2_5.ts 
#EXTINF:11.000000, 
2_6.ts 
#EXTINF:8.000000, 
2_7.ts 
#EXTINF:11.000000, 
2_8.ts 

我試圖找到一種方式來限制連接到單個連接。 我有一個叫做連接表:它保存流ID +用戶ID + DATE_START & DATE_END &狀態

一旦用戶開始看它添加新的數據流:實例

(StreamID : (2) , userID : (3) , Date_Start : Now() , Date_end : Null , status : ON) 

一旦他關閉連接我想和現在()&狀態爲OFF

環境公司更新DATE_END: Nginx的,PHP-FPM & FFmpeg的

我使用the register_shutdown_function('shutdown')到然而,問題是一旦播放列表播放給M3U8包含6段執行關機多次朵,每幾秒鐘執行關機多次寫一遍,最後更新

(更新了塊列表),而我沒有關閉連接。

我正在尋找一種方法來處理該播放列表作爲一個連接被依然古色古香,所以當客戶端中止連接,而不是同時播放列表被重新加載

問候

回答

0

功能關閉將被纔會執行即使您使用單個持久連接,PHP腳本也會針對每個播放列表請求執行,並且,就像您注意到,在每次運行結束時都會調用註冊的關閉功能。

而不是更新Date_end立即記錄HTTP請求以及用戶和流ID,並定期計算統計信息。例如。如果播放列表沒有被重新加載,則認爲這是一個新的視圖會話。

此外,我不知道如何跟蹤用戶ID,但請記住,播放器軟件不可能保持會話,並且信息不會跨請求保存。您可以在播放列表和網址網址中添加跟蹤變量。

這僅適用於Live播放列表,因爲對於VOD播放列表僅加載一次。

如果您可以使用基於Web的播放器,則可以通過一些回調希望跟蹤客戶端上的用戶。

+0

Salut aergistral,實際上我保持用戶ID保持用戶統計時結束和雙連接,我不明白你的意思是什麼:「如果一個播放列表不重新加載T時間認爲這是一個新的視圖會話。」我無法找到一個好辦法來解決這個 – Krasic

+0

這裏是一個輸出的例子(Type + PID + Time + Segment),http://pastebin.com/9mkuNjDz – Krasic

+0

如果你有多個同時請求相同播放列表的用戶時間你怎麼知道哪一個是哪個?您需要一種方法來跟蹤每個請求/用戶。如果播放列表停止以大於「TARGETDURATION」的時間方式被請求,則可以假定會話結束,並且用最後一次請求的時間更新Date_end。 – aergistal