网络直播中延迟产生的原因及解决方案

时间:2024-03-03 10:15:06

背景

        rtsp转rtmp推流器是我们公司的一款独家产品,主要用途是将普通视频监控的rtsp视频流转为rtmp流推送到各大直播平台,支持几乎市面上所有的IPC摄像头。在实际使用过程中,不同的客户对直播延迟的要求不一样。对延迟不敏感的客户,我们推荐hls,无需插件,兼容性好。对延迟敏感的用户,推荐使用flv,但是需要flash支持,手机端支持性较差。越来越多的客户即想要hls的便利性,又想要较低的延迟,本文记录了探索hls低延迟的一些尝试。

1. HLS的特性

HLS (HTTP Live Streaming)是Apple开发的流媒体标准,主要用于音视频的编码和传输,实现PC端和手机端的无插件播放。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。HLS最开始是苹果公司为ios开发的流媒体传输协议,为了取代当时的flash而开发。因为HLS无需插件,又是基于HTTP协议,对手机资源的消耗远小于flash,进而得到了大力发展,最新的H5已经原生支持HLS了。但是HLS协议的小切片方式会生成大量的文件,HLS推荐的切片时长为10s,必须下载到m3u(8)和至少3个ts切片文件时才会开始播放,这就导致了hls的延迟必然在30s以上。

2. 解决思路

想要解决HLS的延迟问题,得从hls的原理入手。HLS需要3个ts切片文件才能播放的机制无法修改,但是可以从ts切片文件的时长入手,通过修改ts切片文件的时长,将之改为1s一个ts切片,相关配置文件如下:

application hlsram {
            # enable live streaming
            live on;
            hls on;
                        hls_path /media/hlsram;
            hls_fragment 5s;
                        hls_cleanup on;
                        hls_nested on;
                        hls_playlist_length 25s;
        }

application out {
            # enable live streaming
            live on;
        }
    
application rec {
            # enable live streaming
            live on;
            hls on;
        hls_path /media/record;
        hls_fragment 30s;
        hls_continuous on;
        hls_nested on;
        hls_cleanup off;
        hls_fragment_naming system;
        hls_playlist_length 120s;
        }

3. 结论

通过实际测试,HLS延迟可以降低到3-4s左右,提升了HLS的直播体验,我们最新的直播摄像头和RTSP转RTMP推流器,都升级支持了这一特性,欢迎联系购买。