攻克视频技术
李江
声网 Agora 视频专家
7494 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 19 讲
攻克视频技术
15
15
1.0x
00:00/00:00
登录|注册

12|Jitter Buffer:拿什么拯救你,花屏卡顿问题

你好,我是李江。
之前的两节课我们讲述了如何做好带宽预测和码率控制。好的带宽预测算法能够比较准确地预测出实际的网络带宽,而好的码率控制算法能够使得编码输出码率贴合实际网络带宽。这两个算法是视频流能够在各种网络状况下流畅播放的最基础的前提。
但是在实际情况中,很多时候我们还是会遇到各种各样的卡顿和花屏的问题。相信这两种问题你也是经常遇到,同时也是让你很头痛的问题。
那么,我们这节课就来讨论一下,一般哪些环节出问题会比较容易出现卡顿,以及哪些环节有问题会比较容易出现花屏。并且,我也会给出一些常用的解决方案。通过这节课的学习,你之后再遇到花屏卡顿问题的时候,可以参考一下,从而能够快速发现问题和找到解决的方法。
在讲述具体问题之前,先简单介绍一下 Jitter Buffer 这个模块。它是好几个卡顿和花屏问题的处理模块。Jitter Buffer 工作在接收端,主要功能就是在接收端收到包之后进行组帧,并判断帧的完整性、可解码性、发送丢包重传请求、发送关键帧请求以及估算网络抖动的。其中组帧、判断帧完整性、判断帧可解码性、丢包重传、关键帧请求都是这节课的重点。因此,我先在这里重点说一下 Jitter Buffer 这个模块。Jitter Buffer 在接收端所处的位置如下图所示:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

视频通话中常见的卡顿和花屏问题对用户体验产生重要影响。本文详细介绍了这些问题的原因和解决方案。作者首先讨论了视频卡顿可能的原因,包括帧率不足、机器性能不足和编码器输出码率超过网络带宽等情况,并提出了相应的解决方案。其中,PacedSender模块的工作原理和丢包重传策略被重点介绍,以及在极端情况下的关键帧请求。此外,文章还提到了花屏问题的常见原因。总的来说,本文通过具体案例分析和解决方案,为读者提供了在实际应用中快速发现问题和找到解决方法的指导。这些解决方案对于提高视频通话质量和用户体验至关重要。文章还介绍了帧不完整、参考帧和YUV格式问题以及Stride问题,为读者提供了更深入的技术细节和解决方案。通过本文,读者可以快速了解视频通话中常见问题的原因和解决方法,为提高视频通话质量提供了有益的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《攻克视频技术》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(18)

  • 最新
  • 精选
  • Chris Zou
    老师有没有可能加餐,讲讲另外一个方式FEC冗余和重传方式之间的配合,以及itterbuffer对这两种包的不同处理?

    作者回复: 这两个之间要配合好其实是非常复杂的。但是总的思路就是,如果RTT很高那么重传时间会很长,这是可以主要使用fec,如果RTT 比较小的话,可以重传多一些。

    2022-01-13
    2
  • 一身龙骨
    图像的宽高搞反了出现过花屏

    作者回复: 这个就有点类似于stride弄错了

    2022-01-11
    1
  • 播放技术部
    “重传也没有收到包” 这块有个问题想请教下,就是如果一个包重传了很久都没有收到,那么后面请求IDR帧的话,由于IDR帧很大,那么不是更有概率导致丢包吗?还有这个请求的IDR帧具体是离丢包的P帧多远的I帧呢?

    作者回复: 是会有这个问题,如果你是持续高丢包的情况下的话,可能会卡住很长时间。但是也没有办法,你不可能一直重传前面丢失的包,毕竟有实时性的要求,毕竟大多数时候丢包率不会一直非常高。 这个IDR帧是收到I帧请求之后,通过编码器的接口告诉编码器当前帧需要编码成IDR帧的,跟丢包的P帧的距离,编码器不会关心。

    2022-09-23归属地:浙江
  • Geek_6e7396
    文中判断帧完整时需要下一个帧到达,这样该帧送往下一步就会晚一个帧间距,这里就需要按帧编码做解析

    作者回复: 是的,但是webrtc采用的前一种方式,因为对于不同编码类型都适用,不依赖具体的编码标准

    2022-07-06
  • allin
    老师,jitter buffer 在哪能找到模块源码进行学习,

    作者回复: webrtc里面的packet buffer 和frame buffer,老版本是VCMJitterBuffer

    2022-02-23
  • Chris Zou
    除了webrtc中的这种方式把所有包放到一个队列里面,还有什么好的方式处理,一般做法是什么样子的?

    作者回复: 我文章里面还讲了一种方式啊,通过first_mb_in_slice 来判断开头第一个包,通过Marker位判断最后一个包,中间的所有包都在也可以表示完整了

    2022-01-13
    2
  • Chris Zou
    WebRTC 中在使用的方法,在一个排好序的包队列里,从标志位M的包往前找连续包,直到有跳变就认为帧完整,这里跳变之外,应该也要判断是不是首包是否还在把?

    作者回复: 如果时间戳有跳变同时序列号是连续的,那首包就一定在。不然序列号是不会连续的。

    2022-01-13
    2
  • 翻了下代码,看上去是会进行kstash 会判断下seq连续,这种还有什么别的好办法没,gop内连续丢参考帧。

    作者回复: 是的,如果有SVC那种不连续参考的参考结构就不需要完全连续了。可以参考SVC那节课。

    2021-12-24
  • 大佬,webrtc的jitterbuffer有处理264那种如果一个gop内完整的丢了几个p帧的这种情况么,大概怎么处理的?

    作者回复: 有处理的,不能丢帧。会发送关键帧请求给发送端要求发送关键帧。

    2021-12-24
  • iOS coder
    怎么对花屏进行线上监控呢?

    作者回复: 其实花屏不好线上监控的。可以采用一些AI手段来对解码后的YUV做识别是不是花屏。

    2021-12-23
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部