说明
HLS是目前浏览器无插件直播兼容度最高的协议,但是存在延迟大的问题。
http-flv普遍可以达到秒级甚至毫秒级延迟,HLS在Apple官方推荐的参数是10秒一个切片,一个m3u8列表包含3个ts切片,这就是为什么大部分HLS协议延迟30秒的原因。
nms 支持自定义切片时长和列表长度,默认配置未开启HLS,因为开启后会产生文件IO, 若有这方面需求请手动开启。
开启方式
打开config.ini
删除hls_path前的注释
1 2 3 4 5 6 7 8 |
[hls] ; hls_path 切片临时存放路径, 必须填入有效且可写入的路径. 若不设置,则不会生成hls切片 hls_path = hls ; hls_time 切片时间, 单位秒, 默认2; 经过这段时间后,将在下一个关键帧上剪切片段. 并不代表肯定会以这个设定值而切片,还要根据关键帧间隔而定. ; 低切片可有效降低hls延迟, 但也需要推流端使用固定的低关键帧间隔编码, 如果不固定关键帧间隔,会造成视频卡顿 hls_time = 2 ; hls_list 最大播放条目, 默认3 hls_list = 3 |
延迟说明
1 2 |
hls_time = 2 hls_list = 3 |
代表每2秒切片一个ts,m3u8列表中保持3个ts,这样算下来,延迟是6秒。
极限低延迟
1 2 |
hls_time = 1 hls_list = 2 |
代表每1秒切片一个ts,m3u8列表中保持2个ts,这样算下来,延迟是2秒。
这种低延迟的设置,有两个必要的前提:推流时,视频编码的关键帧间隔是1秒一个关键帧,网络延迟低于100毫秒且带宽足够。
可用做内网环境应用,需要自行评估是否能满足流畅度。
播放方式
nms v3版的HLS流同样遵循 /app/stream 资源定位规范,只需要添加.m3u8后缀。
如推流地址:
1 |
rtmp://server_ip/live/stream |
则hls地址为
1 |
http://server_ip:8000/live/stream.m3u8 |
会话型HLS
nginx-rtmp对HLS的实现模式,只是简单的在推流后只生成m3u8和ts文件,并提供http的静态文件服务。无法进行会话管理,无法统计hls播放量,无法获得播放和结束的事件。
nmsv3的HLS实现,采用了session会话管理,可以定位访问资源的用户id,ip,访问参数,可以使用内置鉴权规则,可以统计播放量,可以统计用户使用的流量,可以获得用户开始播放和结束播放的事件。
H265/HEVC 编码的 HLS流
nms支持H265/HEVC编码的视频输出HLS流,m3u8采用v7,视频采用fMP4切片。
注意,只有MacOS 10.13,iOS 11之后支持,所有chrome,firefox不支持。Windows下,ie11,edge12-18在硬件支持的情况下支持。部分手机内置浏览器支持(小米)。
具体分析请看:浏览器播放H265/HEVC视频的可行性分析
原创文章,转载请注明: 转载自贝壳博客
本文链接地址: NMS v3系列教程之 十、开启HLS功能