源码地址: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

语法: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 ;
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模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解的更多相关文章

  1. 官方文档Core Technologies - Part 1

    首先介绍系列文章内容及Spring Framework官方文档情况. 在这一系列学习中,我阅读的主要资源是5.1.2 Reference Doc.,以及论坛大神的讲解blog.另外,Spring官方也 ...

  2. python附录-re.py模块源码(含re官方文档链接)

    re模块 python官方文档链接:https://docs.python.org/zh-cn/3/library/re.html re模块源码 r"""Support ...

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

    译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...

  4. python附录-builtins.py模块str类源码(含str官方文档链接)

    python附录-builtins.py模块str类源码 str官方文档链接:https://docs.python.org/3/library/stdtypes.html#text-sequence ...

  5. 第0001题 : 产生随机数(顺便读random模块官方文档)

    看这个之前我准备先看一下random模块的官方文档... 在整个随机模块中,  最基础的就是random, 它产生一个 [0.0, 1.0)的浮点数. 这个模块下所有的函数实际上是绑定在一个叫做ran ...

  6. python-schedule模块(定时任务)基于官方文档总结

    一.模块安装 pip3 install schedule 官方文档 二.常用的使用案例 #基本格式 #创建方法 def func(): print("方法") #创建定时 sche ...

  7. 【翻译】Django Channels 官方文档 -- Tutorial

    Django Channels 官方文档 https://channels.readthedocs.io/en/latest/index.html 前言: 最近课程设计需要用到 WebSocket,而 ...

  8. Spring 4 官方文档学习(十一)Web MVC 框架之配置Spring MVC

    内容列表: 启用MVC Java config 或 MVC XML namespace 修改已提供的配置 类型转换和格式化 校验 拦截器 内容协商 View Controllers View Reso ...

  9. CentOS7.3利用kubeadm安装kubernetes1.7.3完整版(官方文档填坑篇)

    安装前记: 近来容器对企业来说已经不是什么陌生的概念,Kubernetes作为Google开源的容器运行平台,受到了大家的热捧.搭建一套完整的kubernetes平台,也成为试用这套平台必须迈过的坎儿 ...

随机推荐

  1. React 模板

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  2. 好文章之——PHP系列(一)

    注:最近实习的公司是一家做电商企业,后台主要是php开发,好久不怎么接触php的我看了几篇相关文章,提高下对它的认识与理解,发现里面的学习思路还是非常好的,当然也会重新拾一下基础知识啦! 其实自己心中 ...

  3. python之tkinter使用-复选框操作

    # tkinter复选框操作 import tkinter as tk root = tk.Tk() root.title('问卷调查') root.geometry('220x80') # 设置窗口 ...

  4. 使用pygal_maps_world.i18n中数据画各大洲地图

    源码: # 使用pygal_maps_world.i18n中数据画各大洲地图 from pygal_maps_world.i18n import ASIA from pygal_maps_world ...

  5. codeforces3A

    Shortest path of the king CodeForces - 3A 棋盘上的国王被单独放置.尽管他是孤独的,但并未伤心,因为他有事关全局的重要性.例如,他必须正式访问方格 t .由于国 ...

  6. File操作

    对文件进行操作(只操作小文件) bool Exists(string path) 判断文件是否存在 FileStream Create(string path) 创建文件 void Move(stri ...

  7. 部署AWStats分析系统

    介绍 AWStats是使用Prel语言开发的一款开源日志分析系统,它不仅可以用来分析Apache网站服务器的访问日志,也可以用来分析Samba.Vsftpd.IIS等服务的日志信息. AWStats软 ...

  8. python 随机数模块 -- random

    一.概述 这个模块实现的伪随机数生成器. 对于整数,从区间选取.对于序列,随机元素. 在实线的,有功能来计算均匀分布,正态分布(高斯) ,对数正态分布,负指数,γ和β分布.对于生成的角度分布,冯·米塞 ...

  9. MT【30】椭圆的第二定义解题

    问题:上式表示的区域是怎样的? 解答:利用椭圆第二定义易知当取等号时为椭圆,又令$y$趋向于$+\infty$时不等号不成立,故可以判断为椭圆内部区域. 评:利用mathmatics软件容易得到

  10. SharePoint 2013 Newsfeed 没有出现的解决方法

    按照这个guide配置mysite: http://technet.microsoft.com/en-us/library/ee624362(v=office.15).aspx 但是newsfeed页 ...