Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)
源码地址: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
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 模块,
重新启动不会出现该错误信息:
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--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-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts test.txt
S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts
S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8-.ts S0000_8.m3u8
加密后的文件列表:
#EXTM3U
#EXT-X-VERSION:
#EXT-X-MEDIA-SEQUENCE:
#EXT-X-TARGETDURATION:
#EXT-X-KEY:METHOD=AES-,URI="http://sewise.amai8.com/authcheck/accesskeyS0000_8-236.key",IV=0x000000000000000000000000000000EC
#EXTINF:5.013,
S0000_8-.ts
#EXTINF:5.014,
S0000_8-.ts
#EXTINF:5.013,
S0000_8-.ts
#EXTINF:5.013,
S0000_8-.ts
#EXTINF:5.014,
S0000_8-.ts
#EXTINF:5.013,
S0000_8-.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;
播放地址: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
timestamp
sequential
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 on | off
上下文:rtmp,服务器,应用程序
描述:启用HLS加密。 AES-128方法用于加密整个HLS片段。 默认关闭。
... 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 ;
ping 30s;
notify_method get; application live {
live on;
hls on;
hls_path /home/www/live;
hls_fragment ;
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
Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)的更多相关文章
- Nginx基础知识之————RTMP模块专题(实践文档)
on_publish 语法:on_publish url上下文:rtmp, server, application描述:这个可以设置为一个API接口(GET方式接受所有参数),会给这个API接口返回8 ...
- Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)
说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方nginx-rtmp-module和nginx-accesskey-2.0.3模块为例,nginx的 ...
- 【推荐】Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)
说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方nginx-rtmp-module和nginx-accesskey-2.0.3模块为例,nginx的 ...
- day63:Linux:nginx基础知识&nginx基础模块
目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...
- Nginx基础知识介绍
Nginx基础知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx概述 Nginx是免费的.开源的.高性能的HTTP和正向/反向代理服务器.邮件代理服务器.以及T ...
- Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构
分享两篇Win 10应用开发的XML文档结构:Win 10 开发中Adaptive磁贴模板的XML文档结构,Win10 应用开发中自适应Toast通知的XML文档结构. Win 10 开发中Adapt ...
- FORM实现中打开图片,链接,文档(参考自itpub上一篇帖子,整理而来)
FORM实现中打开图片,链接,文档 参考自itpub上一篇帖子,整理而来 1.添加PL程序库D2kwutil.pll 2.主要实现程序 /*过程参数说明: v_application --打开文件的应 ...
- Javascript中只能在 HTML 输出流中使用 document.write,在文档已加载后使用它(比如在函数中),会覆盖整个文档。
意思就是说,初次加载时如果没有加载document.write,那么再次加载的时候回覆盖掉原来的内容,只显示新加载的内容. <!DOCTYPE html> <html> < ...
- 利用POI操作不同版本号word文档中的图片以及创建word文档
我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...
随机推荐
- Java中的回调函数
本例拿apache commons dbutils举例 回调函数: 回调是指在执行时,具体的封装处理工用由第三方的类来实现. 回调一般由两部分组成 1:调用类 - QueryRunner.实例类 2: ...
- Xstream解析XML
<oschina> <catalog>1</catalog> <newsCount>0</newsCount> <pagesize&g ...
- oracle表分区、表分析及oracle数据泵文件导入导出开心版
1.先说oracle表分区是什么吧,这样吧我们来举个桃子,栗子太小,我们就不举了,我们来举个桃子. 你有500万份文件,你要把他存在磁盘上,好嘛,我们就一个文件夹,500万分文件在那儿杵着,我们想找到 ...
- [OSG]矩阵运算
我们都知道,OpenGL规定矩阵使用列主序存储,即glLoadMatrix等函数要求输入的数组是按列主序存储的矩阵.然而,一个很奇怪的事实是,OSG中矩阵存储是使用的标准C二维数组(行主序),并且也是 ...
- CURL命令详解
curl命令是一个强大的网络工具,它能通过http,ftp等方式下载.上传文件.其中curl远不止这些功能,大家可以通过阅读手册获取更多的信息,类似的工具还有wget. curl命令使用了libcur ...
- MySQL获取汉字的首字母
)) ) CHARSET utf8 BEGIN ); )),,), 0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7, 0x ...
- vueJs+webpack单页面应用--vue-router配置
vue-route版本要跟vue版本同步,我的vue用的2.0+的,vue-router 也用了最新版2.1+ npm安装vue-router: $ npm install vue-router -- ...
- HTTP 和FTP 状态信息总结(留着自己用)
HTTP 状态信息 HTTP 400 – 请求无效HTTP 401.1 – 未授权:登录失败HTTP 401.2 – 未授权:服务器配置问题导致登录失败HTTP 401.3 – ACL 禁止访问资源H ...
- bootstrop框架
bootstrop基本的基础了解有如上图.. 下载源码 从GitHub可以直接下载到Bootstrap最新版本的LESS和JavaScript源码. Clone or fork via GitHub ...
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror) in codeforces(codeforces730)
A.Toda 2 思路:可以有二分来得到最后的数值,然后每次排序去掉最大的两个,或者3个(奇数时). /************************************************ ...