剑痴乎

  • 首页
  • 文章分类
    • 音视频
    • WebRTC
    • 编程之美
    • Linux
    • Windows
    • 生活点滴
    • 校园生活
  • 参考
    • API参考
    • 实用工具
    • 测试音视频
    • 文档
  • 留言板
  • 关于
剑痴乎
代码为剑,如痴如醉
  1. 首页
  2. 音视频
  3. 正文

流媒体网络性能指标——抖动

2017年8月14日 3057点热度 8人点赞 5条评论

有时候我们开发一个流媒体系统,做完了却不知道如何用数字描述我们的系统,体现我们的优势,作为客户来说,可以描述这套系统的数字指标是最直观的,尤其在网络性能这块。在流媒体网络中,影响流媒体服务质量(QOS)的因素有很多,而这些因素可以作为我们衡量流媒体网络性能的指标。

衡量流媒体网络性能的常见指标主要有:

  • 带宽
  • 吞吐量
  • 延时
  • 抖动
  • 丢包率

本篇文章主要讲下抖动(jitter),以及如何处理抖动,本文主要针对语音通信。在网络中,每个包从发送端到接收端的时延是不相同的,而jitter就是用来衡量这种不同。在发送端数据包发送时间间隔是相同的,也就是均匀发送数据,但是由于各种情况,例如拥塞,因为网络错误导致的丢包等,接受端收到数据包间隔就会不一样了,可能一会大,一会小,这就是所谓的抖动,严重影响音质。
jitter
下面先了解下传统学术上的相关定义。

  • 延时:记s(i), r(i)分别为第i个包的发送、接收时间戳,延时d(i) = r(i) – s(i)
  • 抖动:jitter(i) = d(i+1) – d(i)

传统定义中,抖动仅能描述某个时刻的情况,而流媒体是持续的,我们更关注某个时间段上的情况,对比某时刻情况更实用。
为了更好描述某个时间段的抖动,我们按如下定义更实用的抖动指标(参考声网):
1)记s(i), r(i)为第i个包的发送与接收时间戳,延时d(i) = r(i) – s(i);
2)t秒为一个统计周期,集合D = {d(i) | i ∈ t秒内收到的包序号集合 };
3)对集合D做从小到大排序,得到D(sorted);
4)对D(sorted)中每个元素,减去D中最小值min(D),得到新的集合 D(jitter)。

现在D(jitter)中元素含义就是,t秒内所有语音数据包传输延时,相对最快那个数据包的偏移,原来抖动定义是相对前一个包延时偏移。可知D(jitter)中最大元素表示传输延时最大的。

为了消除抖动,接收端要么丢帧,要么延时。一般都会引入一个缓冲区,也就是抖动缓冲(jitterbuffer)。引入了抖动缓冲后,我们可以这样处理抖动:
1)jitter > jitterbuffer length,丢帧处理;
2) jitter <= jitterbuffer length,延时处理。
null

所以现在D(jitter)中最大元素表示:如果jitterbuffer大小拉长到这个值,就能成功播放t秒内收到的语音数据。按这个定义,我们就可以动态设置我们的jitterbuffer大小,每一个t时间周期调整一次jitterbuffer。

如果想对抖动缓冲有更深入学习,可以参考WebRTC源码以及谷歌学术上相关论文,相关研究很多。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
标签: 音视频
最后更新:2020年5月11日

Jeff

管理员——代码为剑,如痴如醉

打赏 点赞
< 上一篇
下一篇 >

文章评论

  • zoring

    这样虽然可以处理部分的情况,但一旦出现了输入端的错误,就会导致累计误差的出现了,就是原本的输入里面在某些摄像机上回出现pts或者dts混乱,这个问题会出现,累计误差出现。

    2017年9月25日
    回复
    • Jianchihu

      @zoring

      这个主要针对语音通信的,视频肯定不能这么处理。还有摄像机一般没有B帧,pts与dts是一样的,只要确保时间戳是递增的就可以。接收端这边肯定会有个缓存,你push进缓存时,按照时间戳排序就可以了,就不会受输入端错误影响。

      2017年9月25日
      回复
  • Migiwa

    香川県さぬき市長尾 ルーちゃん餃子のフジフーヅは入ったばかりのバイトにパワハラの末指切断の大けがを負わせた犯罪企業.中卒社員岸下守(現在 鏡急配勤務)の犯行.

    2019年12月25日
    回复
  • taxue

    记s(i), r(i)为第i个包的发送与接收时间戳,延时d(i) = r(i) – s(i);
    这个发送和接收时间戳来自于不同的时钟,怎么计算的d(i) 结果准确性?

    2020年2月20日
    回复
  • robotcop

    好厉害

    2021年10月13日
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复

    此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据。

    版权声明

    为支持原创,创作更好的文章,未经许可,禁止任何形式的转载与抄袭,如需转载请邮件私信!本人保留所有法定权利。违者必究!

    近期评论
    • ziqzhang on Windows平台WebRTC编译(持续更新)或者重新走一遍 1.一个环境准备 201…
    • ziqzhang on Windows平台WebRTC编译(持续更新)c:\zzq\webrtc\src…
    • ziqzhang on Windows平台WebRTC编译(持续更新)4117 /D__DATE__= /D_…
    • ziqzhang on Windows平台WebRTC编译(持续更新)多试几次 看你这个应该没下载成功
    • ziqzhang on Windows平台WebRTC编译(持续更新)默认下载下来是10.0.22621.0.…
    相关文章
    • 音视频开发入门:视频基础
    • 大话WebRTC
    • WebRTC音视频传输基础:NAT穿透
    • Intel平台硬件加速视频编解码开发
    • 音视频开发入门:音频基础

    COPYRIGHT © 2023 jianchihu.net. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang