前些時(shí)間丈牢,我在知識(shí)星球上創(chuàng)建了一個(gè)音視頻技術(shù)社群:關(guān)鍵幀的音視頻開(kāi)發(fā)圈师幕,在這里群友們會(huì)一起做一些打卡任務(wù)愚臀。比如:循序漸進(jìn)地歸納總結(jié)音視頻技術(shù)知識(shí)馋袜,繪制一幅音視頻知識(shí)圖譜茴厉,你可以看看《音視頻知識(shí)圖譜 2022.03》。再比如:周期性地整理音視頻相關(guān)的面試題琉雳,匯集一份音視頻面試題集錦锯茄。
下面是 2022.04 月音視頻面試題集錦內(nèi)容的節(jié)選:
1)RTMP 消息分優(yōu)先級(jí)的設(shè)計(jì)有什么好處糕簿?
RTMP 的消息優(yōu)先級(jí)是:控制消息 > 音頻消息 > 視頻消息病附。當(dāng)網(wǎng)絡(luò)傳輸能力受限時(shí),優(yōu)先傳輸高優(yōu)先級(jí)消息的數(shù)據(jù)亥鬓。
要使優(yōu)先級(jí)能夠有效執(zhí)行完沪,分塊也很關(guān)鍵:將大消息切割成小塊,可以避免大的低優(yōu)先級(jí)的消息(如視頻消息)堵塞了發(fā)送緩沖從而阻塞了小的高優(yōu)先級(jí)的消息(如音頻消息或控制消息)嵌戈。
2)什么是 DTS 和 PTS丽焊?它們有什么區(qū)別?
DTS 是解碼時(shí)間戳咕别;PTS 是顯示時(shí)間戳技健。
雖然 DTS、PTS 是用于指導(dǎo)播放端的行為惰拱,但它們是在編碼的時(shí)候由編碼器生成的雌贱。
當(dāng)視頻流中沒(méi)有 B 幀時(shí),通常 DTS 和 PTS 的順序是一致的偿短。但如果有 B 幀時(shí)欣孤,就回到了我們前面說(shuō)的問(wèn)題:解碼順序和播放順序不一致了。DTS 告訴我們?cè)摪词裁错樞蚪獯a這幾幀圖像昔逗,PTS 告訴我們?cè)摪词裁错樞蝻@示這幾幀圖像降传。
3)什么是 IDR 幀?它和 I 幀有什么區(qū)別勾怒?
IDR 幀全稱叫做 Instantaneous Decoder Refresh婆排,是 I 幀的一種。IDR 幀的作用是立刻刷新笔链,重新算一個(gè)新的序列開(kāi)始編碼段只,使錯(cuò)誤不致傳播。
IDR 幀有如下特性:
- IDR 幀一定是 I 幀鉴扫,嚴(yán)格來(lái)說(shuō) I 幀不一定是 IDR 幀(但一般 I 幀就是 IDR 幀)赞枕;
- 對(duì)于 IDR 幀來(lái)說(shuō),在 IDR 幀之后的所有幀都不能引用任何 IDR 幀之前的幀的內(nèi)容。與此相反炕婶,對(duì)于普通的 I 幀來(lái)說(shuō)姐赡,位于其之后的 B 和 P 幀可以引用位于普通 I 幀之前的 I 幀(普通 I 幀有被跨幀參考的可能);
- 播放器永遠(yuǎn)可以從一個(gè) IDR 幀播放柠掂,因?yàn)樵谒鬀](méi)有任何幀引用之前的幀项滑。因此,視頻開(kāi)頭的 I 幀一定是 IDR 幀陪踩;一個(gè)封閉類 GOP 的開(kāi)頭的 I 幀也一定是 IDR 幀杖们。
所以悉抵,在直播場(chǎng)景通常每個(gè) I 幀都是 IDR 幀肩狂,這樣服務(wù)端下發(fā)流數(shù)據(jù)的時(shí)候總是從一個(gè) I 幀開(kāi)始,播放器就可以立即開(kāi)始播放姥饰。
4)什么是 SPS 和 PPS傻谁?它們有什么區(qū)別?
SPS列粪,Sequence Paramater Set审磁,保存了一組編碼后的圖像序列所依賴的全局參數(shù)牵舵。
PPS梦谜,Picture Paramater Set吠架,保存了每一幀編碼后的圖像所依賴的參數(shù)敌蜂。
SPS 中的信息至關(guān)重要拳话,如果其中的數(shù)據(jù)丟失回梧,解碼過(guò)程就可能失敗解幽。SPS 和 PPS 通常作為解碼器的初始化參數(shù)滴铅。一般情況鸳址,SPS 和 PPS 所在的 NAL 單元位于整個(gè)碼流的起始位置瘩蚪,但是在某些場(chǎng)景下,在碼率中間也可能出現(xiàn)這兩種結(jié)構(gòu):
- 解碼器要在碼流中間開(kāi)始解碼稿黍。比如疹瘦,直播流。
- 編碼器在編碼過(guò)程中改變了碼率的參數(shù)巡球。比如言沐,圖像的分辨率。
5)什么是 SEI酣栈?我們可以用它來(lái)做什么呢灶?
SEI 即補(bǔ)充增強(qiáng)信息(Supplemental Enhancement Information),屬于碼流范疇钉嘹,它提供了向視頻碼流中加入額外信息的方法鸯乃,是 H.264 標(biāo)準(zhǔn)的特性之一。
SEI的基本特征如下:
- 并非解碼過(guò)程的必須選項(xiàng);
- 可能對(duì)解碼過(guò)程(容錯(cuò)缨睡、糾錯(cuò))有幫助鸟悴;
- 集成在視頻碼流中。
在直播場(chǎng)景奖年,我們通常使用 SEI 來(lái)攜帶推流端的信息细诸,一直隨著直播流傳輸?shù)讲シ哦恕S捎?SEI 是綁定著視頻幀陋守,所以它可以支持諸如:
- 統(tǒng)計(jì)直播推流端到播放端延時(shí)震贵。
- 支持和視頻幀綁定的內(nèi)容交互。比如水评,直播答題在播放端的彈窗等猩系。
6)什么是 MP4 的 moov Box?我們?cè)诜庋b MP4 時(shí)通常怎么處理它中燥?為什么寇甸?
moov Box 即 Movie Box,MP4 中存儲(chǔ)所有媒體數(shù)據(jù)的索引信息的 Box疗涉。moov Box 可以說(shuō)是 MP4 文件中最重要的 Box拿霉,一般播放器的實(shí)現(xiàn)都需要讀取到 moov 的數(shù)據(jù)才能開(kāi)始播放流程。
對(duì)于通過(guò)網(wǎng)絡(luò)播放 MP4 視頻的場(chǎng)景咱扣,都建議將視頻處理為 moov 前置绽淘。因?yàn)?moov 前置后,從網(wǎng)絡(luò)讀取和播放 MP4 文件時(shí)闹伪,就可以較快獲取到 moov 的數(shù)據(jù)并開(kāi)始播放沪铭。
如果你也對(duì)音視頻技術(shù)感興趣,比如祭往,符合下面的情況:
- 在校大學(xué)生 → 學(xué)習(xí)音視頻開(kāi)發(fā)
- iOS/Android 客戶端開(kāi)發(fā) → 轉(zhuǎn)入音視頻領(lǐng)域
- 直播/短視頻業(yè)務(wù)開(kāi)發(fā) → 深入音視頻底層 SDK 開(kāi)發(fā)
- 音視頻 SDK 開(kāi)發(fā) → 提升技能伦意,解決優(yōu)化瓶頸
我們創(chuàng)建了一個(gè)社群,vx 搜索『gjzkeyframe』 關(guān)注『關(guān)鍵幀Keyframe』咨詢硼补,或知識(shí)星球搜『關(guān)鍵幀的音視頻開(kāi)發(fā)圈』即可加入驮肉。