前些時間,我在知識星球上創(chuàng)建了一個音視頻技術(shù)社群:關(guān)鍵幀的音視頻開發(fā)圈,在這里群友們會一起做一些打卡任務(wù)。比如:循序漸進地歸納總結(jié)音視頻技術(shù)知識,繪制一幅音視頻知識圖譜,你可以看看《音視頻知識圖譜 2022.03》。再比如:周期性地整理音視頻相關(guān)的面試題,匯集一份音視頻面試題集錦。
下面是 2022.04 月音視頻面試題集錦內(nèi)容的節(jié)選:
1)RTMP 消息分優(yōu)先級的設(shè)計有什么好處?
RTMP 的消息優(yōu)先級是:控制消息 > 音頻消息 > 視頻消息。當網(wǎng)絡(luò)傳輸能力受限時,優(yōu)先傳輸高優(yōu)先級消息的數(shù)據(jù)。
要使優(yōu)先級能夠有效執(zhí)行,分塊也很關(guān)鍵:將大消息切割成小塊,可以避免大的低優(yōu)先級的消息(如視頻消息)堵塞了發(fā)送緩沖從而阻塞了小的高優(yōu)先級的消息(如音頻消息或控制消息)。
2)什么是 DTS 和 PTS?它們有什么區(qū)別?
DTS 是解碼時間戳;PTS 是顯示時間戳。
雖然 DTS、PTS 是用于指導播放端的行為,但它們是在編碼的時候由編碼器生成的。
當視頻流中沒有 B 幀時,通常 DTS 和 PTS 的順序是一致的。但如果有 B 幀時,就回到了我們前面說的問題:解碼順序和播放順序不一致了。DTS 告訴我們該按什么順序解碼這幾幀圖像,PTS 告訴我們該按什么順序顯示這幾幀圖像。
3)什么是 IDR 幀?它和 I 幀有什么區(qū)別?
IDR 幀全稱叫做 Instantaneous Decoder Refresh,是 I 幀的一種。IDR 幀的作用是立刻刷新,重新算一個新的序列開始編碼,使錯誤不致傳播。
IDR 幀有如下特性:
- IDR 幀一定是 I 幀,嚴格來說 I 幀不一定是 IDR 幀(但一般 I 幀就是 IDR 幀);
- 對于 IDR 幀來說,在 IDR 幀之后的所有幀都不能引用任何 IDR 幀之前的幀的內(nèi)容。與此相反,對于普通的 I 幀來說,位于其之后的 B 和 P 幀可以引用位于普通 I 幀之前的 I 幀(普通 I 幀有被跨幀參考的可能);
- 播放器永遠可以從一個 IDR 幀播放,因為在它之后沒有任何幀引用之前的幀。因此,視頻開頭的 I 幀一定是 IDR 幀;一個封閉類 GOP 的開頭的 I 幀也一定是 IDR 幀。
所以,在直播場景通常每個 I 幀都是 IDR 幀,這樣服務(wù)端下發(fā)流數(shù)據(jù)的時候總是從一個 I 幀開始,播放器就可以立即開始播放。
4)什么是 SPS 和 PPS?它們有什么區(qū)別?
SPS,Sequence Paramater Set,保存了一組編碼后的圖像序列所依賴的全局參數(shù)。
PPS,Picture Paramater Set,保存了每一幀編碼后的圖像所依賴的參數(shù)。
SPS 中的信息至關(guān)重要,如果其中的數(shù)據(jù)丟失,解碼過程就可能失敗。SPS 和 PPS 通常作為解碼器的初始化參數(shù)。一般情況,SPS 和 PPS 所在的 NAL 單元位于整個碼流的起始位置,但是在某些場景下,在碼率中間也可能出現(xiàn)這兩種結(jié)構(gòu):
- 解碼器要在碼流中間開始解碼。比如,直播流。
- 編碼器在編碼過程中改變了碼率的參數(shù)。比如,圖像的分辨率。
5)什么是 SEI?我們可以用它來做什么?
SEI 即補充增強信息(Supplemental Enhancement Information),屬于碼流范疇,它提供了向視頻碼流中加入額外信息的方法,是 H.264 標準的特性之一。
SEI的基本特征如下:
- 并非解碼過程的必須選項;
- 可能對解碼過程(容錯、糾錯)有幫助;
- 集成在視頻碼流中。
在直播場景,我們通常使用 SEI 來攜帶推流端的信息,一直隨著直播流傳輸?shù)讲シ哦?。由?SEI 是綁定著視頻幀,所以它可以支持諸如:
- 統(tǒng)計直播推流端到播放端延時。
- 支持和視頻幀綁定的內(nèi)容交互。比如,直播答題在播放端的彈窗等。
6)什么是 MP4 的 moov Box?我們在封裝 MP4 時通常怎么處理它?為什么?
moov Box 即 Movie Box,MP4 中存儲所有媒體數(shù)據(jù)的索引信息的 Box。moov Box 可以說是 MP4 文件中最重要的 Box,一般播放器的實現(xiàn)都需要讀取到 moov 的數(shù)據(jù)才能開始播放流程。
對于通過網(wǎng)絡(luò)播放 MP4 視頻的場景,都建議將視頻處理為 moov 前置。因為 moov 前置后,從網(wǎng)絡(luò)讀取和播放 MP4 文件時,就可以較快獲取到 moov 的數(shù)據(jù)并開始播放。
如果你也對音視頻技術(shù)感興趣,比如,符合下面的情況:
- 在校大學生 → 學習音視頻開發(fā)
- iOS/Android 客戶端開發(fā) → 轉(zhuǎn)入音視頻領(lǐng)域
- 直播/短視頻業(yè)務(wù)開發(fā) → 深入音視頻底層 SDK 開發(fā)
- 音視頻 SDK 開發(fā) → 提升技能,解決優(yōu)化瓶頸
我們創(chuàng)建了一個社群,vx 搜索『gjzkeyframe』 關(guān)注『關(guān)鍵幀Keyframe』咨詢,或知識星球搜『關(guān)鍵幀的音視頻開發(fā)圈』即可加入。