怎么搭建hls低延时直播(lowlatency hls)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

转载请注明出处:https://blog.csdn.net/impingo
项目地址:https://github.com/im-pingo/nginx-rtmp-module

hls延时现状

hls延时太大是众所周知的情况,网上也有非常多的资料分析为何产生那么大的延时。然而降低延时的方案却非常少。

血脉纯正的lowlatency hls方案

2019年WWDC大会上苹果公司提出了lowlatency hls解决方案,声称要将延时降低到2s以内。但是据同行公开的测试结果表示目前苹果官方设备还没有完全支持这种方案。
由于这套方案是基于http2.0实现的,实现过程非常复杂,大规模推广需要得到CDN厂商和各个浏览器厂商的大力支持。
这是非常大的软件升级,真正落地不知是何年月,甚至最终在其真正推广开来之前是否会出现更优的解决方案都未可知。
所以就目前而言使用苹果提出的lowlatency hls方案实现低延时是不现实的。
这里有个lowlatency hls解决方案的说明和测试资料大家可以参考。

出身草根的HLS+

网上有人提出过hls+的解决方案,大概思路就是为每个播放端维护一个虚拟session。
第一 保证第一个切片以最近的I帧开始,第二 保证切片足够小(小于等于1s)。
实际测试下来延时大概能够缩小到4s左右。例如这篇文章提到的解决方案

这种解决方案虽然看起来是比较野路子一些,但是确实目前实现成本最低(基于http 1.0 或者 1.1 没有对m3u8做任何改动)并且可维护性更高的一种方案。它的优点正如这篇文章提到的:
(1)大幅降低传统HLS协议的延时;

(2)HLS+与RTMP/FLV等协议共用同一个流媒体服务器集群,CDN网络可省一套设备组(众多机房和设备建设);

(3)HLS+与RTMP/FLV/HLS等使用同一个域名,用户配置简单,使用简单,域名CNAME简单;

(4)数据统一,系统给出的在线人数,带宽,计费,防盗链,鉴权认证等,全部统一实现,无需单独区分协议;

(5)合并回源,访问RTMP/FLV/HLS+只需回一路RTMP,并且是访问时才回源,大幅降低了客户源站带宽与回源压力;

(6)快速排错,HLS+使用观止云BMS可追溯日志,可以毫秒级抓取到每个客户端链接数据,实现快速排错;

(7)快速启动,通过GOP优化能做到无感官差异的快速启动;

(8)避免404,HLS是切片文件分发,会有一定概率的404,而HLS+为流式回源杜绝了此情况;

(9)避免每次回源取片的时间,HLS每个切片从源站到边缘都得回源,而HLS+使用长连接回源。

使用开源项目pingo搭建hls+服务

项目地址:https://github.com/im-pingo/nginx-rtmp-module

pingo项目是基于nginx-rtmp-module实现的支持hls hls+ http-ts http-flv rtmp多种直播协议的流媒体服务器,并且当前已经有数家公司在使用。其他协议的配置可以参考我之前的文章分布式直播系统(二)【搭建单点rtmp\http-flv\hls流媒体服务器】,里面详细介绍了各个协议的配置方法并且有详细的配置模板。
这里只提供hls+的配置模板。

user  root;
daemon on;
master_process on;
worker_processes  1;
#worker_rlimit 4g;
#working_directory /usr/local/openresty/nginx/logs;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

worker_rlimit_nofile 102400;
worker_rlimit_core   2G;
working_directory    /tmp;

#pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
    multi_listen unix:/tmp/http 80;
}

stream_zone buckets=1024 streams=4096;

rtmp {
    log_format log_json '{$remote_addr, [$time_local]}';
    access_log logs/rtmp.log trunc=2s;
    server {
        listen 1935;
        serverid 000;
        out_queue 2048;
   
        application live {
            rtmp_auto_pull on;
            rtmp_auto_pull_port unix:/tmp/rtmp;
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 1300ms;
            hls_max_fragment 1800ms;
            hls_playlist_length 3900ms;

            hls2memory on;
            mpegts_cache_time 20s;

            hls2_fragment 1000ms;
            hls2_max_fragment 1300ms;
            hls2_playlist_length 3000ms;

            wait_key on;
            wait_video on;
            cache_time 3s;
            low_latency off;
            fix_timestamp 0s;
# h265 codecid, default 12
            hevc_codecid  12;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_X-Forwarded-For" "$http_X-Real-IP" "$host"';


    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #reset_server_name www.test1.com www.test2.com;
    #gzip  on;
    server {
         listen 80;
        location /rtmp_stat {
            rtmp_stat all;
            rtmp_stat_stylesheet /stat.xsl;
        }

        location /xstat {
            rtmp_stat all;
        }

        location /sys_stat {
            sys_stat;
        }

         location /live {
            flv_live 1935;
         }
         location /hls {
            # Serve HLS fragments
             types {
                 application/vnd.apple.mpegurl m3u8;
                 video/mp2t ts;
             }
             root /tmp;
             expires -1;
             add_header Cache-Control no-cache;
         }

        location /hls2 {
             hls2_live 1935 app=live;
             add_header 'Access-Control-Allow-Origin' '*';
         }
         location / {
             chunked_transfer_encoding on;
             root html/;
         }
    }
}

使用上面的配置模板测试推流:
rtmp推流地址:rtmp:// i p / l i v e / {ip}/live/ ip/live/{stream}
hls+ (http短连接)播放地址:http:// i p / h l s 2 / {ip}/hls2/ ip/hls2/{stream}
http-flv播放地址:http:// i p / l i v e / {ip}/live/ ip/live/{stream}
rtmp播放地址:rtmp:// i p / l i v e / {ip}/live/ ip/live/{stream}

hls+ 测试效果

以上面的配置模板为例,推流端设置为2s gop大小,最终测试延时大概在4s~5s。
hls+与http-flv、rtmp和传统hls直播延时的对比情况如图:
在这里插入图片描述

QQ交流群:697773082

hls转流服务的nginx配置和一些脚本 使用Nginx配置HLS转流服务,并提供一些Ffmpeg的相关脚本,这些脚本可用于自动化管理转流服务利用Nginx搭建流媒体服务【centos/windows】_nginx流媒体服务器配置-CSDN博客。 阅读详情

相关推荐

LL HLS:低延迟 HTTP 实时流媒体详解

延迟是指视频从信号源(如摄像机)传输到观众屏幕所需的时间。在流媒体直播中,低延迟非常重要。为什么?因为它能让视频播放更快、更流畅。这就是低延迟 HLS 或 LL HLS 的用武之地。视频流中的延迟是指从捕捉视频到观众看到视频之间的时间差。这就好比从击打棒球到观众看到它发生之间的时间差。这种延迟会影响直播流的质量,尤其是需要实时互动的活动。低延迟对于实时流媒体非常重要。它可以让视频和观众之间的反应更快。

程序猿老樊的博客 1697

LowLatencyHLS低延迟直播协议详解

服务端提供多个不同码率的码流,客户端根据估计的码率来选择最合适的码流,实现自适应码率的流畅播放。支持多码流与自适应码率,支持广告无缝播放,支持CMAF协议的低延时直播,也支持CDN动态选择。在认识CMAF协议后,我们看下Low-Latency HLS的关键点:生成segment分片(chunk)、Playlist增量更新、使用预加载提示、切换码率过渡上报。为了消除不必要的RTT等待,服务端使用EXT-X-PRELOAD-HINT标签,来通知客户端预加载下一个segment。

m0_70960708的博客 344

流媒体之LL-HLS 低延时HLS协议

LL-HLS协议通过扩展了HLS协议,为实时直播场景提供了更丰富的功能,如延迟控制、播放列表增量更新、阻止播放列表重新加载等。同时客户端可以更灵活地控制播放列表的加载和播放,以适应各种场景和需求。LL-HLS直播中的延时可以控制在3s内, 但是即使这样, 还是不如RTMP, RTSP等协议的实时性。

技术控的笔记 3333

Nginx代理上传文件大小设置

一,安装nginx配置 进入nginx配置文件–>conf–>nginx.conf #user nobody; worker_processes 5; events { worker_connections 10240; } rtmp_auto_push on; rtmp_auto_push_reconnect 1s; rtmp_socket_dir /tmp; rtmp{ out_queue 4096; out_cork 8; max_streams 128; log_

weixin_44975322的博客 1150

探索LowLatencyHLS低延迟直播协议

HLS全称为HTTP Live Streaming,其中m3u8作为描述协议,指向一系列切片文件。支持多码流与自适应码率,支持广告无缝播放,支持CMAF协议的低延时直播,也支持CDN动态选择。

徐福记456 1867

application terminated怎么解决_怎么搭建hls低延时直播lowlatency hls

转载请注明出处:https://blog.csdn.net/impingo 项目地址:https://github.com/im-pingo/pingoshls延时现状hls延时太大是众所周知的情况,网上也有非常多的资料分析为何产生那么大的延时。然而降低延时的方案却非常少。血脉纯正的lowlatency hls方案2019年WWDC大会上苹果公司提出了lowlatency hls解决方案,声称要将...

weixin_39716877的博客 304

HLS直播低延迟配置

【代码】HLS直播低延迟配置

laker的博客 920

LHLS低延时 HLS)原理和实现

Low Latency HLS - LHLS HLS协议 什么是LHLS LHLS(Low Latency HLS),顾名思义,是一种以降低HLS协议时延为目标的方案,但它还没有被写入标准协议中。 HLS简介 HLS流分为两部分,m3u8文件和多媒体数据文件(.m4s或.ts)。以TS文件为例,m3u8文件描述了每个TS的时长和url。在点播或直播时,客户端首先下载m3u8文件,然后根据m3u...

weixin_39970103的博客 1万+

nginx rtmp hls配置,ffmpeg推流

nginx rtmp 服务搭建 nginx rtmp hls配置 # 配置rtmp # rtmp地址 rtmp://ip:1935/live/xxx rtmp { server { listen 1935; chunk_size 4000; application live { live on; hls on; hls_path /usr/local/hls;

weixin_42185136的博客 822

HLS网络直播技术

一、现状 全民直播时代,任何人在任何地方都可以拿起手中身设备进行现场直播直播给给一群人带来工作职位,给各大直播平台带来巨大收益,在巨大的市场面前要拥有高质量,低成本的直播技术才能在竞争中脱颖而出,成为直播界的大佬。视频直播的5个关键的流程:1.录制2.编码3.网络传输4.解码5.播放。其中的每一环节都会影响直播的质量和延迟时间等,下面我们会主要是讲一下在第三点优化延迟的方案。 现在直播技术一...

super_大楼的博客 5664

视频中间件:HLS直播延时3秒解决方案

HLS通过将音视频流切割成一个个小的TS切片及生成m3u8的播放列表文件,播放客户端通过HTTP协议下载播放列表文件,按照播放列表文件制定的顺序下载切片文件并播放,从而实现边下载边播放,类似于实时在线播放的效果,这种切片的方式有助于提高流媒体的适应性,使其能够在不同网络条件下实现更好的性能和用户体验。但用户对HLS直播流的应用又非常广泛,比如我们经常遇到项目上开发业务系统的用户需要在IOS系统下集成我们HLS视频流,对他们来说是集成简单又快捷,但HLS流超高延迟给用户特别差的体验。

超视网络 1207

利用Simple-RTMP-Server搭建RTMPHLS直播服务(上)

SRS(Simple-RTMP-Server)定位是运营级的互联网直播服务器集群,追求更好的概念完整性和最简单实现的代码,在Github上人气颇高。本文是由王学投稿的SRS搭建直播的学习笔记,由LiveVideoStack整理并首发。 文 / 王学 整理 / LiveVideoStack 文章共6个部分,涉及SRS采集 、编码、录制、传输、解码等整套解决方案。

LiveVideoStack 9791

Nginx RTMP 模块 nginx-rtmp-module 指令详解

译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解。 指令 Core rtmp 语法:rtmp { ... } 上下文:根 描述:保存所有 RTMP 配置的块。 server 语法:server { ... } 上下文:rtmp 描述:声明一个 RTMP 实例。 rtmp {   server {

Defonds 的专栏 11万+

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(十一)

第十一部分--延时优化 上次测试流媒体服务器的时候,Android系统chrome浏览器测试hls协议时延时35s。 虽然由于HLS的特性决定了,使用HLS协议来做视频直播延时很大,但是35s的延时还是不能让人接受,35s足够让人家抢劫完事了。 所以要对这个系统进行优化: 1、首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方。 HTTP Live Streaming

一点一滴积累! 4067

HLS直播降低延迟的方法

HLS低延时的方式

u010120950的专栏 1911

Low Latency HLS的实现优化

HTTP Live Streaming(HLS)是Apple公司主导提出并实现的基于HTTP的自适应码率流媒体通信协议(RFC8216)。 说实在的,作为监控领域的玩家,我一直很抗拒Apple HLS协议,但架不住苹果的行业影响力啊,还记得很多年你跟AT&T做项目的时候,对方指定要用Apple HLS协议,那个latency惨不忍睹,有一次去亚特兰大客户家里看问题,我们一起站在门口,把camera装好了,客户在那里数着latency的秒数,真的恨不得找个地缝钻下去,我们其他的方案可以做到2s内,但

leesphone的专栏 761

如何将HLS延时缩短至4秒,HLS+技术详解

转自: 在直播应用中,RTMPHLS 是两种较为成熟且广泛应用的流媒体协议,基本上可以覆盖所有客户端。RTMP 是互联网 TCP/IP 五层体系结构中应用层的协议,主要优势就是实时性高,基本可将直播延时控制在3秒以内,因此广泛应用于低延时直播HLS是由 Apple 公司实现的基于 HTTP 的流媒体传输协议,拥有性能高、完美支持 iOS等优势。相比于 RTMP 协议,HLS 无需在移动端安装 APP,同时兼容HTML5,因此在移动直播的传播和体验上都拥有巨大的优势。不过HLS 的实时性较差,业

chenxijie1985的专栏 1663

HLS协议直播延时优化之控制在10秒或以内

hls的延时主要由以下三个部分组成:(1)服务器端的编码器和流分割器生成TS文件的时间(2)客户端下载TS文件的时间,而通常要求下载完两个TS媒体文件(3)客户端解码并播放时间这三个方面里面,前两个方面我们是可以控制调节的,对于第三个方面只能取决于客户端的性能。1.由于服务器端生成TS流段需要时间,那么我们可以调节每段TS文件的大小,让其小些,那么服务器生成它的速度就加快,时间缩短。这样一来,客户...

一个神奇美妙的名字 1万+
上一篇: 分布式直播系统(六)【基于nginx-rtmp-module实现的最简洁高效http-flv服务】
下一篇: 分布式直播系统(七)【10分钟掌握高并发高可用直播集群架构】
im-pingo
博客等级 码龄7年 304粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值