音视频常见问题分析和解决:延迟(时延 delay)和抖动

延迟和抖动

延迟:是网络传输中的一个重要指标,测量了数据从一个端点到另外一个端点所需的时间。一般我们用毫秒作为其单位。通常我们也把延迟叫做延时,但是延时有时还会表示数据包发送端到接受端的往返时间。这个往返时间我们可以通过网络监控工具测量,测量数据包的发送时间点和接受到确认的时间点,两者之差就是延时。单向时间就是延迟。

抖动:由于数据包的大小,网络路由的路径选择等众多因素,我们无法保证数据包的延迟时间是一致的,数据包和数据包延迟的差异我们称为抖动。也就是说因为数据包的延时值忽大忽小的现象我们称为是抖动。

可以看出延迟会造成抖动,但是抖动并不完全等价于延迟,所以有时我们分析实际问题时还是要加以区分。

大学经常看直播球赛,记得舍友用笔记本看,球都进了,我这边用手机过了一会才看到刚才球进的画面。这就是典型延时场景,其中各个行业对延时的容忍度不一样,像K歌合唱就对低延时要求非常高。如果歌伴都唱完了上半句,你由于没有及时听到,下半句还没唱出来,对方是非常疑惑的。

但是我们也不能一味的追求低延时,低延时是好,但是会带来成本的上升。在实时传输领域有一个著名的三角理论。

在这里插入图片描述
成本我们可以理解为购买服务器需要的硬件成本、软件开发的人力成本和通讯带宽的租赁费用;延时就是上面理解的数据包端到端之间的时间差,质量可以理解为视频的清晰度和细节,音频的高保真以及数据的完备性。任何行业完成实时数据交互,都要受这三方面的因素的限制。如果过分追求低延时,要么我们要付出比较高的成本要么我们得下降我们的音视频质量。所以我们针对不同行业,选择一个用户能接受和不影响体验的延时即可。

视频实时性的三个等级

伪实时:视频消费延迟超过3 秒,单向观看实时,通用架构是 CDN + RTMP + HLS,现在基本上所有的直播都是这类技术;
准实时: 视频消费延迟 1 ~ 3 秒,能进行双方互动但互动有障碍。有些直播网站通过 TCP/UDP + FLV 已经实现了这类技术,YY 直播属于这类技术;
真实时:视频消费延迟< 1秒,平均 500 毫秒。这类技术是真正的实时技术,人和人交谈没有明显延迟感。QQ、微信、Skype 和 WebRTC 等都已经实现了这类技术。对于严格的音频通话,当延时低于200ms时,就会影响到用户体验。达到400ms对方用户就容易感知出来,1s以上的延迟对于交互式实时直播就不能接受了。
下面有一个表格基本列举了不同业务对于低延时的大致要求,当然即使是同一个业务,应用在不同的场景下对于低延时要求也经常不一样,这就导致我们解决问题的技术手段也是不一样的。在视频监控业务下这种差异更大,对于一些司法、监狱和博物馆,实时性要求很高,希望出现问题后立即能进行报警和进行查看,但是对于一些景区直播和学校社区实时性的要求就低很多。

在这里插入图片描述

延迟产生

我们继续看下一个完整直播系统的示意图:

在这里插入图片描述

音视频从生产到消费的各个环节都需要花费时间来处理,这些时间之和就造成了视频观看方看的视频是视频产生方几秒之前产生的视频。我们对这些延时进行区分,会总结出以下四种类型的延时:

  1. 处理延时:一般就是路由器要分析数据包头决定这个数据包要送到下一站花费的时间;
    Processing delay – time it takes a router to process the packet header

  2. 排队延时:数据包从进入到路由器的发送队列到被发送之间经过的时间,路由排队算法和网络都会影响这部分延时。
    Queuing delay – time the packet spends in routing queues

  3. 传输延时:将数据包传入到线路花费的时间,跟数据包的大小和带宽有关系。
    Transmission delay – time it takes to push the packet’s bits onto the link

  4. 传播延时:是指数据包第一个bit位从发送端到接收端的时间,其和传输距离和传播速度有关系。
    Propagation delay – time for a signal to reach its destination

其实对于音视频系统,我们可以将上面讲述的三种延时归纳为下面几种:

设备端的延时:包括数据的采集、前处理、编码、解码、渲染等处理阶段花费的时间。也就是A1和A5花费的时间。

音频部分:

音频从采集后,会经过模数转换,将传统的模拟信号转换成数字信号就会产生延时,一般在10ms级别;采集后,进行编码,采用不同的音频编码器也会产生不同的延时,以Opus为例,延时也在2.5ms-60ms级别,可以参考上篇文章分析。发送前还需要进行3A算法(AEC、ANS、AGC)的处理,又需要十几ms.

视频部分:

从自然采光到成像,取决于CCD和CMOS的成像效率,不过一般也需要几十ms.对采集的RGB数据要进行YUV转换和编码,如果还有B帧会产生比较大的编码延时,紧接着播放端的渲染也是需要一定时间的。

无论音频还是视频,为了防止抖动我们一般会在播放端加上jitter buffer缓存,数据从进入到缓存到出缓存以及当发生丢包时,进行的一些传输算法处理也是需要一定的时间,大概会在几十毫秒到几百毫秒之间。

设备端和服务器的延时:也就是俗称的第一公里和最后一公里的延时,包括了A1到A2推流产生的延时和A5向A4拉流的延时。这里的延时跟设备端距离服务器的物理距离,服务器和设备端的网络运营商,设备的网速和带宽,设备端自己的负载都有密切关系。

服务器之间的延时:包含了音视频数据在网络上进行再次转码、切片、转封装和协议以及分发CDN等花费的时间,包含了A2到A4整个阶段花费的时间。这里要看设备的推流端和播放端是不是在同一个边缘节点,如果属于同一个边缘节点,那延时能小点。国内城市之间的传播延时也在几十毫秒,如果跨洲延时会达到百毫秒以上。

所以单就降低实时音视频系统延时一项内容,都不是靠只优化一个节点或者一个阶段就能达到你想要的预期效果,必须站在音视频整个系统来看待。

延迟测量

测试方法1:

实际最简单的做法就是:我们让推流端也就是主播端比如手机或者IPC摄像头对着一个在线秒表,然后同时我们用手机或者桌面播放器播放该路视频,然后得到了在线秒表显示的时间,等稳定一段时间后我们将在实际线秒表的时间减去播放器显示的该时间,二者的差值就是当前的系统的延时。然后这种测试方法,每隔一段时间,测试多组,求其平均值就得到了当前负载下的音视频延时。
在这里插入图片描述

测试方法2:

我们也可以在编码端的视频帧前面加上SEI帧,SEI的全称是补充增强信息(Supplemental Enhancement Infomation),提供了一种向视频码流中增加额外私有信息的方法。我们可以隔一段时间就在I帧前面的SPS PPS后面增加SEI帧,私有信息就是这时我们编码器的NTP标准时间,当该SEI帧信息到达播放器端,我们再计算下本地的NTP时间。这样本地的值减去SEI的NTP时间,就是当前系统的延时。前提条件,编码器和播放器进行过NTP校时,保证毫秒级别的时间信息要一致。
在这里插入图片描述

注:对于有些播放器如果增加SEI信息,可能会导致播放失败,所以解码前我们可以将使用过的SEI帧丢掉。

延迟优化

经过以上的分析,我们就分析出延时产生的阶段和节点,这样优化延时就有了方法。延时会产生在:

  1. 音视频数据的前处理;

  2. 音视频数据的编解码;

  3. 音视频数据的网络传输;

  4. 为了防止抖动业务代码中的缓冲区,包括推流服务、转码服务、播放器的缓存等;

  5. 音视频的渲染播放;

当然上面会产生延时的地方对于最终的延时影响权重是不一样的,其中数据的前处理、编解码、渲染对于延时影响比较小,而网络传输和业务代码的缓存对于延时影响非常大。所以优化也要结合你的业务有重点进行。

优化思路1:调整推流端和播放端的缓冲区大小,对于25fps的视频流,如果我们缓存25帧的数据,就会在播放时产生1s的延时。所以我们要动态调整我们的缓冲区,对于推流上行区我们如果带宽不够就会产生网络阻塞,这时发送端的数据就会积累,最终延时不断累加,导致延时变大。我们此时就需要有一套机制来能够预测带宽,降低发送码率,减低当前发送数据量,减少网络阻塞,等网络好的时候再继续增大数据发送量,增大码率。

上面说的这些算法有很多,其中WebRTC方案就采用了GCC算法,还有一些类似BBR的算法来实现上述想法。

对于播放端的缓存,当网络不好产生的延时比较大时,我们需要通过丢帧和加速播放方式快速消耗掉播放缓冲区的数据,从而消除累计的延时。

在这里插入图片描述

优化思路2:优化网络传输,如果实时性要求很高的场景,你如果选用基于TCP承载的网络传输协议,无论你怎么优化,也很难降低延时。因为TCP会进行三次握手,而且它会对每一次发送的数据进行确认,还要对丢包进行重传,所以这些限制很不适合降低延时。我们要优化传输协议,我们可以将基于TCP的RTMP、HLS协议切换到基于UDP的RTP、QUIC协议上,或者自己开发基于UDP的私有协议栈,这样我们就可以对一些TCP延时大的功能进行裁剪和修改,对于一些不关重要的数据进行丢弃,优先保障重要数据的传输。其中国内B站、虎牙直播,在线k12教育等都进行了类似的处理;

优化思路3:选择优质的CDN加速服务,保障传输的线路带宽和线路资源,一般都会提供测速选线、动态监测、智能路由等功能。

优化思路4:如果感觉自己的编解码,前期处理等花费时间比较多,我们就需要选择合适的音视频编解码器,进行算法调优降低延时,比如我们在播放端能支持硬解的优先选择硬解否则才选择软解。

上面所说的任何一种实践方法用一两篇文章都讲述不完,特别对于一些GCC、BBR等网络传输算法,依然是高校和大厂最前沿最热门的研究领域,需要用心学习才能落地到工程项目上,这里只是简单的提出,有兴趣的需要进一步搜索学习和实践。后面本公众号也会进行逐渐介绍这些算法,敬请期待。

案例分享

案例1:

问题:
前一阵我们做了一个项目,就是将自家消费类摄像头的视频投屏到像Alexa的智能音箱上,当然音箱就是带屏幕那种,类似小度小度。实际测试发现,延时比较大,大概有七八秒钟的样子,但是对于Alexa这种智能音箱也就是播放器,我们能干预的很有限,毕竟推动亚马逊研发给你优化这些都是不太可能的,但是我们想把自家摄像头视频投屏到Alexa后,这样在他们商场上架我们产品可以加快我们的硬件海外出货速度,同时还可以增加我们视频云的套餐订阅量。

措施:
最后我们采取了优化转分发服务器缓存的做法,采取了服务端主动追帧和丢帧的策略使服务器端的缓存能够根据当前网络状态进行自动调节,让Alexa播放器的播放缓存总是处于基本饥饿状态,经过一番优化后,延时从七八秒降低到一二秒,达到了上架IPC摄像头的条件。

所以服务端和播放端的缓存优化是降低延时的一个比较重要手段。

案例2:

问题:
还有一个项目采用了自动切换网络传输协议的措施来降低延时,摄像头的视频一般要推送到云服务器上,然后才能进行大规模的转发和分发。这是因为摄像头毕竟是嵌入式设备,并发量非常有限,能同时推送的视频路数也就一两路,如何想无限制进行分发和允许多客户端同时观看,就需要先让摄像头的视频上云到服务端的流媒体,再进行大规模的分发和转发,这也是视频监控的基本玩法。但是我们摄像头以前只支持TCP长链接方式向服务器推流,这样当网络不好就会丢包重传,延时也逐渐积累增大。甚至网络非常不好时,延时会达到几十秒,用户体验很不好。

措施:
我们流媒体服务端会收集播放器的延时数据和丢包,然后当达到一定条件,我们通过信令服务器进行传输协议切换,重新让摄像头推流。将TCP推流改成UDP推流,我们在流媒体服务器端重新实现组包和增加丢帧策略,降低播放端延时,效果最后也得到了客户的满意。

https://zhuanlan.zhihu.com/p/82854047

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

forkjoin_应用ForkJoin –从最佳到快速

forkjoin到目前为止&#xff0c;JDK 7已很好地掌握在开发人员手中&#xff0c;并且大多数人都听说过ForkJoin&#xff0c;但是没有多少人有时间或机会去尝试它。 它引起了并且可能仍然引起一些混乱&#xff0c;与普通线程池有什么不同。 [1] 我在本文中的目标是通过一个代码示…

android usb触摸屏驱动 win10,Win10手机居然这样兼容安卓:直接运行apk!

摘要&#xff1a;“应用太少是硬伤&#xff01;”这是WP粉吐槽微软简洁而有力的一句话。最新的Win10Mobile预览版中首次引入了微软的安卓子系统&#xff0c;这也是微软推行的ProjectAstoria的一部分。那么Win10手机究竟要如何兼容安卓应用呢&#xff1f;微软最新一份招聘启事似…

GSM、UMTS、LTE

GSM 全球移动通信系统(Global System for Mobile Communications) &#xff0c;由欧洲电信标准组织ETSI制订的一个数字移动通信标准。它的空中接口采用时分多址技术。自90年代中期投入商用以来&#xff0c;被全球超过100个国家采用。GSM标准的无处不在使得在移动电话运营商之间…

Java应用程序中的验证

我经常看到的项目几乎没有任何有意识的数据验证策略。 他们的团队在截止日期&#xff0c;明确要求的巨大压力下工作&#xff0c;只是没有足够的时间以适当且一致的方式进行验证。 因此&#xff0c;数据验证代码随处可见&#xff1a;JavaScript片段&#xff0c;Java屏幕控制器&a…

android daemon 程序,(转)Android App Daemon

一直没空把App Daemon的原理整理一下&#xff0c;见不少人在问原理&#xff0c;我这里就把整个流程大概的说一下。关于进程守护&#xff0c;从接触Android没多久就一直想实现&#xff0c;网上给出的方案也是各种各样&#xff0c;有双服务方式&#xff0c;有利用系统定时器方式的…

什么是卫星的有效载荷?

直接执行特定卫星任务的仪器、设备或分系统就是卫星的有效载荷。 有效载荷是指航天器上装载的为直接实现航天器在轨运行要完成的特定任务的仪器、设备、人员、试验生物及试件等。 有效载荷的种类很多&#xff0c;即使是同一种类型的有效载荷&#xff0c;性能差别也很大。 返回型…

升级鸿蒙系统如何退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统-操作教程详解...

华为鸿蒙2.0系统升级了怎么退回EMUI11系统&#xff1f;很多用户升级了又不知道如何才能退回到原来的系统&#xff0c;下面就让老铁下载小编为大家带来&#xff0c;2.0系统升级退回EMUI11系统操作教程详解。这次开启华为鸿蒙2.0系统手机开发者beta版公测招募的机型有华为P40 、P…

OpenFlow和SDN的历史和原理介绍

OpenFlow相关的历史、新闻&#xff1a;http://blog.csdn.net/jincm13/article/details/7825754 起源与发展 【https://36kr.com/p/5035985】   OpenFlow起源于斯坦福大学的Clean Slate项目组 [1] 。CleanSlate项目的最终目的是要重新发明英特网&#xff0c;旨在改变设计已略…

可见性得以保障,并不意味着_战略模式并不意味着春天!

可见性得以保障,并不意味着是的&#xff0c;所以可以说您正在编写一个Spring MVC应用程序&#xff0c;然后您决定&#xff1a;“我想做一些单独的封装算法&#xff0c;这些算法可以互换来执行特定的行为”。 对此的经典回应是“您需要一个战略模式男孩&#xff01;”。 所以&a…

小米miuiVS华为鸿蒙,华为鸿蒙2.0 vs 小米MIUI 12.5

原标题&#xff1a;华为鸿蒙2.0 vs 小米MIUI 12.5不久前有媒体在视频中展示了鸿蒙2.0和苹果IOS14两个操作系统下App的启动速度&#xff0c;结果是鸿蒙2.0完胜IOS14。此后不久&#xff0c;该媒体发布了华为鸿蒙2.0和小米MIUI 12.5对比视频。同上次一样&#xff0c;这次依然是选择…

传播时延(propagation delay)与发送时延(transmission delay)

原文&#xff1a; http://wzw19191.blog.sohu.com/135110823.html 传播时延(propagation delay)这个概念&#xff0c;是指电磁信号或者光信号在传输介质中传输的时延&#xff0c;而在光纤或者铜线中&#xff0c;光信号和电磁信号的传播速度都在20万公里/秒以上&#xff0c;在传…

具有MicroProfile配置的可配置JAX-RS ExceptionMapper

当您使用JAX-RS创建REST服务时&#xff0c;通常要么不返回任何内容&#xff08;例如HTTP 201/2/4等&#xff09;&#xff0c;要么返回某些数据&#xff08;可能采用JSON格式&#xff08;因此HTTP 200&#xff09;&#xff0c;或者返回某些异常/错误&#xff08;例如HTTP 4xx或5…

video.js android,VideoJS + HTML5自动播放失败,适用于Android 2.3+和IOS 4+

我的VideoJS和HTML5项目针对更新的Web浏览器(较新版本的FireFox和Chrome)以及移动浏览器(Android2.3 和IOS4 )。VideoJS HTML5自动播放失败&#xff0c;适用于Android 2.3和IOS 4我希望所有视频在“准备就绪”之后自动播放。我尝试了几种方法(在下面的方法中提到过)&#xff0…

EPS(Evolved Packet System,演进的分组系统)

EPS&#xff08;Evolved Packet System&#xff0c;演进的分组系统&#xff09;是3GPP标准委员会在第4代移动通信中出现的概念。可以认为EPSUE&#xff08;User Equipment&#xff0c;用户设备&#xff09;LTE&#xff08;4G接入网部分&#xff09;EPC&#xff08;Evolved Pack…

lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑

一、背景介绍项目背景是在界面中弹出一个浮层动画&#xff0c;同时播放一个音效。二、当前实现实现思路比较简单&#xff1a;继承一个DialogFragment&#xff0c;在相关的生命周期方法onViewCreated中调用startLottieAnim进行动画播放&#xff0c;同时监听lottie动画播放的回调…

Ad-hoc

Ad-hoc这个词来源于拉丁语&#xff0c;在百度上解释为“for this purpose only”&#xff0c;在wiki上解释为“for this”&#xff0c;其中文在wiki上被解释成包含特设的、特定目的的&#xff08;地&#xff09;、即席的、临时的、将就的、专案的”这么多种含义。在wireless ne…

掌握Java 11的Constantdynamic

为了使JVM对动态语言更具吸引力&#xff0c;该平台的第七版已将invokedynamic引入了其指令集。 Java开发人员通常不会注意到此功能&#xff0c;因为它隐藏在Java字节码中。 简而言之&#xff0c;通过使用invokedynamic &#xff0c;可以将方法调用的绑定延迟到第一次调用之前。…

android5.0 v4a,【图】多图讲解V4A提高G5音效详细步骤(G5音效可以更棒的)

首先感谢论坛前辈&#xff0c;看着你们介绍的方法&#xff0c;我把G5应有的音效搞出来了&#xff0c;效果提升非常明显。(看清了&#xff0c;如果不是非常明显&#xff0c;我也不会费这么大劲在这儿做讲解)。特记录和总结过程如下&#xff1a;1. 安装一键ROOT。2. 安装虚拟按…

feeder link

feeder link&#xff1a; 从一个设在指定的固定点上的地球站到一个空间站&#xff0c;或从一个空间站到一个设在某固定点的地球站的无线电链路&#xff0c;用于除卫星固定业务以外的空间无线电通信业务的

2021年春季学期期末统一考试 中国法制史 试题

2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff09; 1.商朝法律制度的总称叫做( )。 A.禹刑 B.汤刑 C.汤诰 D.九刑 2.战国时期改“法”为“律”的人是( )。 A.韩非 B.赵鞅 C.商鞅 D.屈原 3.秦始皇和李斯等人取消了世卿世禄分封制&#xff0c;在全国…