前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebRTC中使用的QOS相关的标准协议

WebRTC中使用的QOS相关的标准协议

作者头像
呱牛笔记
发布2023-05-02 15:21:53
2390
发布2023-05-02 15:21:53
举报
文章被收录于专栏:呱牛笔记

原来面对这些问题,除了网络层的优化外,协议层的优化也很重要,WebRTC中涉及相关的算法和标准的应用,理解和优化这些算法能力是很重要的!

代码语言:javascript
复制
rtx : https://tools.ietf.org/html/rfc4588
red: https://tools.ietf.org/html/rfc2198
ulpfec:https://tools.ietf.org/html/rfc5109

之前调测WebRTC的UlpFEC能力,发现一些问题,记录下来:

问题1. 默认支持的音频codec type过多,出现主叫侧单方向音频类型的payload type和VP8 的payload 121冲突,会更新冲突VP8的payload type,但服务器转发被叫侧的payload type还是121,ulpfec使用red封装数据包,而被叫侧red包头的payload type依旧是121,服务器转发的时候没有做更新,导致主叫侧认为该payload type不合法,主叫侧不解码,出现听不到声音现象。

修改:主叫侧删除不需要的codec。

问题2. rtt越大时,ulpfec包生成越多,和正常使用场景不符,rtt越大,表示网络拥塞越严重,但这个时候根据rtt增大ulpfec冗余包的冗余比率,冗余包发的越多,rtt变得更长,网络卡顿更明显。

一旦rtt值大于80, 最小保护包的个数修改为4个,也就是4个rtp包1个fec冗余包,冗余比率达到20%。 constexpr size_t kMinMediaPackets = 4; constexpr uint8_t kHighProtectionThreshold = 80;

//文件 Ulpfec_generator.cc

代码语言:javascript
复制
UlpfecGenerator::AddRtpPacketAndGenerateFec()方法中:
 if (complete_frame &&
      (num_protected_frames_ == params_.max_fec_frames ||
       (ExcessOverheadBelowMax() && MinimumMediaPacketsReached()))) {
    // We are not using Unequal Protection feature of the parity erasure code.
    constexpr int kNumImportantPackets = 0;
    constexpr bool kUseUnequalProtection = false;
    int ret = fec_->EncodeFec(media_packets_, params_.fec_rate,
                              kNumImportantPackets, kUseUnequalProtection,
                              params_.fec_mask_type, &generated_fec_packets_);
    if (generated_fec_packets_.empty()) {
      ResetState();
    }
    return ret;
  }
呱牛笔记
呱牛笔记
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档