最佳化音質是直播電商原始碼不能忽略的

雲豹科技曉彤發表於2021-08-26

最近直播電商原始碼在使用WebRTC進行直播推流的時候,遇到了音樂音質不好的問題,對此進行最佳化後,音樂音質有很大提升,因此記錄下最佳化過程,分享出來

1. 關閉AEC,AGC,NS

因為WebRTC是專為實時視訊通話設計的,所以WebRTC的語音處理演算法也是專門為視訊通話最佳化的,為了進行正常的視訊通話,必須對語音進行AEC,AGC演算法處理,但是AEC對人聲有特殊處理,但是對音樂的背景聲音處理的不好,如果進行直播的時候,使用AEC,會對音樂的背景音產生消噪,從而影響直播電商原始碼的音質,可以關閉iOS端的硬體AEC,AGC,NS等演算法

關閉方法

在voice_processing_audio_unit.mm檔案中,修改

vpio_unit_description.componentSubType = kAudioUnitSubType_VoiceProcessingIO;

//修改為kAudioUnitSubtype_RemoteIO

vpio_unit_description.componentManufacturer = kAudioUnitManufacturer_Apple;

UInt32 enable_agc = 0;  

result = AudioUnitSetProperty(vpio_unit_, kAUVoiceIOProperty_VoiceProcessingEnableAGC, kAudioUnitScope_Global, kInputBus, &enable_agc, sizeof(enable_agc));

2. 修改Opus編碼演算法

WebRTC中預設是採用Opus編碼,Opus編碼是由silk編碼和celt編碼合併在一起,silk編碼是由skype公司開源的一種語音編碼,特別適合人聲,適合於Voip語音通訊。celt和mp3,aac類似,適合於傳輸音樂。Opus編碼具備以下特點:

6 kb /秒到510 kb / s的位元率

取樣率從8 kHz(窄帶)到48 kHz(全頻)

幀大小從2.5毫秒到60毫秒

支援恆定位元率(CBR)和可變位元率(VBR)

從窄帶到全頻段的音訊頻寬

支援語音和音樂

支援單聲道和立體聲

支援多達255個頻道(多資料流的幀)

可動態調節位元率,音訊頻寬和幀大小

良好的魯棒性丟失率和資料包丟失隱藏(PLC)

浮點和定點實現

WebRTC中預設是使用Opus編碼的,在SDP中有標記

a=rtpmap:111 opus/48000/2

a=rtcp-fb:111 transport-cc

a=fmtp:111 minptime=10;useinbandfec=1

音訊取樣率是48000,音訊打包時間是10ms,單聲道,編碼採用的是Opus裡面的silk編碼,適合傳人聲,不適合傳音樂,所以如果需要使用WebRTC進行直播推流,直播電商原始碼需要對audio編碼進行修改

3. 修改聲道數

在a=ftmp這一行中加入stereo=1代表雙聲道,stereo=0代表單聲道,雙聲道一般用來傳音樂,從WebRTC程式碼中可以發現,當我們設定聲道數為2時,opus編碼內部將使用celt, celt適合傳輸音樂,程式碼如下:

config.application = config.num_channels == 1 ? AudioEncoderOpus::kVoip : AudioEncoderOpus::kAudio;

kVoip適合於語音通話,kAudio適合於傳輸音樂

4. audio碼流修改

在a=ftmp這一行中加入maxaveragebitrate代表接收方能接受的最大碼流,單位為bit。比如maxaveragebitrate=128000代表碼流為128kbps,提高audio碼流可以提升音樂音質

聲道數,碼流等引數,可以在sdp中統一修改

a=fmtp:111 minptime=10;useinbandfec=1;stereo=1;maxaveragebitrate=128000;maxplaybackrate=48000

總結:直播電商原始碼修改完WebRTC這些引數,再使用WebRTC進行直播推流時,音樂等背景音的音質有了大幅提升,也沒有異常的聲音忽高忽低的問題了

宣告:本文由雲豹科技轉發自zhangfan0021部落格,如有侵權請聯絡作者刪除

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70002045/viewspace-2789007/,如需轉載,請註明出處,否則將追究法律責任。

相關文章