iOS 使用WebRTC进行直播推流时,对声音进行音质优化
2020/5/4 23:56:19
本文主要是介绍iOS 使用WebRTC进行直播推流时,对声音进行音质优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近我们在使用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;
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进行直播推流时,音乐等背景音的音质有了大幅提升,也没有异常的声音忽高忽低的问题了
这篇关于iOS 使用WebRTC进行直播推流时,对声音进行音质优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-10-05Swift语法学习--基于协议进行网络请求
- 2022-08-17Apple开发_Swift语言地标注释
- 2022-07-24Swift 初见
- 2022-05-22SwiftUI App 支持多语种 All In One
- 2022-05-10SwiftUI 组件参数简写 All In One
- 2022-04-14SwiftUI 学习笔记
- 2022-02-23Swift 文件夹和文件操作
- 2022-02-17Swift中使用KVO
- 2022-02-08Swift 汇编 String array
- 2022-01-30SwiftUI3.0页面反向传值