直播疑難雜症排查(9)— 拖動不準
本文為 《直播疑難雜症排查》系列的第九篇文章,我們重點看看播放視頻時拖動不準的問題。
1. 問題現象
播放過程中,拖動進度條後,實際播放的位置跟鬆開拖動時的位置相差很遠。
2. 問題排查
由於直播流是實時產生和傳輸的,是不能拖動的,因此該問題主要出現在 「點播」 或者 「本地文件」 的播放。
2.1 基本概念
首先,我們要了解播放器拖動的基本原理:
視頻是由一系列圖像幀組成的,每一個幀都有對應的時間戳。拖動,就是告訴播放一個時間戳,由它直接跳轉到指定的這一幀開始播放。
拖動到的時間點 = (進度條的 progress / 進度條最大值 100 )x 視頻總時長
2.2 關鍵幀間隔太大
由於解碼器必須從 I 幀開始解碼,才不會出現花屏現象,因此,播放器通常會尋找離 seekTo 視頻幀最近的一個關鍵幀,從該關鍵幀開始解碼播放。
假設關鍵幀間隔(GOP)是 3s,那麼關鍵幀的時間點排列如下:
0s, 3s, 6s, 9s
如果拖動到 4s 的位置,那麼播放器就跳轉到第 3s 的關鍵幀開始解碼播放,因此,會產生一定的誤差。
關鍵幀的間隔越大,那麼這個誤差也就越大。因此,為了更準確地支持拖動,建議不要把關鍵幀間隔設置得太大。
2.3 直播丟幀
丟幀的情況多發生在直播場景,由於主播端的網路抖動或者內存不足,導致不得不被迫丟掉一些視頻幀,而為了保證客戶端解碼後不出現花屏,丟幀往往伴隨著一整個 GOP 的丟棄。
當 GOP 丟失後,部分關鍵幀的間隔時間點就會變得更大了,從而導致拖動不準。
為了避免這種情況,建議推流端開啟動態碼率,在網路不好的時候,主動降低碼率,快速發送掉緩衝區中累積的視頻幀,從而減少丟幀的情況發生。
3. 小結
關於拖動不準的問題排查大致就介紹道這裡了,有任何疑問歡迎來信 lujun.hust@gmail.com 交流,另外,歡迎關注我的新浪微博 @盧_俊 或者 微信公眾號 @Jhuster 獲取最新的文章和資訊。
推薦閱讀:
※假如梅蘭芳先生開直播,會產生什麼影響?
※一個可以在線看直播電視的網站,手機電腦皆可
※現在一些遊戲平台的主播非常賺錢,怎麼克服心理不平衡感?
※直播問答技術分析
※如何看待宮本狗雨?