直播行业大火,大家可以在日常生活中接触到各类直播,例如游戏直播、乐秀、在线教育、发布会等等。无论哪种类型的直播,延时是直播过程中需要关注的一个重要的点。直播实现低延迟,是对大部分直播产品的要求,低延迟也是提升直播产品用户体验有效的一个方法,特别是对于互动直播、在线教育这一类产品来说。今天简单跟大家介绍下如何直播如何实现低延迟。

直播延迟的由来

在了解如何降低延迟之前,就必须先了解下直播是延迟是如何而来的。

275fa41764c74041f5f633801a02c334.jpg

视频直播主要涉及到采集、预处理、编码、传输、服务器转码、解码这样的流程。而延迟可以理解为几个关键延迟成分的集合:处理延迟、传输延迟和传播延迟。处理延迟是指系统对数据包报头进行分析和确定数据包被发送到哪里去所要花费的时间。传输延迟是指将包中的数据位传入线路所需要的时间。根据数据包的大小和带宽的不同而有所变化。但并不取决于传输线路的距离,而传播延迟是指数据包的第一个比特位从发送端到达接收端的时间。通常也被称为距离的延迟,受数据传输距离和传播速度的影响。

直播协议选择

上述这些延迟无法避免,而直播协议的选择对直播迟延影响比较大。目前国内比较常见的三种直播协议 RTMP、HLS、HTTP-FLV,下面来简单介绍下。RTMP 是专为流媒体开发的协议,对底层的优化比其它协议更加优秀,同时它 Adobe Flash 支持好,基本上所有的编码器(摄像头之类)都支持 RTMP 输出。现在 PC 市场巨大,PC 主要是 Windows,Windows 的浏览器基本上都支持 Flash。另外 RTMP 适合长时间播放,曾经有过测试,连续 100 万秒,即 10 天多连续播放没有出现问题。RTMP 的延迟相对较低,一般延时在 1-3s 之间,一般的视频会议,互动式直播,完全是够用的。

当然 RTMP 并没有尽善尽美,它也有不足的地方。一方面是它是基于 TCP 传输,非公共端口,可能会被防火墙阻拦;另一方面,也是比较坑的一方面是 RTMP 为 Adobe 私有协议,很多设备无法播放,特别是在 iOS 端,需要使用第三方解码器才能播放。

HLS 是由苹果公司提出的基于 HTTP 的流媒体网络传输协议。是苹果公司 QuickTime X 和 iPhone 软件系统的一部分。主要应用于 iOS 设备,包含(iPhone, iPad, iPod touch) 以及 Mac OSX 提供音视频直播服务和录制内容(点播)等服务。它的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。性能高,可以通过 CDN 进行网络分发。

而 HLS 的劣势也非常明显,首先 HLS 实时性差,延迟高,HLS 的延迟基本在 10s+ 以上。另外由于 HLS 请求的并不是完整的数据流,导致它产生文件碎片多。ts 切片较小,会造成海量小文件,对存储和缓存都有一定的挑战。

FLV是一种在网络上传输的流媒体数据存储容器格式。而我们所说的 HTTP-FLV 即将流媒体数据封装成 FLV 格式,然后通过 HTTP 协议传输给客户端。HTTP-FLV 能够好的穿透防火墙,它是基于 HTTP/80 传输,有效避免被防火墙拦截。另外,它可以通过 HTTP 302 跳转灵活调度/负载均衡,支持使用 HTTPS 加密传输,也能够兼容支持 Android,iOS 的移动端。FLV 也有一个缺点,由于它的传输特性,会让流媒体资源缓存在本地客户端,在保密性方面不够好。

在不同的直播场景中,选用合适的直播协议,能大大降低直播的延迟。

细节优化,减少延迟

除了直播协议的选择能够减少延迟外,我们还可以通过一些细节优化,进一步减少直播延迟,让用户有更好的观看体验。

智能调度

国内的 DNS 相比较来说污染是很严重的,可能会把 DNS 解析到错误的节点上去,而 HTTP-DNS 可以进行精准调度;另外可以有效防止劫持绕过运营商的 Local DNS,避免域名劫持,访问更流畅;0ms 解析延迟,通过热点域名与解析,缓存 DNS 解析结果;稳定可靠,解析更加快。

码率选择

日常比较常见的直播码率有流畅、标清、高清,部分平台也提供了超清的播放码率。这涉及到直播转码的策略,提供多种码率让用户可以实际去选择。多种码率的适配对于客户端网络不稳定的情况可以降低延时,这能够让用户有更好的观看直播体验。

6eeb2019500ef35b1f49c7ed5d396292.jpg

首屏秒开

首屏秒开可以关注几个点:GoP Cache 以及 GoP Size 如何设置等。一般直播流中的图像帧分为:I 帧 、B 帧、P 帧,I 帧是不依赖其它帧进行独立解码的,也就是说当播放器接收到I帧就可以直接渲染,如果接收到 B 帧和 P 帧的时候可能就黑屏,在通过设置 GoP Cache 达到首屏加载体验;而对于 GoP Size 移动端直播一般 1-2s 比较合适,如果是点播依赖 CDN 效果可能会好一些,同样也需要配合自己的业务场景去判断 GoP Size 该如何设置;另外还有一点依靠 HTTP-DNS 选择节点加快连接。

目前又拍云提供超低延迟、高码率、高并发的整套从推流端到播放端的一站式直播解决方案哦~