首页 > 系统相关 >【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解

【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解

时间:2023-04-05 20:38:33浏览次数:51  
标签:S0000 HLS hls ts Module Nginx rtmp key


源码地址:https://github.com/Tinywan/PHP_Experience

一、在Nginx配置文件的RTMP模块中配置hls



hls_key_path /tmp/hlskeys;



提示错误信息:



nginx: [emerg] the same path name "/data/hlskeys" used in /usr/local/nginx/conf/nginx.conf:178 and in /usr/local/nginx/conf/nginx.conf:178



解决办法:

查看官方RTMP源代码:nginx-rtmp-module / hls /ngx_rtmp_hls_module.c

 

【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解_服务器



ngx_conf_merge_str_value(conf-> key_path,prev-> key_path,“”);



在hls / ngx_rtmp_hls_module.c中的第2346行和第2421行调用两次 应该删除线或者注释掉2346上的一个【我这里时暂时注释掉了】,以阻止nginx抛出配置错误nginx:[emerg]在以下语言中使用相同的路径.

修改后的配置文件:

【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解_播放列表_02

重新编译:nginx-rtmp-module 模块,

重新启动不会出现该错误信息:



root@iZ231gvwxe7Z:/usr/local/nginx/conf# service nginx restart
* Stopping Nginx Server... 
* Starting Nginx Server...



查看生成的文件即可,HLS密钥文件已经生成了,如下所示:



root@iZ231gvwxe7Z:/tmp# ls
Aegis-<Guid(5A2C30A2-A87D-490A-9281-6765EDAD7CBA)>  disk_io   hls      netio_stat               qtsingleapp-aegisG-46d2-lockfile
cpu_stat                                            dump.rdb  hlskeys  qtsingleapp-aegisG-46d2  vm.log
root@iZ231gvwxe7Z:/tmp# cd hlskeys/
root@iZ231gvwxe7Z:/tmp/hlskeys# ls
S0000_8-156.key  S0000_8-166.key  S0000_8-176.key



同时HLS存放的文件:

播放列表文件:



root@iZ231gvwxe7Z:/tmp/hls# ls
S0000_8-224.ts  S0000_8-227.ts  S0000_8-230.ts  S0000_8-233.ts  S0000_8-236.ts  S0000_8-239.ts  S0000_8-242.ts  test.txt
S0000_8-225.ts  S0000_8-228.ts  S0000_8-231.ts  S0000_8-234.ts  S0000_8-237.ts  S0000_8-240.ts  S0000_8-243.ts
S0000_8-226.ts  S0000_8-229.ts  S0000_8-232.ts  S0000_8-235.ts  S0000_8-238.ts  S0000_8-241.ts  S0000_8.m3u8



加密后的文件列表:



#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:239
#EXT-X-TARGETDURATION:5
#EXT-X-KEY:METHOD=AES-128,URI="http://sewise.amai8.com/authcheck/accesskeyS0000_8-236.key",IV=0x000000000000000000000000000000EC
#EXTINF:5.013,
S0000_8-239.ts
#EXTINF:5.014,
S0000_8-240.ts
#EXTINF:5.013,
S0000_8-241.ts
#EXTINF:5.013,
S0000_8-242.ts
#EXTINF:5.014,
S0000_8-243.ts
#EXTINF:5.013,
S0000_8-244.ts



 

但是为了降低HLS的延迟,您需要设置此设置hls_fragment和hls_playlist_length,如下所示:



application live {
    live on;
    hls on;
    hls_fragment 3;
    hls_playlist_length 60;
    hls_path /tmp/hls;
}



这样可以播放60秒的播放列表。
Peer5 HLS设置,这可能会延迟3-60秒,(也许更像9-15秒),你可以尝试玩这个设置,以适应。但是,由于碎片,HLS会有更高的延迟,但是在不稳定的网络上播放更流畅。

hls_path

语法:hls 路径路径
上下文:rtmp,服务器,应用程序
描述:设置HLS播放列表和片段目录。 如果目录不存在,它将被创建。

 

hls_fragment

语法:hls_fragment 片段时间
上下文:rtmp,服务器,应用程序
描述:设置HLS片段长度。 默认为5秒。

hls_playlist_length

语法:hls_playlist_length  时间
上下文:rtmp,服务器,应用程序
描述:设置HLS播放列表长度。 默认为30秒。

 hls_playlist_length 10m;

 

hls_sync

语法:hls_sync 时间
上下文:rtmp,服务器,应用程序

描述:设置HLS时间戳同步阈值。 默认值为2ms。 此功能可防止在从低分辨率RTMP(1KHz)到高分辨率MPEG-TS(90KHz)转换后出现裂纹噪声。

hls_sync 100ms;

 

hls_continuous

语法:hls_continuous on | off
上下文:rtmp,服务器,应用程序

描述:打开HLS连续模式。 在这种模式下,HLS序列号从上次停止的地方开始。 老片段被保存。 默认为关闭。

hls_continuous on;

 

hls_base_url

语法:hls_base_url url
上下文:rtmp,服务器,应用程序

描述:设置HLS播放列表项目的基本URL。 当为空时,这些项目没有前缀,并假定与父播放列表位于相同的位置,或者在使用hls_nested时降低一个级别。 此功能适用于主(变式)和从HLS播放列表。 它可以让您下载播放列表并在本地播放,因为它包含对子播放列表或片段的完整引用。 默认为空。

hls_base_url http://myserver.com/hls/;

 

hls_cleanup

语法:hls_cleanup on | off
上下文:rtmp,服务器,应用程序

描述:切换HLS清理。 默认情况下,该功能处于打开状态。 在这种模式下,nginx缓存管理器进程从HLS目录中删除旧的HLS片段和播放列表。

hls_cleanup off;

测试案例:每次推流完毕的时候Nginx会自动的清除上一次生成的.ts文件和m3u8视频目录文件

 

hls_nested

语法:hls_nested on|off
上下文:rtmp,server,application

切换HLS嵌套模式。在此模式下,hls_path为每个流创建一个子目录。播放列表和片段在该子目录中创建。默认为关闭。

hls_nested on;

设置为开启后的测试案例:例如我们当前推流的名称为123456,则会在hls指定目录下面新创建一个以流名称为名字的目录名称,同时在这里我设置了:hls_fragment_naming system;

【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解_nginx_03

播放地址:http://vwww.nginx.com/live/123456/index.m3u8 

 

hls_fragment_naming

语法:hls_fragment_naming sequential | timestamp | system
上下文:rtmp,服务器,应用程序

描述:设置片段命名模式。

顺序 - 使用递增的整数
timestamp - 使用流时间戳
系统 - 使用系统时间
默认是顺序的。

hls_fragment_naming system;

测试案例:hls播放地址:http://服务器IP/hls/123123/index.m3u8

system

【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解_服务器_04

timestamp  

【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解_服务器_05

 sequential 

【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解_服务器_06

 

hls_fragment_naming_granularity

语法:hls_fragment_naming_granularity number
上下文:rtmp,服务器,应用程序

描述:设置hls片段ID的粒度。 如果大于零,更改ids以划分所提供的值。 默认值为零。

#使用系统时间舍入到500ms作为片段名称
hls_fragment_naming system;
hls_fragment_naming_granularity 500;

 

hls_type

语法:hls_type live | event
上下文:rtmp,服务器,应用程序

描述:设置在X-PLAYLIST-TYPE播放列表指令中指定的HLS播放列表类型。 Live HLS流通常从当前活动位置播放,该活动位置是几个片段到播放列表的结尾。 事件HLS流始终从播放列表的开始播放。 在事件模式下,确保播放列表长度足以用于整个事件。 默认是live;

hls_type  event;



 



hls_keys

语法:hls_keys on | off
上下文:rtmp,服务器,应用程序
描述:启用HLS加密。 AES-128方法用于加密整个HLS片段。 默认关闭。



hls_keys on;



描述:下面是使用HLS加密的示例配置。 此配置要求nginx使用--with-http_ssl_module为https支持构建。



...

http {
    ...
    server {
        listen 443 ssl;
        server_name example.com;

        ssl_certificate /var/ssl/example.com.cert;
        ssl_certificate_key /var/ssl/example.com.key;

        location /keys {
            root /tmp;
        }
    }

    server {
        listen 80;
        server_name example.com;

        location /hls {
            root /tmp;
        }
    }
}

rtmp {
    server {
        listen 1935;

        application myapp {
            live on;

            hls on;
            hls_path /tmp/hls;

            hls_keys on;
            hls_key_path /tmp/keys;
            hls_key_url https://example.com/keys/;
            hls_fragments_per_key 10;
        }
    }
}



hls_key_path

语法:hls_key_path 路径
上下文:rtmp,服务器,应用程序

描述:设置保存自动生成的HLS密钥的目录。 密钥文件具有使用OpenSSL RAND_bytes()例程创建的.key扩展和伪随机16字节内容。 如果目录不存在,它将在运行时创建。 默认情况下,hls_path目录用于密钥文件。 但是记住,你通常应该限制对密钥文件的访问,这些文件与播放列表和片段分开存储时更容易。

hls_key_path / tmp / keys;

 

hls_key_url

语法:hls_key_url url
上下文:rtmp,服务器,应用程序

描述:设置HLS密钥文件条目的URL。 当为空时,那些项目没有前缀,并且假设键位于与播放列表相同的位置。 默认为空。

hls_key_url https://myserver.com/keys/;
具有上述设置的播放列表条目示例



#EXT-X-KEY:METHOD=AES-128,URI="https://myserver.com/keys/337.key",IV=0x00000000000000000000000000000151



 

hls_fragments_per_key

语法:hls_fragments_per_key 值
上下文:rtmp,服务器,应用程序

描述:设置用同一个密钥加密的HLS分片数。 零意味着在发布开始时仅创建一个密钥,并且使用此密钥对会话中的所有片段进行加密。 默认值为零。

hls_fragments_per_key 10;

 

一段兼容阿里云m3u8配置



rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;

        application live {
            live on;
            hls on;
            hls_path /home/www/live;
            hls_fragment 6;
            hls_playlist_length 36s;
            hls_sync 100ms;
            hls_fragment_naming system;
            hls_fragment_slicing aligned;
        }
    }
}



 反向代理的config 配置



location / {
            set $stream_id "";
            rewrite_by_lua_file  /opt/openresty/nginx/conf/lua/proxy_pass_livenode.lua;
            if ( $uri ~ \.m3u8 ) {
               expires 3s;
               access_by_lua_file /opt/openresty/nginx/conf/lua/hls_address_auth.lua;
            }
            proxy_pass          $stream_id;
        }



 

 

 

 

重点:在Ubuntu上安装Nginx来流式播放Live HLS视频:https://www.vultr.com/docs/setup-nginx-on-ubuntu-to-stream-live-hls-video









标签:S0000,HLS,hls,ts,Module,Nginx,rtmp,key
From: https://blog.51cto.com/tinywan/6171606

相关文章

  • 【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(一) RTMP 命令详解
    源码地址:https://github.com/Tinywan/PHP_Experience说明:rtmp的延迟主要取决于播放器设置,但流式传输软件,流的比特率和网络速度(以及响应时间“ping”)可能会对延迟产生影响,具有播放器的本地rtmp服务器使用“否”缓冲区(如0.1-0.2秒缓冲区等)可能会在0.8-1.2秒之间总是延迟,当事情正......
  • Nginx鉴权功能实现
    背景鉴权的功能是防止盗链,别人一直访问你的连接,把你的服务器打爆,当鉴权失败时(md5值计算错误、时间戳过期),nginx直接返回403。鉴权主要分为四种:时间戳鉴权远程鉴权Referer黑白名单IP黑白名单在使用上,一般推荐时间戳鉴权和远程鉴权,或者两者同时使用,剩下两项规避鉴权非常容易......
  • docker-compose 通过NGINX快速搭建负载均衡的Tomcat集群
                 docker-compose通过NGINX快速搭建负载均衡的Tomcat集群从标题也可以看出,需要三个软件,docker-compose,docker-ce(docker的运行环境),Tomcat的镜像。docker-compose和docker的安装就不用说了,都可以离线安装,安装方法见博客:(docker-compose安装方......
  • NGINX的stream模块以及实操问题
    NGINX的stream模块以及实操问题前言:nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。nginx作为一个优秀的web服务器软件,毫无疑问,功能是十分强大的,但学习这种软件,如果脱离了实际操作(应用场景落地),那么就是一种耍流氓的行为。(1)关于stream域的模块......
  • 46 openEuler搭建Nginx服务器-管理Nginx
    46openEuler搭建Nginx服务器-管理Nginx46.1概述通过systemctl工具,可以对nginx服务进行管理,包括启动、停止、重启服务,以及查看服务状态等。本节介绍nginx服务的管理操作。46.2前提条件为了能够使用nginx服务,请确保您的系统中已经安装nginx服务。若未安装,可参考安装进行安装......
  • Nginx容器安装vim命令
    dockerpullnginx:1.22.1dockerrun-itdnginx:1.22.1进入nginx容器apt-getupdateapt-getinstall-yvim ......
  • Nginx
    轻量级web服务器、反向代理服务器内存占用少、启动快、高并发过程:客户端访问-->(负载均衡/)Nginx-->tomcat/-->SOA反向代理:客户端访问-->转发-->代理到内网。反向代理"代理"的是服务器端Master-Worker模式启动Nginx-->80端口启动了Socket服务进行监听Master:读取......
  • 通过阿里云ECS服务器公网ip访问tomcat,nginx
    一、概述1、操作系统:centos72、安装nginx方法:https://www.cnblogs.com/boonya/p/7907999.html,亲测可用。3、tomcat版本:apache-tomcat-7.0.92二、操作步骤1、启动tomcat;2、进入阿里云控制台,选择安全组,配置安全组规则(添加80,8080端口规则);    3、按图示配置完成,点击......
  • How to Configure Nginx reverse proxy the domain
    未测试过,自己记录待用http{resolver8.8.8.8;upstreamexample{serverhttp://example.comresolve[use_last]...;keepalive1024;}第二种负载均衡upstreammytarget{serveraaa.tar.com:443max_fails=3fail_timeout=60s;serverbbb.tar.com:443backup;}server......
  • nginx 配置虚拟目录
     需求配置静态资源目录访问 location/npm{alias/usr/npm;indexindex.html;autoindexon;#开启目录访问access_logoff;expires30d;} 多级子目录下 [email protected]\dist\axios.min.js      注......