音視訊面試題集錦 2022.04

語言: CN / TW / HK

前些時間,我在知識星球上建立了一個音視訊技術社群: 關鍵幀的音視訊開發圈 ,在這裡群友們會一起做一些打卡任務。比如:循序漸進地歸納總結音視訊技術知識,繪製一幅 音視訊知識圖譜 ,你可以看看 《音視訊知識圖譜 2022.03》 。再比如:週期性地整理音視訊相關的面試題,彙集一份 音視訊面試題集錦

下面是 2022.04 月音視訊面試題集錦內容的節選:

1)RTMP 訊息分優先順序的設計有什麼好處?

RTMP 的訊息優先順序是:控制訊息 > 音訊訊息 > 視訊訊息。當網路傳輸能力受限時,優先傳輸高優先順序訊息的資料。

要使優先順序能夠有效執行,分塊也很關鍵:將大訊息切割成小塊,可以避免大的低優先順序的訊息(如視訊訊息)堵塞了傳送緩衝從而阻塞了小的高優先順序的訊息(如音訊訊息或控制訊息)。

2)什麼是 DTS 和 PTS?它們有什麼區別?

DTS 是解碼時間戳;PTS 是顯示時間戳。

雖然 DTS、PTS 是用於指導播放端的行為,但它們是在編碼的時候由編碼器生成的。

當視訊流中沒有 B 幀時,通常 DTS 和 PTS 的順序是一致的。但如果有 B 幀時,就回到了我們前面說的問題:解碼順序和播放順序不一致了。DTS 告訴我們該按什麼順序解碼這幾幀影象,PTS 告訴我們該按什麼順序顯示這幾幀影象。

3)什麼是 IDR 幀?它和 I 幀有什麼區別?

IDR 幀全稱叫做 Instantaneous Decoder Refresh,是 I 幀的一種。IDR 幀的作用是立刻重新整理,重新算一個新的序列開始編碼,使錯誤不致傳播。

IDR 幀有如下特性:

  • IDR 幀一定是 I 幀,嚴格來說 I 幀不一定是 IDR 幀(但一般 I 幀就是 IDR 幀);

  • 對於 IDR 幀來說,在 IDR 幀之後的所有幀都不能引用任何 IDR 幀之前的幀的內容。與此相反,對於普通的 I 幀來說,位於其之後的 B 和 P 幀可以引用位於普通 I 幀之前的 I 幀(普通 I 幀有被跨幀參考的可能);

  • 播放器永遠可以從一個 IDR 幀播放,因為在它之後沒有任何幀引用之前的幀。因此,視訊開頭的 I 幀一定是 IDR 幀;一個封閉類 GOP 的開頭的 I 幀也一定是 IDR 幀。

所以,在直播場景通常每個 I 幀都是 IDR 幀,這樣服務端下發流資料的時候總是從一個 I 幀開始,播放器就可以立即開始播放。

4)什麼是 SPS 和 PPS?它們有什麼區別?

SPS,Sequence Paramater Set,儲存了一組編碼後的影象序列所依賴的全域性引數。

PPS,Picture Paramater Set,儲存了每一幀編碼後的影象所依賴的引數。

SPS 中的資訊至關重要,如果其中的資料丟失,解碼過程就可能失敗。SPS 和 PPS 通常作為解碼器的初始化引數。一般情況,SPS 和 PPS 所在的 NAL 單元位於整個碼流的起始位置,但是在某些場景下,在位元速率中間也可能出現這兩種結構:

  • 解碼器要在碼流中間開始解碼。比如,直播流。

  • 編碼器在編碼過程中改變了位元速率的引數。比如,影象的解析度。

5)什麼是 SEI?我們可以用它來做什麼?

SEI 即補充增強資訊(Supplemental Enhancement Information),屬於碼流範疇,它提供了向視訊碼流中加入額外資訊的方法,是 H.264 標準的特性之一。

SEI的基本特徵如下:

  • 並非解碼過程的必須選項;

  • 可能對解碼過程(容錯、糾錯)有幫助;

  • 整合在視訊碼流中。

在直播場景,我們通常使用 SEI 來攜帶推流端的資訊,一直隨著直播流傳輸到播放端。由於 SEI 是繫結著視訊幀,所以它可以支援諸如:

  • 統計直播推流端到播放端延時。

  • 支援和視訊幀繫結的內容互動。比如,直播答題在播放端的彈窗等。

6)什麼是 MP4 的 moov Box?我們在封裝 MP4 時通常怎麼處理它?為什麼?

moov Box 即 Movie Box,MP4 中儲存所有媒體資料的索引資訊的 Box。moov Box 可以說是 MP4 檔案中最重要的 Box,一般播放器的實現都需要讀取到 moov 的資料才能開始播放流程。

對於通過網路播放 MP4 視訊的場景,都建議將視訊處理為 moov 前置。因為 moov 前置後,從網路讀取和播放 MP4 檔案時,就可以較快獲取到 moov 的資料並開始播放。

如果你也對音視訊技術感興趣,比如,符合下面的情況:

  • 在校大學生 → 學習音視訊開發

  • iOS/Android 客戶端開發 → 轉入音視訊領域

  • 直播/短視訊業務開發 → 深入音視訊底層 SDK 開發

  • 音視訊 SDK 開發 → 提升技能,解決優化瓶頸

可以長按識別或掃描下面二維碼,瞭解一下這個社群,根據自己的情況按需加入:

識別二維碼加入我們

- 完 -