webrtc音频QOS方法二(opus编码器自适应网络参数调整功能)

一、opus函数调用接口

 

二、自适应网络调整参数介绍

1、WebRtcOpus_SetBitRate

        Opus支持码率从6 kbit/s到510 kbit/s的切换功能,以适应这种网络状态。以20ms单帧数据编码为例,下面是各种配置的Opus的比特率最佳点。

 

2、WebRtcOpus_SetPacketLossRate

      动态配置丢包率,是为了动态调整opus FEC的冗余度。opus编码器自带inband FEC冗余算法,增强抗丢包能力。大概使用的是非对称冗余协议。将一些关键信息多次编码重传。

3、WebRtcOpus_EnableFec/DisableFec

     开启或者关闭inband FEC功能。

     走读opus代码,发现只有silk编码支持inband FEC。函数实现调用栈如下:

opus_encode_native
->silk_Encode
->silk_encode_frame_Fxx
->silk_encode_frame_FLP
->silk_LBRR_encode_FLP

    celt不支持inband FEC。猜测celt是通过改变参考帧长度,来增强抗网络丢包能力。

4、WebRtcOpus_EnableDtx/DisableDtx

     DTX:Discontinuous Transmission。不同于music场景,在voip场景下,声音不是持续的,会有一段一段的间歇期。这个间歇期若是也正常编码音频数据,对带宽有些浪费。所以opus支持DTX功能,若是检测当前会议没有明显通话声音,仅定期发送(400ms)静音指示报文给对方。对方收到静音指示报文可以补舒适噪音包(opus不支持CNG,不能补舒适噪音包)或者静音包给音频渲染器。

5、WebRtcOpus_EnableCbr/DisableCbr

   opus支持恒定码率和变码率两种编码方式。一般流媒体使用CBR,voip场景使用VBR。

6、WebRtcOpus_SetMaxPlaybackRate

    根据采样率调整算法bandwidth参数。

7、WebRtcOpus_SetComplexity

       取值范围0-10。值越大代码复杂度越高,音质越好。webrtc里面只有安卓、IOS、ARM支持复杂度切换功能。windows系统默认都是9。

8、WebRtcOpus_SetForceChannels

     opus支持单双声道切换功能。当传入数据是双声道,解码器是单声道,解码器会average左右声道数据,以单声道数据输出。

当传入数据是单声道,解码器是双声道,解码器会给左右声道输出同一份数据。一般voip使用单声道传输,music使用双声道,这种单双声道切换,主要提升music场景下抗弱网能力。

9、WebRtcOpus_EncoderCreate.application

    #define OPUS_APPLICATION_VOIP     2048
    #define OPUS_APPLICATION_AUDIO   2049
    #define OPUS_APPLICATION_RESTRICTED_LOWDELAY 2051
application有三种模式:voip、music、lowdelay三种模式。

voip主要使用SILK编码,music主要使用CELT编码。lowdelay取消voip场景的一些优化方案,换取一丢丢低延时。

三、参考

《rfc6716》

在iOS上使用WebRTC进行音视频通话时,调整编码参数有助于优化网络传输质量和设备性能。WebRTC(Web Real-Time Communication)库提供了丰富的设置选项来控制编解码器的行为。以下是一些关键的编码参数调整: 1. **VideoEncoder**: - `videoEncoderConfiguration`: 可以设置特定的视频编码器配置,例如H264Profile、Bitrate、MaxFramerate等。例如: ```swift let videoEncoderConfig = RTCVideoEncoderConfiguration( codecType: .h264, profile: .high, bitrate: 1000000, // 1 Mbps maxBitrate: 2000000, // 2 Mbps ) ``` 2. **AudioEncoder/Decoder**: - `audioEncoder` 和 `audioDecoder` 可能支持自适应比特率或者设置特定的参数,如码率、采样率等。例如: ```swift let audioEncoderConfig = RTCRtpAudioEncoderConfiguration( payloadType: ..., bitrate: 64000, // 64 kbps ) ``` 3. **VideoCodecConstraints**: 当选择编解码器时,可以提供偏好或限制,比如对分辨率、帧率的约束: ```swift let constraints = RTCVideoConstraints( mandatory: [ .width: 640, .height: 480, .frameRate: 30.0, ], optional: [ .maxWidth: 1280, .maxHeight: 720, ] ) ``` 4. **Network Monitoring**: 通过RTCPeerConnection的`stats`接口监控网络状况,根据丢包率和延迟动态调整码率。 相关问题-- 1. 如何在iOS WebRTC中检测并调整视频编码的丢包率? 2. 如何设置iOS WebRTC以优先使用设备音频的高质量模式? 3. 怎么在iOS上启用或禁用视频编码的自适应比特率功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值