如何降低直播延时?
一般情况下,RTMP推流+FLV播放的正常延迟在5s左右,若您的直播出现延迟时间过长的现象,可参考以下方式进行性能优化。
GOP设置
GOP:(Group of Pictures)画面组,一个GOP就是一组连续的画面,每个画面都是一帧,一个GOP就是大量帧的集合。直播的视频数据流,其实是一系列的视频帧率组件,包括I帧、P帧等。一个GOP就是以一个I帧,多个P帧开始。当用户第一次观看的时候,播放器需要找到I帧才能开始播放,而播放器会到服务器寻找到最近的I帧反馈给用户。因此,减少GOP帧的数量,能减少播放器加载GOP帧所用的时间。在直播推流端GOP一般建议设置为1~2s。
播流协议选择
RTMP:rtmp://播放域名/AppName/StreamName HTTP-FLV:http://播放域名/AppName/StreamName.flv M3U8:http://播放域名/AppName/StreamName.m3u8
- RTMP:其原理是将大块的视频帧和音频帧“剁碎”,然后以小数据包的形式进行传输,且支持加密,因此隐私性相对比较理想,但由于拆包组包的过程较复杂,所以在海量并发时也容易出现一些不可预期的稳定性问题。
- HLS:苹果推出的流媒体协议,将视频分成5-10秒的视频小分片,然后用m3u8索引表进行管理,由于客户端下载到的视频都是5-10秒的完整数据,故视频的流畅性很好。但一般播放器会在缓存3-4个分片后才启动播放,因此也引入了10-30s左右的延时。
- HTTP-FLV:由Adobe公司主推,格式极其简单,只是在大块的视频帧和音视频头部加入一些标记头信息,在延迟表现和大规模并发方面都很成熟。但需要注意的是HTTP-FLV在手机浏览器上的支持非常有限。
因此,在降低延时方面,选择HTTP-FLV作为播放协议能有效地降低时延。但HLS对浏览器兼容比较友好,且支持跨终端,所以HLS也是很多用户的首选。