admin管理员组

文章数量:1624319

参数分析:

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

在webrtc_voice_engine的WebRtcAudioSendStream类中可以观察到

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

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

switch (parameters.encodings[0]work_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]work_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) {}   

抓包验证:

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

本文标签: 用在类中包中音频参数