流媒体网络性能指标——抖动
来源:互联网 发布:汽车修理app软件 编辑:程序博客网 时间:2024/06/05 14:23
有时候我们开发一个流媒体系统,做完了却不知道如何在数字上描述我们的系统,体现我们的优势,作为客户来说,可以描述这套系统的数字指标是最直观的。网络性能是最重要的,在流媒体网络中,影响流媒体服务器质量QOS的因素有很多,而这些因素可以作为我们衡量流媒体网络性能的指标。
衡量流媒体网络性能的指标主要有:
- 带宽
- 吞吐量
- 延时
- 抖动
- 丢包率
本篇文章主要讲下抖动(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,延时处理。
所以现在D(jitter)中最大元素表示:如果jitterbuffer大小拉长到这个值,就能成功播放t秒内收到的语音数据。按这个定义,我们就可以动态设置我们的jitterbuffer大小,每一个t时间周期调整一次jitterbuffer。
如果想对抖动缓冲有更深入学习,可以参考webrtc资料以及谷歌学术上相关论文,相关研究很多。
- 本文固定链接: http://blog.jianchihu.net/network-performance-jitter.html
- 流媒体网络性能指标——抖动
- 流媒体性能指标
- 网络抖动
- Java程序性能优化——性能指标
- Windows监控——性能指标详解
- 磁盘性能指标——IOPS理论
- Java程序性能优化——性能指标
- 网络性能指标及测试方法
- 流媒体协议—HTTP
- 流媒体协议—FLV
- 流媒体协议—RTMP
- 流媒体协议—HLS
- 性能指标
- 性能指标
- 性能指标
- 性能指标
- 性能指标
- 音视频同步、网络抖动
- 店铺众筹,真的靠谱嘛?
- java生成随机字符串uuid
- Eclipse添加插件的方法
- Hibernate UUID 生成策略
- 菜鸟先飞之SVN_客户端安装
- 流媒体网络性能指标——抖动
- 遍历List集合的三种方法
- git的客户端sourcetree的安装问题
- 关于java的绝对路径和相对路径问题
- android 开发中常用的第三方库(图片加载篇——Glide)
- js 处理接收到的数据
- Platform来获取一些系统的路径和参数
- Spring Cloud构建微服务架构:服务网关(过滤器)【Dalston版】
- 让js中数据类型所有的方法都通用起来