一、在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
ngx_conf_merge_str_value(conf-> key_path,prev-> key_path,“”);
在hls / ngx_rtmp_hls_module.c中的第2346行和第2421行调用两次 应该删除线或者注释掉2346上的一个【我这里时暂时注释掉了】,以阻止nginx抛出配置错误nginx:[emerg]在以下语言中使用相同的路径.
修改后的配置文件:
重新编译:nginx-rtmp-module 模块,
重新启动侧不会出现该错误信息:
[email protected]:/usr/local/nginx/conf# service nginx restart * Stopping Nginx Server... * Starting Nginx Server...
查看生成的文件即可,HLS密钥文件已经生成了,如下所示:
[email protected]:/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 [email protected]:/tmp# cd hlskeys/ [email protected]:/tmp/hlskeys# ls S0000_8-156.key S0000_8-166.key S0000_8-176.key
同时HLS存放的文件:
播放列表文件:
[email protected]:/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_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_nested
语法:hls_continuous on | off
上下文:rtmp,服务器,应用程序
描述:打开HLS连续模式。 在这种模式下,HLS序列号从上次停止的地方开始。 老片段被保存。 默认为关闭。...
hls_nested 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;
hls_fragment_naming
语法:hls_fragment_naming sequential | timestamp | system
上下文:rtmp,服务器,应用程序
描述:设置片段命名模式。
顺序 - 使用递增的整数
timestamp - 使用流时间戳
系统 - 使用系统时间
默认是顺序的。
hls_fragment_naming system;
hls_fragment_naming_granularity
语法:hls_fragment_naming_granularity number
上下文:rtmp,服务器,应用程序
描述:设置hls片段ID的粒度。 如果大于零,更改ids以划分所提供的值。 默认值为零。
#使用系统时间舍入到500ms作为片段名称
hls_fragment_naming 系统;
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;