前言
近些年直播行业可谓是越来越火,英雄联盟的赛事直播、罗老师的直播带货、电商平台的购物节这些动辄就是几千万的流量,都是大家可以在日常生活中接触到的。可是无论哪种类型的直播,延时是直播过程中需要重点关注的一个点。直播实现低延迟,是对大部分直播产品的要求,也是提升直播产品用户体验最有效的一个方法。特别是体育赛事、直播互动、在线答题等场景对低延迟要求更高。今天简单跟大家介绍下如何直播如何实现低延迟。
如何判断直播延迟
我们判断直播延迟最简单的方法就是在推流端推一个标准时间的时钟画面,用推流端推流画面的时间减去拉流端播放画面的时间,这样就可以粗略的计算出直播延迟的大小。
播放端
推流端
直播延迟问题分析
首先,我们一起了解下直播产品的架构,来看看哪些模块可能会产生延迟,这里以腾讯云为例说明。
通过架构图可以看出直播经过的流程:画面采集→数据编码→视频处理→数据解码→播放
可能产生延迟的过程有:
①数据传输过程中的网络延迟
②数据流的编码/解码耗时
③对直播流智能处理,如转码、水印、混流等产生的延迟
④直播推流、CDN缓存和播放器缓存带来的延迟
数据流的编码/解码延迟和智能处理耗时都是毫秒级的延迟,直播延迟主要还是来源于网络传输和业务缓存。
1、传输和访问延时
我们都知道数据在网络中传输,经过不同的地域不同的物理设备难免会造成延迟,如果在相同带宽环境下播放端距离推流端距离越近延迟就会越小,传输延迟不可避免。为优化访问延迟问题腾讯云在全球布置了1300 加速节点,通过海量加速节点,结合腾讯自研 GSLB 调度系统,使其用户可就近获取所需资源,避免网络拥堵、地域、运营商等因素带来的访问延迟问题,降低响应时间,提供流畅的用户体验。
2、直播缓存带的的延迟
为了保证直播的流畅度,推流端和拉流播放端都会缓存一些数据,当的网络质量不好时,直播流的数据推送拉取就会变慢产生阻塞,这时候数据就会积累到缓冲区导致延迟。
3、协议延时
目前常见的直播协议有三种:RTMP、 FLV 和 HLS。通常RTMP/FLV协议延迟在1~3秒,这两种协议延迟的主要因素是上面说的网络传输延迟和GOP的大小,三种协议的比较如下:
直播协议 | 优点 | 缺点 | 播放延迟 |
---|---|---|---|
FLV | 成熟度高、高并发无压力 | 需集成 SDK 才能播放 | 2s - 3s |
RTMP | 优质线路下理论延迟最低 | 高并发情况下表现不佳 | 1s - 3s |
HLS(m3u8) | 手机浏览器支持度高 | 延迟非常高 | 10s - 30s |
FLV延迟一般在2-10秒左右,主要受GOP大小和TCP弱网传输积压影响。RTMP延迟和FLV差不多,服务器性能、客户端的缓存区长度、GOP这些指标会影响延迟,基于TCP传传输不会丢包,但当网络差的时候,服务器会将包缓存起来,导致累积的延迟。HLS的延迟更大,一般是几秒到几十秒,导致的因素主要是GOP大小和TS大小。HLS的工作原理是把整个流分成一个个小的TS文件,根据文件索引下载TS文件进行播放,每个TS文件的大小限制了它的延迟,很多播放器要等3个TS才播放,而3个TS可能就有几十秒了,所以HLS在标准直播中延迟最高。三种标准直播协议都是基于TCP的,TCP协议的特性(建立连接的三次握手、ACK机制、丢包重传等)导致了其延迟明显要基于UDP的私有协议,尽管当前QUIC的引入对弱网带来的延迟有一定的改善,但QUIC没有流媒体特性,就注定它不是低延迟直播的最佳解决方案。
直播延迟排查思路
如果想从本质上解决直播延时问题,还是要换成基于 UDP 的私有协议来传输数据。
正常情况下,使用 RTMP 协议推流并通过 FLV 协议播放,延迟在2秒 - 3秒左右,如果太长一般是有问题的。如果发现直播延迟时间特别长,可以按照如下思路来排查。
检查播放协议
如果播放协议采用的是 HLS(m3u8)协议,并感觉延迟较大,这个是正常的。 HLS 协议是苹果主推的基于大颗粒的 TS 分片的流媒体协议,每个分片的时长通常在5秒以上,分片数量一般为3个 - 4个,所以总延迟在20秒 - 30秒左右。
如果必须要使用 HLS(m3u8)协议,只能通过适当减少分片个数或者缩短每个分片的时长来降低延迟,但需要综合考虑对卡顿指标可能造成的影响。
尽量在客户端打水印
腾讯云直播支持在云端打水印,但是打水印会引入额外的1秒 - 2秒的延迟,所以如果使用的是腾讯云移动直播 SDK,可以选择直接在主播端 App 打上水印,这样就不需要在云端来打,从而减少水印造成的延迟。
检查推流端设置
如果发现在播放端延迟比较大,注意把关键帧间隔设置为1秒或2秒,也可以换用腾讯云的推流Demo对比下,排查看是不是推流端的编码缓存导致的延迟。
接入快直播
如果以上建议都不能满足您对延迟的要求,可以考虑接入腾讯云快直播,快直播比标准直播延迟更低,可以提供毫秒级的极致直播观看体验。能够满足一些对延迟性能要求更高的特定场景需求,例如在线教育、体育赛事直播、在线答题等。
腾讯云快直播
腾讯云快直播采用 UDP 协议将传统直播中3-5秒延迟降低至1秒以内 ,同时兼顾秒开、卡顿率等核心指标,给用户带来超低延迟直播体验。只需要升级播放端就可以从标准直播接入快直播,Web/H5端调用浏览器WebRTC接入快直播,App接入需要集成SDK。兼容了标准直播包括推流、转码、录制、截图、鉴黄、播放等全功能,支持客户能够从现有的标准直播业务平滑迁移。采用标准协议,对接简单,在 Chrome 和 Safari 浏览器中无需任何插件即可进行播放。播放协议默认加密,更加安全可靠。
接入入口:https://cloud.tencent.com/product/leb
Web Demo :http://webrtc-demo.tcdnlive.com/httpDemo.html
Android SDK及 Demo : https://github.com/tencentyun/leb-android-sdk
iOS SDK及Demo :https://github.com/tencentyun/leb-ios-sdk/
1、快直播延迟测试
我们可以登陆腾讯云控制台,在云直播的直播工具箱里有地址生成器,先生成一个推流地址,然后用腾讯云的推流工具直接扫码推流。
继续生成一个播放地址,播放地址类型选择UDP
最后我们就可以拿到WebRTC的播放地址去进行拉流测试了,下图是延迟测试的结果,可以看到延迟只有120ms比起标准直播的延迟可是低了太多了,极限延迟可以做到43ms,这个极限方案主要是给云游戏提供的,通过硬件编码的边缘编码处理的方式得以实现。
小结
今天给大家介绍了如何判断直播延迟、延迟产生的原因、排查方法以及腾讯云快直播低延迟解决方案,相信在这个过程中大家已经对直播延迟有一定的理解,以后遇到直播延迟问题也知道从哪里入手。关注小编让我们一起来学习更多的音视频知识吧!