首先了解一下NAL包結構,如下圖所示為NAL的標頭結構,其中unit_type占用5個bit,表示幀類型如下表所示,其中IDR圖像對應的unit_type數值為5,是以可以通過標頭資訊判斷流資料是否為IDR圖像。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVerRUTwZVbaBHeywEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYvwFd4VGdvwlMvw1ayFWbyVGdhd3P2UDNyUDMwEzMwgDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
下面開始介紹視訊播放Seek的基本原理,如下圖所示,為視訊檔案播放時間軸示意圖,Start為開始播放視訊的,End為視訊播放結束,IDR幀為立即重新整理幀所對應的播放時刻,Seek為拖動播放條時刻。
- 若正常播放到Seek點時,視訊一幀一幀逐幀解碼播放;
- 若直接拖動播放條到Seek點,則隻需比對NAL標頭判斷是否為IDR幀以及計算是否接近Seek時間點即可。若判斷資料包的時間點不在Seek附近或者不是IDR幀,則不用解碼忽略此資料包;若判斷收包時間點在Seek附近并且為IDR幀(圖中黃色圓圈位置)則再進行解碼,進而達到快速響應Seek的效果。