webrtc调试RtpEncodingParameters类中的network_priority和bitrate_priority参数,作用在音频RTP发送包中。

参数分析:

network_priority:此编码的相对区分服务代码点优先级,允许在不影响带宽分配的情况下将数据包标记为相对较高或较低。

在webrtc_voice_engine.cc的WebRtcAudioSendStream类中可以观察到

config_.has_dscp =
        rtp_parameters_.encodings[0].network_priority != webrtc::Priority::kLow;

说明此参数影响到dscp,通过SetRtpSendParameters函数设置dscp优先级,贴出此函数部分源码

switch (parameters.encodings[0].network_priority) {
  case webrtc::Priority::kVeryLow:
    new_dscp = rtc::DSCP_CS1;
    break;
  case webrtc::Priority::kLow:
    new_dscp = rtc::DSCP_DEFAULT;
    break;
  case webrtc::Priority::kMedium:
    new_dscp = rtc::DSCP_EF;
    break;
  case webrtc::Priority::kHigh:
    new_dscp = rtc::DSCP_EF;
    break;
}
SetPreferredDscp(new_dscp);  // 调用UpdateDscp() --> 将首选DSCP设置应用于底层网络接口RTP和RTCP通道。如果禁用了DSCP,则应用默认DSCP值(即DSCP_DEFAULT)

bitrate_priority:此编码的相对比特率优先级。目前,这是通过使用第一个编码参数的值为整个rtp发送方实现的。根据编码参数实现此功能。目前,在VideoBitrateAllocator中,对于每个同播层的比特率分布有逻辑。必须对其进行更新以合并相对比特率优先级。

个人理解为: Priority network_priority的4个等级对应double bitrate_priority的4个数值

enum class Priority {
  kVeryLow,    //   -->   bitrate_priority = 0.5
  kLow,             //   -->   bitrate_priority = 1.0
  kMedium,    //   -->   bitrate_priority = 2.0
  kHigh,           //   -->   bitrate_priority = 4.0
};

调试:

WebRtcAudioSendStream对象的创建在WebRtcVoiceMediaChannel::AddSendStream函数中,为了调试方便,直接在此函数下调用WebRtcVoiceMediaChannel::SetRtpSendParameters

在函数尾部添加
webrtc::RtpParameters test_parameters = send_streams_[ssrc]->rtp_parameters(); //获取已初始化的参数
test_parameters.encodings[0].network_priority = webrtc::Priority::kHigh;
test_parameters.encodings[0].bitrate_priority = 4.0;
WebRtcVoiceMediaChannel::SetRtpSendParameters(ssrc, test_parameters); //修改RtpSend参数
send_streams_[ssrc]->SetRtpParameters(test_parameters);

直接强制修改enable_dscp_为true使得SetPreferredDscp(new_dscp)能够生效

MediaChannel::MediaChannel(const MediaConfig& config)
    : enable_dscp_(true) {}
    //: enable_dscp_(config.enable_dscp) {}   

抓包验证:

image-20211012175518908

image-20211012175550138

音频的RTP包,dscp优先级为EF,视频的RTP包,dscp优先级仍为默认的CS0

参考资源链接:[Python库webrtc_audio_processing-0.1.1的安装与应用](https://wenku.csdn.net/doc/1ao1dksu5f?utm_source=wenku_answer2doc_content) 当你在寻找实现音频处理功能的Python库时,webrtc_audio_processing是一个不错的选择,特别是当你需要处理WebRTC音频通信时。首先,你需要确保你的系统中已经安装了Python环境。然后,你可以使用pip这个Python包管理工具来安装webrtc_audio_processing库。打开你的命令行工具,输入以下命令来安装最新版本的库文件: pip install webrtc_audio_processing 如果你想要安装特定版本的库,比如0.1.1版本,你可以使用以下命令: pip install webrtc_audio_processing==0.1.1 安装完成后,你可以在Python代码中通过import语句引入该库,然后调用其提供的各种音频处理函数。例如,如果你需要进行回声消除,可以使用以下代码: import webrtc_audio_processing # 初始化音频处理器 processor = webrtc_audio_processing.WebRtcAudioProcessor() # 添加音频数据进行处理 processor.process音频数据 请注意,webrtc_audio_processing库的API可能会随着版本的不同而有所变化,因此建议参考官方文档或提供的安装与应用指南《Python库webrtc_audio_processing-0.1.1的安装与应用》来确保正确使用。这份指南不仅包含安装步骤,还可能涉及如何调用库中的函数以及如何处理可能遇到的问题。 完成这些步骤后,你应该能够顺利地将webrtc_audio_processing库集成到你的项目中,实现高质量的音频处理功能。对于深入学习和理解音频处理的相关技术,建议继续探索官方资源和其他技术文章,以获得更加全面的知识和技能。 参考资源链接:[Python库webrtc_audio_processing-0.1.1的安装与应用](https://wenku.csdn.net/doc/1ao1dksu5f?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值