NMS v3系列教程之 十、开启HLS功能

说明

HLS是目前浏览器无插件直播兼容度最高的协议,但是存在延迟大的问题。
http-flv普遍可以达到秒级甚至毫秒级延迟,HLS在Apple官方推荐的参数是10秒一个切片,一个m3u8列表包含3个ts切片,这就是为什么大部分HLS协议延迟30秒的原因。

nms 支持自定义切片时长和列表长度,默认配置未开启HLS,因为开启后会产生文件IO, 若有这方面需求请手动开启。

开启方式

打开config.ini
删除hls_path前的注释

[hls]
; hls_path 切片临时存放路径, 必须填入有效且可写入的路径. 若不设置,则不会生成hls切片
hls_path = hls
; hls_time 切片时间, 单位秒, 默认2; 经过这段时间后,将在下一个关键帧上剪切片段. 并不代表肯定会以这个设定值而切片,还要根据关键帧间隔而定.
; 低切片可有效降低hls延迟, 但也需要推流端使用固定的低关键帧间隔编码, 如果不固定关键帧间隔,会造成视频卡顿
hls_time = 2 
; hls_list 最大播放条目, 默认3
hls_list = 3

延迟说明

hls_time = 2 
hls_list = 3

代表每2秒切片一个ts,m3u8列表中保持3个ts,这样算下来,延迟是6秒。

极限低延迟

hls_time = 1
hls_list = 2

代表每1秒切片一个ts,m3u8列表中保持2个ts,这样算下来,延迟是2秒。
这种低延迟的设置,有两个必要的前提:推流时,视频编码的关键帧间隔是1秒一个关键帧,网络延迟低于100毫秒且带宽足够。
可用做内网环境应用,需要自行评估是否能满足流畅度。

播放方式

nms v3版的HLS流同样遵循 /app/stream 资源定位规范,只需要添加.m3u8后缀。
如推流地址:

rtmp://server_ip/live/stream

则hls地址为

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功能

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据