webrtc M76版本中h264花屏bug

基于WebRTC M76版本进行直播拉流时,尤其是在处理高码率和高分辨率的H264流并遭遇网络不佳的情况下,可能会遇到画面花屏的问题。这源于在组帧过程中,关键帧可能因未完整接收而提前返回,导致至少一个GOP的显示异常。组帧逻辑涉及对RTP包的顺序和完整性检查,确保非关键帧完整后再返回,但关键帧的处理存在漏洞,使得在特定条件下可能出现花屏现象。
摘要由CSDN通过智能技术生成

用webrtc直播拉流比传统的rtmp方式延迟要低,能控制延迟在1s之内,基于M76版本的webrtc在拉h264的流时,如果码率和分辨率比较大,加上网络不好的话,会出现花屏问题。

webrtc的组帧写的很有意思,每来一个包检测是否满足组帧条件具体代码如下

bool PacketBuffer::PotentialNewFrame(uint16_t seq_num) const {
  size_t index = seq_num % size_;
  int prev_index = index > 0 ? index - 1 : size_ - 1;

  if (!sequence_buffer_[index].used)
    return false;
  if (sequence_buffer_[index].seq_num != seq_num)
    return false;
  if (sequence_buffer_[index].frame_created)
    return false;
  if (sequence_buffer_[index].frame_begin)
    return true;
  if (!sequence_buffer_[prev_index].used)
    return false;
  if (sequence_buffer_[prev_index].frame_created)
    return false;
  if (sequence_buffer_[prev_index].seq_num !=
      static_cast<uint16_t>(sequence_buffer_[index].seq_num - 1)) {
    return false;
  }
  if (data_buffer_[prev_index].timestamp != data_buffer_[index].timestamp)
    return false;
  if (sequence_buffer_[pr
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值