美文网首页iOS音视频(直播 音频 视频)
iOS 使用WebRTC进行直播推流时,对声音进行音质优化

iOS 使用WebRTC进行直播推流时,对声音进行音质优化

作者: 爱吃土豆片啊 | 来源:发表于2020-04-29 20:49 被阅读0次

      最近我们在使用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进行直播推流时,对声音进行音质优化

        本文链接:https://www.haomeiwen.com/subject/xkehmhtx.html