1. 程式人生 > >直播疑難雜癥排查(9)— 拖動不準

直播疑難雜癥排查(9)— 拖動不準

拖動 播放 疑難雜癥 直播 seek

本文為 《直播疑難雜癥排查》系列的第九篇文章,我們重點看看播放視頻時拖動不準的問題。


1. 問題現象


播放過程中,拖動進度條後,實際播放的位置跟松開拖動時的位置相差很遠。


2. 問題排查


由於直播流是實時產生和傳輸的,是不能拖動的,因此該問題主要出現在 “點播” 或者 “本地文件” 的播放。


2.1 基本概念


首先,我們要了解播放器拖動的基本原理:


視頻是由一系列圖像幀組成的,每一個幀都有對應的時間戳。拖動,就是告訴播放一個時間戳,由它直接跳轉到指定的這一幀開始播放。


拖動到的時間點 = (進度條的 progress / 進度條最大值 100 )x 視頻總時長


2.2 關鍵幀間隔太大


由於解碼器必須從 I 幀開始解碼,才不會出現花屏現象,因此,播放器通常會尋找離 seekTo 視頻幀最近的一個關鍵幀,從該關鍵幀開始解碼播放。


假設關鍵幀間隔(GOP)是 3s,那麽關鍵幀的時間點排列如下:


0s, 3s, 6s, 9s


如果拖動到 4s 的位置,那麽播放器就跳轉到第 3s 的關鍵幀開始解碼播放,因此,會產生一定的誤差。


關鍵幀的間隔越大,那麽這個誤差也就越大。因此,為了更準確地支持拖動,建議不要把關鍵幀間隔設置得太大。


2.3 直播丟幀


丟幀的情況多發生在直播場景,由於主播端的網絡抖動或者內存不足,導致不得不被迫丟掉一些視頻幀,而為了保證客戶端解碼後不出現花屏,丟幀往往伴隨著一整個 GOP 的丟棄。


當 GOP 丟失後,部分關鍵幀的間隔時間點就會變得更大了,從而導致拖動不準。


為了避免這種情況,建議推流端開啟動態碼率,在網絡不好的時候,主動降低碼率,快速發送掉緩沖區中累積的視頻幀,從而減少丟幀的情況發生。


3. 小結


關於拖動不準的問題排查大致就介紹道這裏了,有任何疑問歡迎來信 [email protected] 交流,另外,歡迎關註我的新浪微博 @盧_俊 或者 微信公眾號 @Jhuster 獲取最新的文章和資訊。

技術分享

本文出自 “Jhuster的專欄” 博客,請務必保留此出處http://ticktick.blog.51cto.com/823160/1934023

直播疑難雜癥排查(9)— 拖動不準