Opus是一種開(kāi)源免費(fèi)的音頻編解碼器,支持音樂(lè)和語(yǔ)音,具有低延時(shí)、帶內(nèi)FEC、DTX、PLC等特點(diǎn),默認(rèn)22.5ms延時(shí),非常適用網(wǎng)絡(luò)實(shí)時(shí)傳輸。官網(wǎng):https://www.opus-codec.org。Opus協(xié)議收錄于RFC6716,使用SILK和CELT兩種編碼。
目錄
一、Opus特點(diǎn)
二、碼率、音質(zhì)、延時(shí)
1、音質(zhì)與碼率比較
2、碼率與延時(shí)對(duì)比
三、Opus編解碼框架
四、DTX非連續(xù)傳輸
五、FEC前向糾錯(cuò)
六、Opus解碼
1、SILK解碼器
七、PLC丟包隱藏
一、Opus特點(diǎn)
Opus在語(yǔ)音app應(yīng)用很廣泛,包括VoIP、視頻會(huì)議、語(yǔ)音聊天、音樂(lè)直播演唱會(huì)等。即支持低碼率語(yǔ)音,也支持高音質(zhì)音樂(lè)。特點(diǎn)如下:
- 碼率支持從6kb/s到510kb/s;
- 采樣率支持從8kHz到48kHz;
- 可變幀長(zhǎng)從2.5ms到60ms;
- 支持CBR和VBR兩種碼率模式;
- 音頻帶寬從窄帶到全頻帶;
- 支持語(yǔ)音和音樂(lè);
- 支持多達(dá)255個(gè)聲道;
- 動(dòng)態(tài)調(diào)整碼率、帶寬、幀大?。?/li>
- 支持PLC丟包隱藏;
二、碼率、音質(zhì)、延時(shí)
1、音質(zhì)與碼率比較
Opus、AAC、MP3、Vorbis等codec的質(zhì)量與碼率對(duì)比,如下圖所示:
?由圖可見(jiàn),Opus的碼率從6kb/s到128kb/s都是音質(zhì)最高的,接著是AAC、Vorbis,而MP3是在128kb/s時(shí)取得不錯(cuò)音質(zhì)。
2、碼率與延時(shí)對(duì)比
Opus、AAC、Vorbis、MP3等codec的碼率與延時(shí)對(duì)比,如下圖所示:
?由圖可見(jiàn),Opus的碼率從6kb/s到80kb/s時(shí),延時(shí)都是最低的。接著是窄帶的G729,超寬帶的AAC-LD(低延遲模式)。而延時(shí)比較的是Vorbis、AAC、MP3,延時(shí)達(dá)到200ms左右。
三、Opus編解碼框架
Opus的編解碼框架包括:VAD靜音檢測(cè)、音調(diào)分析、預(yù)測(cè)分析、噪聲整形分析、長(zhǎng)期預(yù)測(cè)量化、線譜頻率量化、增益量化。如下圖所示:
四、DTX非連續(xù)傳輸
DTX,Discontinuous Transmission,用于檢測(cè)靜音傳輸時(shí),自動(dòng)降低碼率節(jié)省帶寬。前面提及的VAD模塊就是用來(lái)靜音檢測(cè)。DTX適用于VBR和CBR碼率模式,會(huì)稍微降低聲音質(zhì)量。因此,建議在網(wǎng)絡(luò)帶寬受限條件下,才開(kāi)啟DTX。
五、FEC前向糾錯(cuò)
FEC,F(xiàn)orward Error Correct,通過(guò)添加先前數(shù)據(jù)包的冗余數(shù)據(jù)到當(dāng)前包,實(shí)現(xiàn)前向糾錯(cuò)。Opus允許帶內(nèi)的FEC。編碼器決定是否使用FEC取決以下條件:
- 外部提供信道丟包率估計(jì);
- 外部提供信道容量估計(jì);
- 語(yǔ)音或音樂(lè)對(duì)丟包的敏感度;
- 解碼器有沒(méi)請(qǐng)求帶內(nèi)FEC信息;
發(fā)生丟包時(shí),接收端可以根據(jù)FEC重建數(shù)據(jù)包。但是,每個(gè)數(shù)據(jù)包加上FEC導(dǎo)致數(shù)據(jù)量變大,所以FEC需要根據(jù)實(shí)際情況使用(比如丟包率達(dá)到一定程度)。
六、Opus解碼
Opus的解碼包括SILK和CELT兩部分,在SILK端做采樣率轉(zhuǎn)換和延遲補(bǔ)償,在CELT端做決策處理。如下圖所示:
1、SILK解碼器
SILK解碼流程如下圖所示:?
?對(duì)應(yīng)序號(hào)的參數(shù)如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-400521.html
- 局部編碼比特流;
- 編碼參數(shù);
- 脈沖、信號(hào);
- 音調(diào)間隔,LTP系數(shù);
- LPC線性預(yù)測(cè)編碼系數(shù)和增益;
- 解碼信號(hào);
- 分離信號(hào);
- 重采樣信號(hào);
七、PLC丟包隱藏
PLC,Packet Loss Concealment,是解碼器可選模塊。PLC依賴上一個(gè)接收到的數(shù)據(jù)包。在CELT解碼模式,找出周期性的解碼信號(hào),使用音調(diào)偏移來(lái)重復(fù)窗口波形。窗口波形以如下方式重疊:保留時(shí)域混疊消除的上一個(gè)幀和下一幀。調(diào)用celt_decode_lost()函數(shù)實(shí)現(xiàn)。在SILK解碼模式,使用上一幀的LPC(線性預(yù)測(cè)編碼)插幀。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-400521.html
到了這里,關(guān)于走進(jìn)音視頻的世界——Opus編解碼協(xié)議的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!