2017-04-17 71 views
6

使用JavaScript構建MPEG-DASH播放器。但是,我遇到了一個實現seek的問題,並且似乎沒有太多的參考資料介紹如何使用MSE和相應的Source Buffer對象處理它。非序列式加載MPEG-DASH片段尋求

據我所知,只要段編碼正確(我通過SegmentTemplate使用單獨的m4s文件,而不是字節範圍),應該只需要將段添加到所需的任意點(比如說10秒標記),然後將VideoElement的currentTime參數設置爲標記。所有這些工作,我可以毫無錯誤地確認段緩衝區,並且段的第一幀甚至可以直觀地在VideoElement中加載。然而,它不會玩,並且洗刷是不可能的。沒有任何錯誤。它僅僅是在等待更多的數據。

這可以通過添加所有以前的細分,直到任意點來彌補,但這是不實際的。例如,dash.js不會這樣做(但我不能確切地說明它做了什麼不同的操作來允許正確的查找)。我猜想我必須以某種方式動態修改sidx,mfhd和/或tfdt框,以便誘使瀏覽器相信我正在按順序加載這些段 - 但對於這樣的標準來說,這看起來似乎過分了。

將片段化MP4段提供給MSE源緩衝區時,任何人都知道如何跳轉到任意點並繼續播放?

回答

0

已解決。

原來,這將自動工作,只要:

A)I幀正確對齊。 (他們是,但有時候這是一個挑戰,在這種情況下,如果由於編碼或其實現導致錯誤被引入)

B)段被加載在搜索點處(和之後)。所以,如果尋求10分大關,分段加載應該從10s開始並繼續。奇怪的是,我之前已經多次設置了這個(相當明顯的)設置,但是它未能正常播放或引入了一些渲染打嗝。據我所知,這些是由於段導入/緩衝例程中的一個次要實現錯誤。