我有一個服務器應用程序,呈現一個30 FPS視頻流,然後編碼並實時複製到WebM Byte Stream。如何讓現場MediaSource視頻流保持同步?
在客戶端,一個HTML5頁面打開一個WebSocket到服務器,當連接被接受時它開始生成流。傳遞標頭後,每個後續WebSocket框架由一個WebM SimpleBlock組成。關鍵幀每15幀發生一次,發生這種情況時會啓動一個新的羣集。
客戶端還會創建MediaSource,並且在從WS接收到一個幀時,會將內容附加到其活動緩衝區。附加第一幀後,<video>
立即開始播放。
一切正常合理。我唯一的問題是,網絡抖動會導致播放位置在一段時間後偏離實際時間。我當前的解決方案是掛入updateend
事件,檢查傳入羣集上video.currentTime
與時間碼之間的差異,如果超出可接受範圍,則手動更新currentTime
。不幸的是,這會導致明顯的暫停和跳躍,這很不愉快。
該解決方案也有點奇怪:我確切地知道最新的關鍵幀在哪裏,但我必須將其轉換爲整秒(根據W3C規範),然後才能將它傳遞到currentTime
,其中瀏覽器可能必須隨後四處尋找最近的關鍵幀。
我的問題是:有沒有辦法告訴媒體元素總是尋求最新的關鍵幀可用,或保持播放時間與系統時鐘時間同步?
您是否找到解決方案? –
我意識到你的解決方案改變currentTime是最好的,它引起的故障是可以接受的,因爲在此之前,網絡故障導致緩衝區增加,所以修復它的另一個小故障是正常的...它只會保留如果在數據流中存在連續的連接問題,則會出現毛刺。 –