音视频实时通讯的应用场景已经随处可见,从“吃鸡”的语音对讲、直播连麦、直播答题组队开黑,再到银行视频开户等。对于开发者来讲,除了关注如何能快速实现不同应用场景重点额音视频通讯,另一个更需要关注的可能就是“低延时”。但是,到底实时音视频传输延时应该如何“低”,才能满足你的应用场景呢?

延时的产生与优化

在聊低延时之前,我们先要讲清延时是如何产生的。由于音视频的传输路径一样,我们可以通过一张图来说明延时的产生:

在音视频传输过程中,在不同阶段都会产生延时。总体可以分为三类:

T1:设备端上的延时 音视频数据在设备端上产生延时还可以细分。设备端上的延时主要与硬件性能、采用的编解码算法、音视频数据量相关,设备端上的延时可达到 30~200ms,甚至更高。如上表所示,音频与视频分别在采集端或播放端产生延时的过程基本相同,但产生延时的原因不同。 音频在设备端上的延时:

  • 音频采集延时:采集后的音频首先会经过声卡进行信号转换,声卡本身会产生延时,比如 M-Audio 声卡设备延迟 1ms,艾肯声卡设备延迟约为 37ms;

  • 编解码延时:随后音频进入前处理、编码的阶段,如果采用 OPUS 标准编码,最低算法延时大约需要 2.5~60ms;

  • 音频播放延时:这部分延时与播放端硬件性能相关。

  • 音频处理延时:前后处理,包括 AEC,ANS,AGC 等前后处理算法都会带来算法延时,通常这里的延时就是滤波器阶数。在 10ms 以内。

  • 端网络延时:这部分延时主要出现在解码之前的 jitter buffer 内,如果在抗丢包处理中,增加了重传算法和前向纠错算法,这里的延时一般在 20ms 到 200ms 左右。但是受到 jitter buffer 影响,可能会更高。

视频在设备端上的延时:

  • 采集延时:采集时会遇到成像延迟,主要由 CCD 相关硬件产生,市面上较好的 CCD 一秒可达 50 帧,成像延时约为 20ms,如果是一秒 20~25 帧的 CCD,会产生 40~50ms 的延时;

  • 编解码延时:以 H.264 为例,它包含 I、P、B 三种帧(下文会详细分析),如果是每秒 30 帧相连帧,且不包括 B 帧(由于 B 帧的解码依赖前后视频帧会增加延迟),采集的一帧数据可能直接进入编码器,没有 B 帧时,编码的帧延时可以忽略不计,但如果有 B 帧,会带来算法延时。

  • 视频渲染延时:一般情况下渲染延时非常小,但是它也会受到系统性能、音画同步的影响而增大。

  • 端网络延时:与音频一样,视频也会遇到端网络延时。

另外,在设备端,CPU、缓存通常会同时处理来自多个应用、外接设备的请求,如果某个问题设备的请求占用了 CPU,会导致音视频的处理请求出现延时。以音频为例,当出现该状况时,CPU 可能无法及时填充音频缓冲区,音频会出现卡顿。所以设备整体的性能,也会影响音视频采集、编解码与播放的延时。

T2:端与服务器间的延时 影响采集端与服务器、服务器与播放端的延时的有以下主几个因素:客户端同服务间的物理距离、客户端和服务器的网络运营商、终端网络的网速、负载和网络类型等。如果服务器就近部署在服务区域、服务器与客户端的网络运营商一致时,影响上下行网络延时的主要因素就是终端网络的负载和网络类型。

一般来说,无线网络环境下的传输延时波动较大,传输延时通常在 10~100ms 不定。而有线宽带网络下,同城的传输延时能较稳定的低至 5ms~10ms。但是在国内有很多中小运营商,以及一些交叉的网络环境、跨国传输,那么延时会更高。

T3:服务器间的延时 在此我们要要考虑两种情况,第一种,两端都连接着同一个边缘节点,那么作为最优路径,数据直接通过边缘节点进行转发至播放端;第二种,采集端与播放端并不在同一个边缘节点覆盖范围内,那么数据会经由“靠近”采集端的边缘节点传输至主干网络,然后再发送至“靠近”播放端的边缘节点,但这时服务器之间的传输、排队还会产生延时。仅以骨干网络来讲,数据传输从黑龙江到广州大约需要 30ms,从上海到洛杉矶大约需要 110ms~130ms。 在实际情况下,我们为了解决网络不佳、网络抖动,会在采集设备端、服务器、播放端增设缓冲策略。一旦触发缓冲策略就会产生延时。如果卡顿情况多,延时会慢慢积累。要解决卡顿、积累延时,就需要优化整个网络状况。

综上所述,由于音视频在采集与播放端上的延时取决于硬件性能、编解码内核的优化,不同设备,表现不同。所以通常市面上常见的“端到端延时”指的是 T2+T3。 延时低≠通话质量可靠 不论是教育、社交、金融,还是其它场景下,大家在开发产品时可能会认为“低延时”一定就是最好的选择。但有时,这种“追求极致”也是陷入误区的表现,低延时不一定意味着通讯质量可靠。由于音频与视频本质上的差异,我们需要分别来讲实时音频、视频的通讯质量与延时之间的关系。

文末名片免费领取音视频开发学习资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。

音频质量与延时

影响实时音频通讯质量的因素包括:音频采样率、码率、延时。音频信息其实就是一段以时间为横轴的正弦波,它是一段连续的信号(如上图)。 采样率:是每秒从连续信号中提取并组成离散信号的采样个数。采样率越高,音频听起来越接近真实声音。 码率:它描述了单位时间长度的媒体内容需要空间。码率越高,意味着每个采样的信息量就越大,对这个采样的描述就越精确,音质越好。 假设网络状态稳定不变,那么采样率越高、码率越高,音质就越好,但是相应单个采样信息量就越大,那么传输时间可能会相对更长。 对照我们之前的公式,如果想要达到低延时,那么可以提高网络传输效率,比如提高带宽、网络速度,这在实验室环境下可以轻易实现。但放到生活环境中,弱网、中小运营商等不可控的问题必定会影响网络传输效率,最后结果就是通讯质量没有保障。还有一种方法,就是降低码率,那么会损失音质。 视频质量与延时 影响实时视频质量的因素包括:码率、帧率、分辨率、延时。其中视频的码率与音频码率相似,是指单位时间传输的数据位数。码率越大,画面细节信息越丰富,视频文件体积越大。

帧:正如大家所知,视频由一帧帧图像组成,如上图所示为 H.264 标准下的视频帧。它以 I 帧、P 帧、B 帧组成的 GOP 分组来表示图像画面(如下图):I 帧是关键帧,带有图像全部信息;P 帧是预测编码帧,表示与当前与前一帧(I 或 P 帧)之间的差别;B 帧是双向预测编码帧,记录本帧与前后帧的差别。

帧率:它是指每秒钟刷新的图像帧数。它直接影响视频的流畅度,帧率越大,视频越流畅。由于人类眼睛与大脑处理图像信息非常快,当帧率高于 24fps 时,画面看起来是连贯的,但这只是一个起步值。在游戏场景下,帧率小于 30fps 就会让人感到画面不流畅,当提升到 60fps 时会带来更实时的交互感,但超过 75fps 后一般很难让人感到有什么区别了。

分辨率:是指单位英寸中所包含的像素点数,直接影响图像的清晰度。如果将一张 640 x 480 与 1024 x 768 的视频在同一设备上全屏播放,你会感到清晰度明显不同。 在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。

在实时视频通话情况下,会出现多种质量问题,比如:与编解码相关的画面糊、不清晰、画面跳跃等现象,因网络传输问题带来的延时、卡顿等。所以解决了低延时,只是解决了实时音频通讯的一小部分问题而已。 综上来看,如果在网络传输稳定的情况下,想获得越低的延时,就需要在流畅度、视频清晰度、音频质量等方面进行权衡。 不同场景下的延时 我们通过下表看到每个行业对实时音视频部分特性的大致需求。但是每个行业,不仅对低延时的要求不同,对延时、音质、画质,甚至功耗之间的平衡也有要求。在有些行业中,低延时并非永远排在首位。

游戏场景

在手游场景下,不同游戏类型对实时音视频的要求不同,比如狼人杀这样的桌游,语音沟通是否顺畅,对游戏体验影响很大,所以对延时要求较高。其它类型游戏具体如下方表格所示。

但满足低延时,并不意味着能满足手游开发的要求。因为手游开发本身存在很多痛点,比如功耗、安装包体积、安全性等。从技术层面讲,将实时音视频与手游结合时,手游开发关注的问题有两类:性能类与体验类。

在将实时音视频与手游结合时,除了延时,更注重包的大小、功耗等。安装包的大小直接影响用户是否安装,而功耗则直接影响游戏体验。 社交直播场景 目前的社交直播产品按照功能类型分有仅支持纯音频社交的,比如荔枝 FM;还有音视频社交的,比如陌陌。这两类场景对实时音视频的要求包括:

直播答题场景

在直播答题场景中,对实时音视频的要求主要有如下两点:

我们以前经常能看到主持人说完一道题,题目却还没发到手机上,最后只剩 3 秒的答题时间,甚至没看到题就已出局。该场景的痛点不是低延时,而是直播音视频与题目的同步,保证所有人公平,有钱分。 K 歌合唱场景 天天 K 歌、唱吧等 K 歌类应用中,都有合唱功能,主流形式是 A 用户上传完整录音,B 用户再进行合唱。实现实时合唱的主要需求有如下几点:

在这个场景中,两人的歌声与音乐三者之间的同步给低延时提出了很高的要求。同时,音质也是关键,如果为了延时而大幅降低音质,就偏离了 K 歌应用的初衷。 金融场景 对于核保、银行开户来讲,需要一对一音视频通话。由于金融业特殊性,该类应用对实时音视频的需求,按照重要性来排序如下:

在这个场景中,低延时不是关键。重要的是,要保证安全性、双录功能和系统平台的兼容。

在线教育

在线教育主要分为两类:非 K12 在线教育,比如技术开发类教学,该场景对实时音视频的要求主要有:

很多非 K12 教学发生在单向直播场景下,所以延时要求并不高。

另一类是 K12 在线教育,比如英语外教、部分兴趣教学,通常会有一对一或一对多的师生连麦功能,它对直播场景的要求包括:

在 K12 的在线教育中,师生的连麦在低延时方面有较高的要求。如果会涉及跨国的英语教学,或需要面向偏远地区学生,那还要考虑海外节点部署、中小运营商网络的支持等。 在线抓娃娃 在线抓娃娃是近期新兴热点,主要依靠实时音视频与线下娃娃机来实现。它对实时音视频的要求包括:

瓶颈与权衡

产品的开发追求极致,需要让延时低到极限。但理想丰满,现实骨感。我们曾在上文提到,延时是因多个阶段的数据处理、传输而产生的。那么就肯定有它触及天花板的时候。 我们大胆假设,要从北京机场传输一路音视频留到上海虹桥机场。我们突破一切物理环境、财力、人力限制,在两地之间搭设了一条笔直的光纤,且保证真空传输(实际上根本不可能)。

两地之间距离约为 1061 km。通过计算可知,传输需要约 3.5ms。数据在采集设备与播放设备端需要的采集、编解码处理与播放缓冲延时计为较高的值,30ms。那么端到端的延时大概需要 33.5ms。请注意,我们在这里还忽略了音视频文件本身、系统、光的衰减等因素带来的影响。 所以,所谓“超低延时”也会遇到瓶颈。在任何实验环境下都可以达到很低的延时,但是到实际环境中,要考虑边缘节点的部署、主干网络拥塞、弱网环境、设备性能、系统性能等问题,实际延时会更大。在一定的网络条件限制下,针对不同场景选择低延时方案或技术选型时,就需要围绕延时、卡顿、音频质量、视频清晰度等指标进行权衡与判断。

原文链接:https://juejin.cn/post/6844903601043669000

详解音视频直播中的低延时 1相关推荐

  1. 详解音视频直播中的低延时

    高泽华,声网 Agora 音频工匠,先后在中磊电子.士兰微电子.虹软科技主导音频项目.任职 YY 期间负责语音音频技术工作.在音乐.语音编解码方面有超过十年的研发经验. 音视频实时通讯的应用场景已经随 ...

  2. 详解音视频直播平台搭建中的低延时

    详解音视频直播平台搭建中的低延时 音视频实时通讯的应用场景已经随处可见,从"吃鸡"的语音对讲.直播连麦.直播答题组队开黑,再到银行视频开户等.对于开发者来讲,除了关注如何能快速实现 ...

  3. 实时音视频聊天中超低延迟架构的思考与技术实践

    1.前言 从直播在线上抓娃娃,不断变化的是玩法的创新,始终不变的是对超低延迟的苛求.实时架构是超低延迟的基石,如何在信源编码.信道编码和实时传输整个链条来构建实时架构?在实时架构的基础之上,如果通过优 ...

  4. FFmpeg入门详解--音视频原理及应用:梅会东:清华大学出版社

    大家好,我的第一本书正式出版了,可以在京东各大店铺抢购哦. <FFmpeg入门详解--音视频原理及应用:梅会东:清华大学出版社> 京东自营链接:https://item.jd.com/13 ...

  5. 音视频直播如何实现低延迟

    大家在日常生活中接触到各类直播,例如游戏直播.乐秀.在线教育.发布会等等.无论哪种类型的直播,延时是直播过程中需要关注的一个重要的点. 直播实现低延迟,是对大部分直播产品的要求,低延迟也是提升直播产品 ...

  6. 移动端实时音视频直播技术详解(一):开篇

    移动端实时音视频直播技术详解(一):开篇 1.引言 随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革.手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域 ...

  7. 实时音视频直播带货中影响用户体验的Bug根因

    VOL 131 05 2020-06 今天距2021年209天 这是ITester软件测试小栈第131次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上  ...

  8. 【音视频第6天】基础知识-移动端实时音视频直播技术详解和开源工程WebRTC的技术原理和使用浅析

    本文是系列文章中的第1篇,本系列文章的大纲如下: <移动端实时音视频直播技术详解(一):开篇> <移动端实时音视频直播技术详解(二):采集> <移动端实时音视频直播技术详 ...

  9. IOS视频编辑功能详解下篇-视频裁剪、视频拼接、音视频的处理

    转自:http://www.hudongdong.com/ios/550.html 前言 用代码在简单视频编辑中,主要就是加美颜.水印(贴图).视频截取.视频拼接.音视频的处理,在美颜中,使用GPUI ...

最新文章

  1. oracle 生成 json文件,oracle - PLSQL导入JSON并导出为JSON文件 - 堆栈内存溢出
  2. 玩转ECS第7讲 | ECS数据保护-数据备份新特性与最佳实践
  3. 阿里巴巴的AI算法程序媛是怎样的一种存在?
  4. 四川大学计算机软件技术基础,四川大学《计算机软件技术基础》复习题2及答案#.doc...
  5. 记:使用IScroll.js 开发picker日历组件遇到的问题及经验总结
  6. web工程本地跟tomcat部署导致根路径不一致问题
  7. web.xml文件中的web-app元素 部署
  8. java 广播模式_Java设计模式——观察者模式的灵活应用
  9. HPU--1392 分隔A+B
  10. [POJ1035]Spell checker
  11. Python人工智能入门(修订版)
  12. 【工业互联网】自适应的工业生态系统
  13. Exchange2010安装配置
  14. 555定时器与频率测量
  15. Java混元功法_陈式太极心意混元 入门功法---太极内功 1
  16. Hessian矩阵正定与函数凹凸性的关系
  17. Unity中物体抛物线的实现
  18. escape()和unescape()函数的使用方法
  19. ajax,HTTP原理 : 网络传输协议,网页从输入url到渲染的流程,函数防抖和节流
  20. linux获取时间戳+时间戳转换日期

热门文章

  1. C#中Newtonsoft.Json(Json.NET)的使用
  2. Iass Pass SasS三种云服务区别
  3. 分布式系统:概念与设计读书笔记
  4. Linux内核4.14版本——watchdog看门狗框架分析
  5. (转载)从IRQ到IRQL(APIC版)
  6. 【转载文章】批处理经典入门教程!(从不懂到高手)____附加我的学习笔记
  7. 数字图像处理第三版(冈萨雷斯)——第一章绪论
  8. Eclipse中离线安装ADT插件详细教程及下载链接
  9. 最详细的制作8*8*8的光立方
  10. ***常用工具下载大全