开局贴一张图,后面就全靠我自己胡乱编了,请先看疗效,来自真实应用场景的测试数据,延迟200~500ms
和码率4~8Mbps
的超清低延迟直播图:
低延迟一直是直播的话题点,一般认为HLS的延迟在3~5
秒,RTMP/HTTP-FLV的延迟在1~3
秒,如果要做更低延迟比如800ms
之内的延迟,只能WebRTC?
其实不对,传输层除了WeBRTC使用UDP协议,还有SRT也是UDP,可以做到抗抖动,无累计延迟。
由于WebRTC主要是会议场景,直播场景的画质要求,编码方式差异,其实SRT会比WebRTC更适合做低延迟直播。比如:
•客户端:在直播领域,支持SRT的客户端比较多,比如编码器有FFmpeg和OBS,播放器ffplay和VLC都能支持SRT,还有vmix和芯象客户端都支持SRT,而支持WebRTC的客户端就少很多了,可以选Chrome或者自己编译。•高码率:由于WebRTC主要是流畅交流,在超高码率下的支持不是很好,会优先选择保障延迟而不是质量,而广电和直播天然对于画质和码率的就是基本要求,会优先选择增加一定延迟保障质量。•云服务:SRS云服务器可以无门槛的构建SRT应用,只需要会复制粘贴,不用搞懂SRT那个沙雕URL格式。若需要大规模应用,各家视频云都已经支持了SRT协议接入,无缝从小规模变成大规模。
另外,若需要录制,由于SRT是广电直播使用的协议,编码和一般直播差别不大,OBS可以直接录制,或者转成RTMP后录制也很容易,转成其他的直播比如FLV或HLS也很成熟。而WebRTC的编码方式,对录制不太友好。
因此,SRT做超清低延迟直播,是非常成熟的方案。广电使用SRT相当的成熟了,实际互联网应用中,比如B站直播可以选择RTMP或者SRT推流。
但是,要做低延迟可不容易,一般用户连测量直播延迟都弄不明白,更不要说如何端到端搞定延迟,实际上只要一个小配置没弄对,延迟就上去了。
有痛点,这就是SRS云服务器要支持的场景。
SRS云服务器提供的不仅仅是一台开箱即用的SRS,而且是开箱即用的方案,只要按照步骤一点点操作,就可以完成这个场景的应用,如下图所示:
首先,你需要有一台SRS云服务器,请阅读原文直达,或者跟着下面视频的引导操作:
隆重推荐大家使用SRS云服务器,开箱即用的音视频方案,后续还会持续更新其他的、更加丰富好用的方案。
然后,请在应用场景中选择超清实时直播,跟着引导一步步操作就可以。
如果你需要详细了解SRT低延迟的技术细节,以下是关键点:
•要关注客户端的Ping和CPU,这两个容易忽略,但是会对延迟有影响。•服务器请用LightHouse SRS,已经调整好了,不会造成额外延迟。•RTT变大会影响延迟,基本上在60ms以下的RTT,能稳定在预期延迟。•RTT在100ms时延迟大概300ms,RTT在150ms时延迟大概增加到430ms左右。•丢包会影响质量,10%以上丢包会有花屏和丢帧,不影响延迟,音频影响较小。•目前最低延迟,是vmix或芯象推SRT,用ffplay播放,延迟200ms左右。•OBS推SRT,ffplay播放,延迟350ms左右。
特别说明:目前测试下来,SRT的延迟天花板在200ms,尽管vmix能设置成1ms延迟但不起作用,实际的延迟只会比这个更差不会更好,当然如果能保障好网络,200ms的延迟也是足够了。
超高清、超低延迟、SRT直播的推荐方案:
•推流:芯象(230ms),vmix(200ms),OBS(300ms)。•播放:ffplay(200ms),vmix(230ms),芯象(400ms)。
- | ffplay | vmix播放 | 芯象播放 |
---|---|---|---|
芯象[1]推流 | 230ms(荐) | - | 400ms |
vmix推流 | 200ms | 300ms | - |
OBS推流 | 300ms | - | - |
延迟涉及到每个环节,下面是每个环节的详细配置。目录如下:
•CPU[2] 客户端CPU会造成延迟。•Ping[3] 客户端网络RTT对延迟有影响。•Encoder[4] 编码器如何设置低延迟模式。•Server[5] 服务器如何配置低延迟•SRT[6] SRT服务器特别配置•Player[7] 播放器如何配置低延迟•Benchmark[8] 如何准确的测量延迟•Bitrate[9] 从0.5到6Mbps不同码率对延迟的影响•Network Jitter[10] 丢包和不同RTT下对延迟的影响•Report[11] 测试报告
更详细的描述,请参考Lagging[12]
[1]
芯象: http://www.sinsam.com/
[2]
CPU: https://github.com/ossrs/srs/issues/1147#lagging-cpu
[3]
Ping: https://github.com/ossrs/srs/issues/1147#lagging-ping
[4]
Encoder: https://github.com/ossrs/srs/issues/1147#lagging-encoder
[5]
Server: https://github.com/ossrs/srs/issues/1147#lagging-server
[6]
SRT: https://github.com/ossrs/srs/issues/1147#lagging-srt
[7]
Player: https://github.com/ossrs/srs/issues/1147#lagging-player
[8]
Benchmark: https://github.com/ossrs/srs/issues/1147#lagging-benchmark
[9]
Bitrate: https://github.com/ossrs/srs/issues/1147#lagging-bitrate
[10]
Network Jitter: https://github.com/ossrs/srs/issues/1147#lagging-jitter
[11]
Report: https://github.com/ossrs/srs/issues/1147#lagging-report
[12]
Lagging: https://github.com/ossrs/srs/issues/1147#lagging