Nginx 学习笔记(五)nginx-vod-module 模块
nginx-vod-module
一、编译
./configure \
--user=www \
--group=www \
--prefix=/usr/local/openresty \
--with-debug \
--with-luajit \
--with-file-aio \
--with-threads \
--with-cc-opt="-O3" \
--with-http_v2_module \
--with-http_realip_module \--with-http_gzip_static_module \
--with-http_ssl_module \
--with-openssl=/usr/local/ssl \
--with-openssl-opt="enable-tlsext" \
--without-http_redis2_module \
--with-http_iconv_module \
--with-http_stub_status_module \
--with-http_xslt_module \--add-dynamic-module=/home/www/build/nginx-vod-module
推荐设置:
--with-file-aio
- 启用异步I / O支持,强烈建议,仅与本地和映射模式相关--with-threads
(nginx 1.7.11+) - 使用线程池(也需要vod_open_file_thread_pool
在nginx.conf中)启用异步文件,仅与本地和映射模式相关--with-cc-opt="-O3"
- 启用额外的编译器优化(与nginx默认值相比,mp4解析时间和帧处理时间减少了大约8%-O
)
调试设置:
--with-debug
- 启用调试消息(也需要传入nginx.confdebug
中的error_log
指令)。--with-cc-opt="-O0"
- 禁用编译器优化(用gdb进行调试)
移植文件
cp -f /home/www/build/openresty-1.13.6.1/build/nginx-1.13./objs/ngx_http_vod_module.so /usr/local/openresty/nginx/modules/ngx_http_vod_module.so cp -f /home/www/build/openresty-1.13.6.1/build/nginx-1.13./objs/nginx /usr/local/openresty/nginx/sbin/nginx
重启服务
sudo service nginx restart
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.
》》今天发现了一个好办法,通过以上启动服务器是不报错的,直接启动不起来,不管什么错误都是提示以上错误信息,今天终于找到办法了,那就是运行Nignx二进制文件,会有错误日志输出哦
sudo ../../sbin/nginx
nginx: [emerg] unknown directive "vod_mode" in /usr/local/openresty/nginx/conf/vhost/nginx.vod.module.conf:3
遇到的错误:
nginx: [emerg] unknown directive "vod_moov_cache" in /usr/local/openresty/nginx/conf/vhost/nginx.vod.module.conf:
解决:https://github.com/kaltura/nginx-vod-module/issues/739
网址结构
一、基本的网址结构
URI 的基本结构是: http://<domain>/<location>/<fileuri>/<filename>
- domain - nginx-vod-module服务器的域
- location - 在nginx conf中指定的位置
- fileuri - 一个到mp4文件的URI:
- 本地模式 - 完整的文件路径是根据根/别名nginx.conf指令确定的
- 映射模式 - 完整的文件路径是根据从上游/本地文件接收到的JSON来确定的
- 远程模式 - mp4文件是从上游块中读取的
- 注意:在映射模式和远程模式下,上游请求的URL是
http://<upstream>/<location>/<fileuri>?<extraargs>
(extraargs由vod_upstream_extra_args
参数决定)
- 文件名 - 详细如下
- domain:vod.tinywan.com
- location:location /vod { }
- fileuri:/home/www/ffmpeg/
本地模式测试
server {
listen ; # vod caches
vod_metadata_cache metadata_cache 256m;
vod_response_cache response_cache 128m; # vod settings
vod_mode local;
vod_segment_duration ; # 2s
vod_align_segments_to_key_frames on; #file handle caching / aio
open_file_cache max= inactive=5m;
open_file_cache_valid 2m;
open_file_cache_min_uses ;
open_file_cache_errors on;
aio on; location /hls/ {
alias /home/www/ffmpeg/;
vod hls;
add_header Access-Control-Allow-Headers '*';
add_header Access-Control-Expose-Headers 'Server,range,Content-Length,Content-Range';
add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS';
add_header Access-Control-Allow-Origin '*';
expires 100d;
}
}
MP4文件路径
www@TinywanAliYun:~/ffmpeg$ pwd
/home/www/ffmpeg
www@TinywanAliYun:~/ffmpeg$ ls -lh nginx_vod_test.mp4
-rwxrwxrwx www www 340M Dec nginx_vod_test.mp4
注:MP4文件的权限是775
播放URL:http://127.0.0.1:8384/hls/nginx_vod_test.mp4/index.m3u8
二、多个网址结构
多个网址用于在单个网址上对多个网址进行编码。例如,可以使用多个URL来指定应包含在DASH MPD中的几个不同MP4文件的URL。
多个URL的结构是: http://<domain>/<location>/<prefix>,<middle1>,<middle2>,<middle3>,<postfix>.urlset/<filename>
上面的示例网址代表3个网址:
http://<domain>/<location>/<prefix><middle1><postfix>/<filename>
http://<domain>/<location>/<prefix><middle2><postfix>/<filename>
http://<domain>/<location>/<prefix><middle3><postfix>/<filename>
后缀.urlset
(可以使用vod_multi_uri_suffix更改
)表示该URL应被视为多个URL。例如,URL http://example.com/hls/videos/big_buck_bunny_,6,9,15,00k.mp4.urlset/master.m3u8
将返回一个包含以下内容的清单:
- http://example.com/hls/videos/big_buck_bunny_600k.mp4/index.m3u8
- http://example.com/hls/videos/big_buck_bunny_900k.mp4/index.m3u8
- http://example.com/hls/videos/big_buck_bunny_1500k.mp4/index.m3u8
三、网址路径参数
URL路径支持以下参数:
- clipFrom - 自视频开始以来的偏移量(以毫秒为单位),其中生成的流应该开始。例如,
.../clipFrom/10000/...
将生成一个流10秒开始的视频流。 - clipTo - 自视频开始以来的偏移量(以毫秒为单位),其中生成的流将结束。例如,
.../clipTo/60000/...
将生成一个截断到60秒的流。 - 轨道 - 可用于选择特定的音频/视频轨道。参数的结构是:
v<id1>-v<id2>-a<id1>-a<id2>...
例如,.../tracks/v1-a1/...
将选择第一个视频轨道和第一个音轨。默认是包含所有曲目。 - 移位 - 可用于将时间转换应用于一个或多个流。参数的结构是:
v<vshift>-a<ashift>-s<sshift>
例如,.../shift/v100/...
将100ms的正向移位应用到视频时间戳。
四、文件名结构
文件名的结构是: <basename>[<seqparams>][<fileparams>][<trackparams>][<langparams>].<extension>
- basename +扩展名 - 选项集是打包者特定的(下面的列表适用于默认设置):seqparams - 可用于通过id(在映射JSON中提供)来选择特定序列,例如master-sseq1.m3u8。fileparams - 可用于在使用多个URL时按索引选择特定序列。例如,manifest-f1.mpd将仅从第一个URL返回一个MPD。trackparams - 可用于选择特定的音频/视频轨道。例如,manifest-a1.f4m将返回仅包含每个序列的第一个音频流的F4M。默认是包含每个文件的第一个音频和第一个视频轨道。在文件名中选择的曲目与使用/ tracks / path参数选择的曲目进行AND运算。v0 / a0分别选择所有视频/音频轨道。a / v参数可以与f / s结合,例如f1-v1-f2-a1 = file1的video1 + file2的audio1,f1-f2-v1 = file1的video1 + file2的video1。
- dash - manifest.mpd
- hds - manifest.f4m
- hls主播放列表 - master.m3u8
- hls媒体播放列表 - index.m3u8
- mss - 清单
- thumb -
thumb-<offset>[<resizeparams>].jpg
(偏移量是以毫秒为单位的缩略图视频偏移量) - volume_map -
volume_map.csv
- langparams - 可用于根据语言(ISO639-3代码)过滤音轨/字幕。例如,master-leng.m3u8将只返回英文音轨。
- resizeparams - 可用于调整返回的缩略图图像。例如,thumb-1000-w150-h100.jpg在视频中捕获缩略图1秒,并将其大小调整为150x100。如果省略其中一个尺寸,则设置其值以使得生成的图像保持视频帧的纵横比。
五、映射响应格式
当配置为在映射模式下运行时,nginx-vod-module向配置的上游服务器发出HTTP请求,以便接收它应该生成的媒体流的布局。响应必须采用JSON格式。
本部分包含几个简单的示例,后面是对支持的对象和字段的引用。但首先,有几个定义:
Source Clip
- 从单个媒体文件中提取的一组音频和/或视频帧(音轨)Generator
- 可以生成音频/视频帧的组件。目前,唯一支持的发生器是无声发生器。Filter
- 可以应用于音频/视频帧的操作。支持以下过滤器:
- 速率(速度)变化 - 适用于音频和视频
- 音量变化
- 混合 - 可用于将多个音轨合并在一起,或将源A的音频与源B的视频合并
Clip
- 在一组源剪辑上应用零个或多个过滤器的结果Dynamic Clip
- 内容未知的剪辑,例如有针对性的广告内容Sequence
- 一组应该一个接一个播放的剪辑。Set
- 几个序列一起作为自适应集合播放,每个序列必须具有相同数量的剪辑。
六、简单的映射
下面的JSON将请求URI映射到单个MP4文件:
{
"sequences": [
{
"clips": [
{
"type": "source",
"path": "/path/to/video.mp4"
}
]
}
]
}
当使用多个URL时,这是唯一允许的JSON模式。换句话说,使用多个URL来组合更复杂的JSON是不可能的。
映射模式测试(使用json文件播放一个mp4文件)
JSON文件
www@TinywanAliYun:~/data/vod-json$ pwd
/home/www/data/vod-json
www@TinywanAliYun:~/data/vod-json$ cat tinywan.json
{
"sequences": [
{
"clips": [
{
"type": "source",
"path": "/home/www/ffmpeg-data/59f81ac0f1ec2.mp4"
}
]
}
]
}
虚拟主机
server {
listen ; # vod caches
vod_metadata_cache metadata_cache 256m;
vod_response_cache response_cache 128m; # vod settings
vod_mode mapped;
vod_segment_duration ; # 2s
vod_align_segments_to_key_frames on; #file handle caching / aio
open_file_cache max= inactive=5m;
open_file_cache_valid 2m;
open_file_cache_min_uses ;
open_file_cache_errors on;
aio on; # json file play hls
location /json_hls/ {
add_header Access-Control-Allow-Headers '*';
add_header Access-Control-Expose-Headers 'Server,range,Content-Length,Content-Range';
add_header Access-Control-Allow-Methods 'GET, HEAD, OPTIONS';
add_header Access-Control-Allow-Origin '*'; vod hls;
alias /home/www/data/vod-json/;
}
}
注:这里一定是映射模式
VLC播放测试:http://nginx-vod.tinywan.com:8384/json_hls/tinywan.json/index.m3u8
测试结果:
说明:当然了tinywan.json 文件我们是可以动态的修改,如:使用PHP去动态修改json文件中的MP4文件路径,可以更换播放源,一旦换掉,以前的将会断掉,重新播放新的源文件
可能出现的错误,请检查配置文件,是否为映射模式
// :: [error] #: * ngx_http_vod_identify_format: failed to identify the file format /home/www/data/vod-json/video.json while reading media header,
七、自适应集
作为使用多个URL的替代方案,可以通过JSON定义自适应集:
{
"sequences": [
{
"clips": [
{
"type": "source",
"path": "/path/to/bitrate1.mp4"
}
]
},
{
"clips": [
{
"type": "source",
"path": "/path/to/bitrate2.mp4"
}
]
}
]
}
上面的暂时不能够播放,待解决?????
提示错误:
// :: [error] #: * ngx_http_vod_validate_streams: one stream at most per media type is allowed video= audio= while getting mapping,
八、播放列表
下面的JSON会播放35秒的视频1和22秒的视频2:
tinywan_multiple_durations.json 文件
{
"durations": [ , ],
"sequences": [
{
"clips": [
{
"type": "source",
"path": "/home/www/ffmpeg-data/59fb2eba73a57.mp4"
},
{
"type": "source",
"path": "/home/www/ffmpeg-data/59f81ac0f1ec2.mp4"
}
]
}
]
}
VLC播放测试:http://nginx-vod.tinywan.com:8384/json_hls/tinywan_multiple_durations.json/index.m3u8
前35s播放:59fb2eba73a57.mp4
后22s播放:59f81ac0f1ec2.mp4
过滤器
下面的JSON将视频1播放到x1.5,并将结果的音频与视频2的音频混合,然后将其降低到50%音量:
{
"sequences": [
{
"clips": [
{
"type": "mixFilter",
"sources": [
{
"type": "rateFilter",
"rate": 1.5,
"source": {
"type": "source",
"path": "/path/to/video1.mp4"
}
},
{
"type": "gainFilter",
"gain": 0.5,
"source": {
"type": "source",
"path": "/path/to/video2.mp4",
"tracks": "a1"
}
}
]
}
]
}
]
}
连续直播
下面的JSON是一个连续的直播流(=所有视频具有完全相同的编码参数的直播流)的示例。在实践中,这个JSON必须由一些脚本生成,因为它依赖于时间。(有关示例实现,请参阅test / playlist.php)
{
"playlistType": "live",
"discontinuity": false,
"segmentBaseTime": ,
"firstClipTime": ,
"durations": [, ],
"sequences": [
{
"clips": [
{
"type": "source",
"path": "/path/to/video1.mp4"
},
{
"type": "source",
"path": "/path/to/video2.mp4"
}
]
}
]
}
非连续的直播
下面的JSON是非连续直播流(=视频具有不同编码参数的直播流)的示例。在实践中,这个JSON必须由某个脚本生成,因为它是时间依赖的(参见test / playlist.php)
{
"playlistType": "live",
"discontinuity": true,
"initialClipIndex": ,
"initialSegmentIndex": ,
"firstClipTime": ,
"durations": [, ],
"sequences": [
{
"clips": [
{
"type": "source",
"path": "/path/to/video1.mp4"
},
{
"type": "source",
"path": "/path/to/video2.mp4"
}
]
}
]
}
(1)编译没有启用异步I / O支持(裸奔ngx-vod-module),播放一个MP4文件
结论:打开的很慢,很卡,原因就是我服务带宽太小了(1M啊),视频卡顿原因,带宽太小了,今天升级带宽为5M,不会再出先卡顿现象
(2)OSS下载一个文件进行播放,缓存不够吗?
性能建议
6、通过更改以下参数可以减少此模块生成的流的复用开销:
- HDS - 设置
vod_hds_generate_moof_atom
为关闭 - HLS - 设置
vod_hls_mpegts_align_frames
为关闭和vod_hls_mpegts_interleave_frames
打开
测试结果:
#vod_hds_generate_moof_atom off;
#vod_hls_mpegts_align_frames off;
#vod_hls_mpegts_interleave_frames on;
视频每隔2帧就会一卡一卡的,不推荐。
HLS
HLS主播放列表文件的名称(默认为m3u8扩展名)。
vod_hls_index_file_name_prefix
语法:vod_hls_index_file_name_prefix name
默认:index
背景:http
,server
,location
描述:HLS媒体播放列表文件的名称(隐含M3u8扩展名)。
案例:vod_hls_index_file_name_prefix main;
默认url地址为:../video/1510808170003.mp4/index.m3u8
新播放url地址为:../video/1510808170003.mp4/main.m3u8
vod_hls_segment_file_name_prefix
语法:vod_hls_segment_file_name_prefix name
默认:seg
背景:http
,server
,location
描述:段文件名的前缀,实际的文件名是:seg-<index>-v<video-track-index>-a<audio-track-index>.ts
。
案例: vod_hls_segment_file_name_prefix tinywan;
配置指令 - 性能
vod_metadata_cache
- 语法:
vod_metadata_cache zone_name zone_size [expiration]
- 默认:
off
- 背景:
http
,server
,location
配置视频元数据缓存的大小和共享内存对象名称。对于MP4文件,这个缓存保存moov原子。
vod_mapping_cache
- 语法:
vod_mapping_cache zone_name zone_size [expiration]
- 默认:
off
- 背景:
http
,server
,location
为vod配置映射缓存的大小和共享内存对象名称(仅限映射模式)。
vod_live_mapping_cache
- 语法:
vod_live_mapping_cache zone_name zone_size [expiration]
- 默认:
off
- 背景:
http
,server
,location
配置实时映射缓存的大小和共享内存对象名称(仅限映射模式)。
vod_response_cache
- 语法:
vod_response_cache zone_name zone_size [expiration]
- 默认:
off
- 背景:
http
,server
,location
配置响应缓存的大小和共享内存对象名称。响应缓存包含清单和其他非视频内容(如DASH初始段,HLS加密密钥等)。视频片段不被缓存。
vod_live_response_cache
- 语法:
vod_live_response_cache zone_name zone_size [expiration]
- 默认:
off
- 背景:
http
,server
,location
配置响应缓存的大小和共享内存对象名称,以便更改实时响应。该缓存包含以下类型的响应:DASH MPD,HLS索引M3U8,HDS引导,MSS清单。
vod_initial_read_size
- 语法:
vod_initial_read_size size
- 默认:
4K
- 背景:
http
,server
,location
设置MP4文件的初始读取操作的大小。
vod_max_metadata_size
- 语法:
vod_max_metadata_size size
- 默认:
128MB
- 背景:
http
,server
,location
设置支持的最大视频元数据大小(对于MP4 - moov原子大小)
vod_max_frames_size
- 语法:
vod_max_frames_size size
- 默认:
16MB
- 背景:
http
,server
,location
设置单个段的帧的总大小限制
vod_cache_buffer_size
- 语法:
vod_cache_buffer_size size
- 默认:
256K
- 背景:
http
,server
,location
设置读取MP4帧时使用的缓存缓冲区的大小。
vod_open_file_thread_pool
- 语法:
vod_open_file_thread_pool pool_name
- 默认:
off
- 背景:
http
,server
,location
启用通过线程池打开的异步文件。线程池必须使用thread_pool指令定义,如果未指定池名称,则使用默认池。当使用--add-threads进行编译时,该指令仅在nginx 1.7.11或更新版本上受支持。注意:这个指令目前禁止nginx-vod-module使用nginx的open_file_cache
vod_output_buffer_pool
- 语法:
vod_output_buffer_pool size count
- 默认:
off
- 背景:
http
,server
,location
预先分配缓冲区以生成响应数据,从而节省每个请求的分配/释放缓冲区的需求。
vod_performance_counters
- 语法:
vod_performance_counters zone_name
- 默认:
off
- 背景:
http
,server
,location
配置性能计数器的共享内存对象名称
配置指令 - DRM /加密
vod_secret_key
- 语法:
vod_secret_key string
- 默认:
empty
- 背景:
http
,server
,location
设置用于生成TS加密密钥和DASH / MSS加密IV的种子。参数值可以包含变量,通常具有“secret- $ vod_filepath”结构。查看下面这个模块添加的nginx变量列表。
vod_encryption_iv_seed
- 语法:
vod_encryption_iv_seed string
- 默认:
empty
- 背景:
http
,server
,location
设置用于生成加密IV的种子,目前仅适用于使用AES-128加密的HLS / fMP4。参数值可以包含变量。
vod_drm_enabled
- 语法:
vod_drm_enabled on/off
- 默认:
off
- 背景:
http
,server
,location
启用后,模块将根据从drm上游获得的响应来加密媒体段。目前仅支持破折号和mss(播放就绪)。
vod_drm_single_key
- 语法:
vod_drm_single_key on/off
- 默认:
off
- 背景:
http
,server
,location
启用时,模块只请求第一个序列的drm信息并将其应用于所有序列。禁用时,需要为每个序列单独请求DRM信息。此外,在DASH中,启用此设置将使模块将ContentProtection标签置于AdaptationSet下,否则置于Representation下。
vod_drm_clear_lead_segment_count
- 语法:
vod_drm_clear_lead_segment_count count
- 默认:
1
- 背景:
http
,server
,location
设置流开始处的清除(未加密)分段的数量。明确的领先优势使玩家无需等待许可证回应即可开始游戏。
vod_drm_max_info_length
- 语法:
vod_drm_max_info_length length
- 默认:
4K
- 背景:
http
,server
,location
设置从上游返回的drm信息的最大长度。
vod_drm_upstream_location
- 语法:
vod_drm_upstream_location location
- 默认:
none
- 背景:
http
,server
,location
设置应该用于获取文件的DRM信息的nginx位置。
vod_drm_info_cache
- 语法:
vod_drm_info_cache zone_name zone_size [expiration]
- 默认:
off
- 背景:
http
,server
,location
配置drm信息缓存的大小和共享内存对象名称。
vod_drm_request_uri
- 语法:
vod_drm_request_uri uri
- 默认:
$vod_suburi
- 背景:
http
,server
,location
设置drm信息请求的URI,参数值可以包含变量。在多url的情况下,$vod_suburi
将是当前的子uri(每个子URL发出一个单独的drm信息请求)
vod_min_single_nalu_per_frame_segment
- 语法:
vod_min_single_nalu_per_frame_segment index
- 默认:
0
- 背景:
http
,server
,location
设置最小片段索引(从1开始),应该假定每帧只有一个h264 nalu。如果该值为0,则不假定每帧nal个单元的数量。此设置仅影响启用了DRM的DASH和MSS配置。
当使用libx264转码视频时,默认情况下,所有帧都有一个单独的nal单元,除了第一个包含libx264版权信息的nalu帧。将此参数设置为大于0的值可以显着提高性能,因为可以提前计算段的布局,从而使模块能够:
- 在生成时输出段缓冲区(不必等待整个段完成)
- 避免对不需要段数据的请求进行帧处理(例如,HEAD,范围0-0等)
配置指令 - HLS
vod_hls_encryption_method
- 语法:
vod_hls_encryption_method method
- 默认:
none
- 背景:
http
,server
,location
设置HLS段的加密方法,允许值为:none(缺省),aes-128,sample-aes。
vod_hls_force_unmuxed_segments
- 语法:
vod_hls_force_unmuxed_segments on/off
- 默认:
off
- 背景:
http
,server
,location
启用后,服务器将以不同于视频流使用的音频流的音频流(使用EXT-X-MEDIA)
vod_hls_container_format
- 语法:
vod_hls_container_format mpegts/fmp4/auto
- 默认:
auto
- 背景:
http
,server
,location
设置HLS段的容器格式。默认行为是使用fmp4作为HEVC,否则使用mpegts(Apple不支持MPEG TS上的HEVC)。
vod_hls_absolute_master_urls
- 语法:
vod_hls_absolute_master_urls on/off
- 默认:
on
- 背景:
http
,server
,location
启用后,服务器将返回主播放列表请求中的绝对播放列表URL
vod_hls_absolute_index_urls
- 语法:
vod_hls_absolute_index_urls on/off
- 默认:
on
- 背景:
http
,server
,location
启用时,服务器将返回媒体播放列表请求中的绝对段URL
vod_hls_absolute_iframe_urls
- 语法:
vod_hls_absolute_iframe_urls on/off
- 默认:
off
- 背景:
http
,server
,location
启用后,服务器将返回iframe播放列表请求中的绝对段URL
vod_hls_master_file_name_prefix
- 语法:
vod_hls_master_file_name_prefix name
- 默认:
master
- 背景:
http
,server
,location
HLS主播放列表文件的名称(默认为m3u8扩展名)。
vod_hls_index_file_name_prefix
- 语法:
vod_hls_index_file_name_prefix name
- 默认:
index
- 背景:
http
,server
,location
HLS媒体播放列表文件的名称(隐含M3u8扩展名)。
vod_hls_iframes_file_name_prefix
- 语法:
vod_hls_iframes_file_name_prefix name
- 默认:
iframes
- 背景:
http
,server
,location
HLS I帧播放列表文件的名称(隐含M3u8扩展名)。
vod_hls_segment_file_name_prefix
- 语法:
vod_hls_segment_file_name_prefix name
- 默认:
seg
- 背景:
http
,server
,location
段文件名的前缀,实际的文件名是seg-<index>-v<video-track-index>-a<audio-track-index>.ts
。
vod_hls_init_file_name_prefix
- 语法:
vod_hls_init_file_name_prefix name
- 默认:
init
- 背景:
http
,server
,location
init段文件名的名称,只有在使用fmp4容器时才有意义。
vod_hls_encryption_key_file_name
- 语法:
vod_hls_encryption_key_file_name name
- 默认:
encryption.key
- 背景:
http
,server
,location
加密密钥文件名的名称,仅在加密方法不相关时才适用none
。
vod_hls_encryption_key_uri
- 语法:
vod_hls_encryption_key_uri uri
- 默认:
a url pointing to encryption.key
- 背景:
http
,server
,location
设置EXT-X-KEY的URI属性的值,仅在加密方法不相关时才有效none
。参数值可以包含变量。
vod_hls_encryption_key_format
- 语法:
vod_hls_encryption_key_format format
- 默认:
none
- 背景:
http
,server
,location
设置EXT-X-KEY的KEYFORMAT属性的值,仅在加密方法不相关时才相关none
。
vod_hls_encryption_key_format_versions
- 语法:
vod_hls_encryption_key_format_versions versions
- 默认:
none
- 背景:
http
,server
,location
设置EXT-X-KEY的KEYFORMATVERSIONS属性的值,仅在加密方法不相关时才有效none
。
vod_hls_mpegts_interleave_frames
- 语法:
vod_hls_mpegts_interleave_frames on/off
- 默认:
off
- 背景:
http
,server
,location
当启用时,HLS复用器交织不同流(音频/视频)的帧。禁用时,在音频/视频之间的每个开关上,复用器都会刷新MPEG TS数据包。
vod_hls_mpegts_align_frames
- 语法:
vod_hls_mpegts_align_frames on/off
- 默认:
on
- 背景:
http
,server
,location
启用时,每个视频/音频帧均与MPEG TS数据包边界对齐,根据需要添加填充。
vod_hls_mpegts_output_id3_timestamps
- 语法:
vod_hls_mpegts_output_id3_timestamps on/off
- 默认:
on
- 背景:
http
,server
,location
启用后,将在每个TS段中输出ID3 TEXT帧,其中包含带绝对段时间戳的JSON。时间戳以自纪元(unixtime x 1000)以毫秒计算,JSON结构为:{"timestamp":1459779115000}
Nginx 学习笔记(五)nginx-vod-module 模块的更多相关文章
- nginx 学习笔记(2) nginx新手入门
这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...
- nginx 学习笔记(1) nginx安装
1.nginx安装 根据操作系统的不同,nginx的安装方式也不相同. 1.1 对linux系统来说,nginx.org提供了nginx安装包.http://nginx.org/en/linux_pa ...
- Nginx学习笔记六Nginx的模块开发
1.Nginx配置文件主要组成:main(全局配置)这部分的指令将影响其他所有部分.server(虚拟主机配置)这部分指令主要用于指定虚拟主机域名,IP和端口.upstream(主要为反向代理,负载均 ...
- Nginx 学习笔记(四)nginx-module-vts模块
看看已经搭建好的效果图 1.基本信息 2.过滤信息 3.上游服务器 4.其他进程 1.获取组区域(默认返回json格式数据) (1)mainZones https://www.tinywan.com/ ...
- 七、Nginx学习笔记七Nginx的Web缓存服务
user www; worker_processes 1; error_log /usr/local/nginx/logs/error.log crit; pid /usr/local/nginx/l ...
- nginx学习笔记(7)Nginx如何处理一个请求---转载
如何防止处理未定义主机名的请求基于域名和IP混合的虚拟主机一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口 ...
- nginx 学习笔记(5) nginx调试日志
为启动一个调试日志,nginx需要在构建时配置城支持调试模式. ./configure --with-debug ... 而且调试级别应该使用err_log指令来设置: err_log /path/t ...
- nginx 学习笔记(3) nginx管理
nginx可以通过向其发送信号来进行管理.默认情况下主进程的进程ID写到文件/usr/local/nginx/logs/nginx.pid中.当然也可以在配置文件中自定义该pid文件,自定义使用pid ...
- nginx 学习笔记(6) nginx配置文件中的度量单位
容量大小可以用比特(byte),千比特(kilobyte,后缀k或者K)或者兆(megabytes,后缀m或者M),例如:“1024”,“8k”,“1m”. 时间间隔可以用毫秒(millisecond ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
随机推荐
- Maven2查看源码
- Linux CentOS7 安装php简要过程以及nginx
Copy From https://www.cnblogs.com/freeweb/p/5425554.html 修改了下: 1. 下载php源码: wget http://cn2.php.net ...
- SQLSERVER case when 的学习
sqlserver 查询时的CASE WHEN学习记录 ) as '任务数', RPATask_State as id, case RPATask_State when then '已接收' when ...
- Win2012r2 以及win2016 安装.NET3.5
自从微软的内核 6.2以上的版本之后 win2012 win2016 已经自带了 .net4.0的版本 但是很多应用还需要.net 3.5的版本,虽然微软的安装盘里面有 .net 3.5的安装文件,但 ...
- k8s 1.9 安装
测试环境 主机 系统 master CentOS 7.3 node CentOS 7.3 2.关闭selinux(所有节点都执行) [root@matser ~]# getenforce Disabl ...
- Python——socketsever模块
1.作用:同时与多个客户端通信 import socketserver class MyServer(skcketserver.BaseRequestHandler): def handle(self ...
- Dictionary CPU 100%
昨天服务器的CPU突然100%,此服务已经运行几年了,都平安无事.既然问题出现当然要找出这个遗留多年的小概率问题.出现cpu 100% 一般就是哪里出现了无法跳出的死循环. 1.获取进程的内存信息 服 ...
- LOJ6045 雅礼集训 2017 Day8 价(最小割)
由Hall定理,任意k种减肥药对应的药材数量>=k.考虑如何限制其恰好为k,可以将其看作是使对应的药材数量尽量少. 考虑最小割.建一个二分图,左边的点表示减肥药,右边的点表示药材.减肥药和其使用 ...
- BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
显然答案就是最小割.直接跑dinic也能过,不过显得不太靠谱. 考虑更正确的做法.作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边.于是我们把空白区域看成点,隔开他们的边 ...
- Spring AOP动态代理原理与实现方式
AOP:面向切面.面向方面.面向接口是一种横切技术横切技术运用:1.事务管理: (1)数据库事务:(2)编程事务(3)声明事物:Spring AOP-->声明事物 2.日志处理:3.安全验证 ...