Nginx

ngx_http_hls_module

ngx_http_hls_module模块

  • 示例配置

ngx_http_hls_module模块为MP4和MOV媒体文件提供HTTP Live Streaming(HLS)服务器端支持。这些文件通常具有.mp4.m4v.m4a.mov,或.qt文件扩展名。该模块支持H.264视频编解码器,AAC和MP3音频编解码器。

对于每个媒体文件,支持两个URI:

  • 具有“ .m3u8”文件扩展名的播放列表URI 。该URI可以接受可选参数:

此模块可作为我们商业订阅的一部分。

示例配置

location / { hls; hls_fragment 5s; hls_buffers 10 10m; hls_mp4_buffer_size 1m; hls_mp4_max_buffer_size 5m; root /var/video/; }

使用此配置,“ /var/video/test.mp4”文件支持以下URI :

http://hls.example.com/test.mp4.m3u8?offset=1.000&start=1.000&end=2.200 http://hls.example.com/test.mp4.m3u8?len=8.000 http://hls.example.com/test.mp4.ts?start=1.000&end=2.200

指令

句法:HLS;
默认:
语境:位置

在周围的位置打开HLS流。

句法:hls_buffers数字大小;
默认:hls_buffers 8 2m;
语境:http,服务器,位置

设置用于读写数据帧的最大值numbersize缓冲区。

句法:hls_forward_args 开启 | 关闭;
默认:hls_forward_args关闭;
语境:http,服务器,位置

将播放列表请求中的参数添加到片段的URI中。这对于在请求片段时或在使用ngx_http_secure_link_module模块保护HLS流时执行客户端授权很有用。

例如,如果客户端请求的播放列表http://example.com/hls/test.mp4.m3u8?a=1&b=2,参数a=1b=2将被添加到的参数后片段的URI startend

#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:15 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.333, test.mp4.ts?start=0.000&end=9.333&a=1&b=2 #EXTINF:7.167, test.mp4.ts?start=9.333&end=16.500&a=1&b=2 #EXTINF:5.416, test.mp4.ts?start=16.500&end=21.916&a=1&b=2 #EXTINF:5.500, test.mp4.ts?start=21.916&end=27.416&a=1&b=2 #EXTINF:15.167, test.mp4.ts?start=27.416&end=42.583&a=1&b=2 #EXTINF:9.626, test.mp4.ts?start=42.583&end=52.209&a=1&b=2 #EXT-X-ENDLIST

如果HLS流受ngx_http_secure_link_module模块保护,则$uri不应在secure_link_md5表达式中使用,因为这会在请求片段时导致错误。应该使用基本URI来代替$uri(如本例中的$hls_uri):

http { ... map $uri $hls_uri { ~^(?<base_uri>.*).m3u8$ $base_uri; ~^(?<base_uri>.*).ts$ $base_uri; default $uri; } server { ... location /hls { hls; hls_forward_args on; alias /var/videos; secure_link $arg_md5,$arg_expires; secure_link_md5 "$secure_link_expires$hls_uri$remote_addr secret"; if ($secure_link = "") { return 403; } if ($secure_link = "0") { return 410; } } } }

句法:hls_fragment时间;
默认:hls_fragment 5s;
语境:http,服务器,位置

定义不带“ len”参数的播放列表URI的默认片段长度。

句法:hls_mp4_buffer_size大小;
默认:hls_mp4_buffer_size 512k;
语境:http,服务器,位置

设置size用于处理MP4和MOV文件的缓冲区的初始值。

句法:hls_mp4_max_buffer_size大小;
默认:hls_mp4_max_buffer_size 10m;
语境:http,服务器,位置

在元数据处理期间,可能需要更大的缓冲区。其大小不能超过指定的大小size,否则nginx将返回服务器错误500(内部服务器错误),并记录以下消息:

"/some/movie/file.mp4" mp4 moov atom is too large: 12583268, you may want to increase hls_mp4_max_buffer_size