2015-06-20 58 views
0

我有一個設置,我使用websockets協議發送一個10分鐘長的視頻(大象夢想),每個視頻片段分爲4個短段。
我使用瀏覽器作爲客戶端,使用Websocket API來接收內容和HTML5視頻標籤作爲播放器,當我使用Media Source Extensions來添加視頻片段時,我將它們添加到視頻中。即使添加了足夠的內容,視頻也不會播放

問題是似乎有一個地方的限制(最大接收緩衝區大小,最大媒體源緩衝區緩衝區大小,視頻元素上的最大緩衝內容等),以便視頻無法正常播放到最後但停止更早即使有足夠的數據。

所有細分都正確到達,並及時附加。同時,視頻從頭開始播放。
您可以看到播放器上顯示緩衝視頻的灰線,直到它停止增長的某個時間點,並且在到達此位置時視頻停止播放。
但是,完整的視頻已附加到媒體源元素,關於輸出消息,也可通過手動跳轉到未來或過去的另一個位置進行測試。它看起來總是隻有一小部分「加載」的內容。

因爲我在本地主機上測試它的吞吐量非常高,所以我試着把它降低到更常見的值(仍然比視頻比特率好),看看我是否超載客戶端,但這並沒有改變任何東西。

也嘗試了不同的段大小,具有完全相同的結果,除了停止點的時間不同。

Video player stopping

Console output at that moment

在哪裏這個限制可以或什麼可能會發生任何想法?

+0

當視頻停止播放時,瀏覽器控制檯上是否有任何消息?另外,如果你可以分享你的代碼,它會有所幫助,因爲它可能是每次你追加一個實際導致問題的塊時發生的其他事情。在不同的瀏覽器上檢查也是值得的,因爲MSE是相對較新的,並且在不同的瀏覽器實現中會有細微的差異。 – Mick

+0

@米克沒有,沒有錯誤信息,一切看起來很正常,只是視頻播放停止。 我發現問題只在要播放的段具有不同的表示(MPEG-DASH表示)時纔會發生。問題可能在於它具有不同的寬度和高度或不同的帶寬?所有表示的幀率都是相同的。 我覺得很奇怪的是,如果你手動跳轉,內容真的可以播放,但不會像下一個分段具有相同質量等級時那樣自動重現。 – Silvia

回答

1

我認爲你在緩衝數據中有差距。瀏覽器有一個有限的緩衝區大小,你可以追加。達到此限制時,如果追加附加數據,瀏覽器將通過放棄某些不需要緩衝區的幀來靜默釋放一些空間。根據我的經驗,如果你發生得太快,你的緩衝區可能會出現空隙。在追加查看是否有差距時,您應該監視buffered屬性的狀態。

0

您是否在停止之前更改表示法?當您更改表示時,需要在添加新表示的下一個段之前爲新表示追加init段。

相關問題