hls
Syntax: hls on|off
Context: rtmp, server, application
- Desc
hls开关。
无默认值,需要显示配置
- For example
hls on; hls_path /tmp/hls; hls_fragment 15s;
- 需要在
http{}
中添加配置供客户端播放使用。
http { ... server { ... location /hls { types { application/vnd.apple.mpegurl m3u8; } root /tmp; add_header Cache-Control no-cache; # To avoid issues with cross-domain HTTP requests (e.g. during development) add_header Access-Control-Allow-Origin *; } } }
- 需要在
hls_path
Syntax: hls_path path
Context: rtmp, server, application
-
Desc
设置hls playlist(m3u8)和fragment(ts)的路径。如果路径不存在,服务器会自动创建该路径。
无默认值,需要显示配置
-
For example
hls_path /tmp/hls;
hls_fragment
Syntax: hls_fragment time
Context: rtmp, server, application
-
Desc
设置HLS切片(ts文件切片)长度。
默认值:5s
-
For example
hls_fragment 5s;
hls_playlist_length
Syntax: hls_playlist_length time
Context: rtmp, server, application
-
Desc
设置HLS playlist 长度,也就是m3u8文件记录的播放时长。
默认值:30s
-
For example
hls_playlist_length 10m;
hls_sync
Syntax: hls_sync time`
Context: rtmp, server, application
- Desc
在打包音频时,服务器会通过采样率计算音频时间戳,然后使用计算出来的时间戳进行打包。如果计算出来的时间戳和推送端推送过来的时间戳相差超过该值则使用推送来的时间戳打包。
默认值:2ms
- For example
hls_sync 100ms;
hls_continuous
Syntax: hls_continuous on|off
Context: rtmp, server, application
- Desc
如果hls_path目录下存在上次推流的残余文件,那么这次重新推流是否继续上次的残余文件更新m3u8,如果你非常在意推流端闪断后hls服务刷新带来的影响,请保持这个选项打开。
默认值:off
- For example
hls_continuous on;
hls_nested
Syntax: hls_nested on|off
Context: rtmp, server, application
- Desc
off时,服务器会将所有流生成的m3u8文件和ts文件放在hls_path指定的一级目录下。on时,服务器会在hls_path一级目录下生成一个以流名命名的目录,在流名命名的目录下生成m3u8文件和ts文件,而且m3u8文件会以index.m3u8命名。
默认值:off
- For example
hls_nested on;
hls_base_url
Syntax: hls_base_url url
Context: rtmp, server, application
- Desc
如果你希望让播放器下载ts文件的时候使用与m3u8不同的域名可以通过这个来修改,例如不配置此项m3u8中ts记录为 xxx.ts,加了此项配置hls_base_url http://pingos.me/path; m3u8文件中ts记录则会变为 http://pingos.me/path/xxx.ts。
默认为空
- For example
hls_base_url http://myserver.com/hls/;
hls_cleanup
Syntax: hls_cleanup on|off
Context: rtmp, server, application
- Desc
这个参数用来控制是否实时删除过期的ts文。
默认值:off
- For example
hls_cleanup off;
hls_fragment_naming
Syntax: hls_fragment_naming sequential|timestamp|system
Context: rtmp, server, application
- Desc
此选项用来设置ts文件的命名规则。
- sequential:使用单调递增的序列号命名。
- timestamp:使用码流里的时间戳命名。
- system:使用系统时间戳命名。
默认值:sequential
- For example
hls_fragment_naming system;
hls_fragment_slicing
Syntax: hls_fragment_slicing plain|aligned
Context: rtmp, server, application
- Desc
设置切片模式。
- plain:当前正在生成的切片时长如果大于等于hls_max_fragment配置的时间则马上切片,否则要同时满足两个条件才会生成下一个切片,第一、ts文件时长大于等于hls_fragment配置的时间,第二、有新的关键帧产生。
- aligned:hls_max_fragment的影响,其余规则和plain配置下的切片规则一致。
默认值:plain
- For example
hls_fragment_slicing aligned;
hls_variant
Syntax: hls_variant suffix [param*]
Context: rtmp, server, application
- Desc
此选项用来实现多码率的hls流,例如低码率的流名叫 xxx_low 并且码率是320000bps,高码率的叫 xxx_high 码率为9600000bps,则需要配置两条配置 hls_variant _low BANDWIDTH=320000; 和 hls_variant _high BANDWIDTH=960000; 那么在请求hls流的时候只需要请求http://ip/location/xxx.m3u8即可让播放器实现自动切片码率的功能。
默认不开启,必须显示配置才能使用
- For example
向挂载点
src
推流,ffmpeg会自动转码为三种不同清晰度的直播流,然后向挂载点hls
转推。 ```nginx rtmp { server { listen 1935;application src { live on; exec ffmpeg -i rtmp://localhost/src/$name -c:a aac -b:a 32k -c:v libx264 -b:v 128K -f flv rtmp://localhost/hls/$name_low -c:a aac -b:a 64k -c:v libx264 -b:v 256k -f flv rtmp://localhost/hls/$name_mid -c:a aac -b:a 128k -c:v libx264 -b:v 512K -f flv rtmp://localhost/hls/$name_hi; } application hls { live on; hls on; hls_path /tmp/hls; hls_nested on; hls_variant _low BANDWIDTH=160000; hls_variant _mid BANDWIDTH=320000; hls_variant _hi BANDWIDTH=640000; } } } ```
hls_type
Syntax: hls_type live|event
Context: rtmp, server, application
- Desc
设置playlist(m3u8文件)中“X-PLAYLIST-TYPE”指定的HLS播放列表类型。
- live: HLS流通常是从当前的Live位置播放,播放列表结尾的几个片段。
- event: “event”模式下不会删除TS文件切片。
默认值:live
- For example
hls_type event;
hls_keys
Syntax: hls_keys on|off
Context: rtmp, server, application
- Desc
使HLS加密。使用AES-128方法加密整个HLS片段。
默认值:off
- For example
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加密的示例配置。
hls_key_path
Syntax: hls_key_path path
Context: rtmp, server, application
- Desc
设置保存自动生成的HLS密钥的目录。如果目录不存在,它将在运行时创建。 默认情况下,’ hls_path ‘目录用于密钥文件。 需要注意的是,建议您设置key文件的访问权限,并且和媒体文件分开存储。
默认值:hls_path目录
- For example
hls_key_path /tmp/keys;
hls_key_url
Syntax: hls_key_url url
Context: rtmp, server, application
- Desc
- 设置你的HLS key file的 url地址。
- m3u8文件中存在的记录如下:
#EXT-X-KEY:METHOD=AES-128,URI=”https://myserver.com/keys/337.key”,IV=0x00000000000000000000000000000151
默认值为空
- For example
hls_key_url https://myserver.com/keys/;
hls_fragments_per_key
Syntax: hls_fragments_per_key value
Context: rtmp, server, application
- Desc
设置使用相同密钥加密的HLS切片的数量。0表示在发布开始时只创建一个key file 会话中的所有片段都用这个密钥加密。
默认为零
- For example
hls_fragments_per_key 10;