为了账号安全,请及时绑定邮箱和手机立即绑定

为什么流媒体直播的延迟很高

标签:
Java

为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。

通信技术的发展促进了视频点播和直播业务的兴起,4G 和 5G 网络技术的进步也使得流媒体技术变得越来越重要,但是网络技术并不能解决流媒体直播的高延迟问题,本文不会介绍网络对直播业务的影响,而是会分析直播中常见的现象 — 主播和观众之间能够感觉到的明显网络延迟。除了业务上要求的延迟直播之外,有哪些因素会导致视频直播的延迟这么高呢?


图 1 - 流媒体直播

当观众通过弹幕与主播进行互动时,从我们看到弹幕到得到主播的响应可能要经过 5s 甚至更长的时间,虽然主播看到弹幕的时间与观众看到弹幕的时间不会有太大的差别,但是直播系统将主播的音视频数据传输到客户端或者浏览器需要较长的时间,这个从主播端到观众端传输数据的时间一般被称作端到端的音视频延迟。

流媒体直播从音视频的采集和编码到音视频的解码和播放涉及了非常长的链路,需要途径主播端、流媒体服务器以及观众端,这三方分别提供了不同的功能:

  • 主播端:音视频采集、音视频编码、推流;

  • 流媒体服务器:直播流收集、音视频转码、直播流分发;

  • 观众端:拉流、音视频解码、音视频播放;

在这个冗长的采集和分发流程中,不同过程中都会通过一些技术保证直播的质量,这些为了保证可靠性、降低系统带宽而使用的手段共同造成了直播高延迟的问题。本文会从以下三个方面分析为什么流媒体直播的端到端延迟很高:

  • 音视频使用的编码格式决定了客户端只能从特定帧开始解码;

  • 音视频传输使用的网络协议切片大小决定了客户端接收数据的间隔;

  • 服务器和客户端为了保证用户体验和直播质量预留缓存;

数据编码

视频直播一定会使用音视频的编码技术,目前主流的音频和视频编码方式是高级音频编码(Advanced Audio Coding,AAC)1 和高级视频编码(Advanced Video Coding,AVC)2,AVC 常被称作 H.264。这一节不讨论音频数据的编解码算法,我们来详细分析一下为什么需要 H.264 编码,它又如何影响直播延迟。假设我们需要看一部时长为 2 小时的 1080p、60FPS 的电影,如果每个像素需要 2 字节的存储,那么整部电影需要占用如下所示的资源:

3600∗2∗1920∗1080∗60∗2bytes=1668.54GB3600∗2∗1920∗1080∗60∗2bytes=1668.54GB


然而在实际情况下,每一部电影占用的磁盘空间只有几百 MB 或者几 GB,这与我们计算出来的结果相差好几个数量级,音视频编码就是起到用于压缩音视频数据,减少占用磁盘和网络带宽的关键技术。

H.264 是用于视频压缩的业界标准,因为视频是由一帧一帧的图片组成的,而不同的图片之间有较强的连续性,H.264 使用关键帧(Intra-coded picture,I 帧)作为视频的全量数据,不断使用向前参考帧(Predicted picture,P 帧)和双向参考帧(Bidirectional predicted picture,B 帧)对全量的数据进行增量式的修改以达到压缩的目的。


图 2 - H.264 压缩视频数据

H.264 会使用 I 帧、P 帧和 B 帧将视频数据压缩成如上图所示的图片序列,这三种不同的视频帧分别起到不同的作用3

视频帧作用
I 帧类似 JPG 或者 BMP 格式的完整的图片
P 帧可以使用前一个视频帧的数据压缩数据
B 帧可以使用前一个和后一个视频帧压缩数据

压缩后的视频数据是一系列连续的视频帧,客户端在解码视频数据时会先找到视频数据的第一个关键帧,然后增量对关键帧进行修改。如果客户端接收到的第一个视频帧就是关键帧,那么客户端就可以直接播放视频,但是如果客户端错过了关键帧,那么就需要等待下一个关键帧才可以播放视频。


图 3 - 视频编码 GOP

图像组(Group of pictures,GOP)指定了视频帧的组织方式,编码的视频流就由连续的 GOP 组成,因为每个 GOP 都会以关键帧开头,所以 GOP 的大小会影响播放端的延迟。视频占用的网络带宽也与 GOP 息息相关,在通常情况下,移动端直播的 GOP 都会被设置成 1 ~ 4 秒,当然我们也可以使用更长的 GOP 降低占用的带宽4

视频编码中的 GOP 决定了关键帧的间隔,也决定了客户端在找到第一个可以播放的关键帧的时间,进而影响流媒体直播的延迟,这种秒级别的延迟对于视频直播业务来说影响还是比较明显的,GOP 的设置是对视频质量、带宽和延迟权衡的结果。

作者公众号:一起写程序

原文链接:https://draveness.me/whys-the-design-live-streaming-latency/



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
33
获赞与收藏
206

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消