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

推荐设置:

  1. --with-file-aio - 启用异步I / O支持,强烈建议,仅与本地和映射模式相关
  2. --with-threads(nginx 1.7.11+) - 使用线程池(也需要vod_open_file_thread_pool在nginx.conf中)启用异步文件,仅与本地和映射模式相关
  3. --with-cc-opt="-O3"- 启用额外的编译器优化(与nginx默认值相比,mp4解析时间和帧处理时间减少了大约8%-O

调试设置:

  1. --with-debug- 启用调试消息(也需要传入nginx.conf debug中的error_log指令)。
  2. --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将返回一个包含以下内容的清单:

三、网址路径参数

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格式。

本部分包含几个简单的示例,后面是对支持的对象和字段的引用。但首先,有几个定义:

  1. Source Clip - 从单个媒体文件中提取的一组音频和/或视频帧(音轨)
  2. Generator - 可以生成音频/视频帧的组件。目前,唯一支持的发生器是无声发生器。
  3. Filter - 可以应用于音频/视频帧的操作。支持以下过滤器:
    • 速率(速度)变化 - 适用于音频和视频
    • 音量变化
    • 混合 - 可用于将多个音轨合并在一起,或将源A的音频与源B的视频合并
  1. Clip - 在一组源剪辑上应用零个或多个过滤器的结果
  2. Dynamic Clip - 内容未知的剪辑,例如有针对性的广告内容
  3. Sequence - 一组应该一个接一个播放的剪辑。
  4. 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

背景:httpserverlocation

描述: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

背景:httpserverlocation

描述:段文件名的前缀,实际的文件名是: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
  • 背景:httpserverlocation

配置视频元数据缓存的大小和共享内存对象名称。对于MP4文件,这个缓存保存moov原子。

vod_mapping_cache

  • 语法:vod_mapping_cache zone_name zone_size [expiration]
  • 默认:off
  • 背景:httpserverlocation

为vod配置映射缓存的大小和共享内存对象名称(仅限映射模式)。

vod_live_mapping_cache

  • 语法:vod_live_mapping_cache zone_name zone_size [expiration]
  • 默认:off
  • 背景:httpserverlocation

配置实时映射缓存的大小和共享内存对象名称(仅限映射模式)。

vod_response_cache

  • 语法:vod_response_cache zone_name zone_size [expiration]
  • 默认:off
  • 背景:httpserverlocation

配置响应缓存的大小和共享内存对象名称。响应缓存包含清单和其他非视频内容(如DASH初始段,HLS加密密钥等)。视频片段不被缓存。

vod_live_response_cache

  • 语法:vod_live_response_cache zone_name zone_size [expiration]
  • 默认:off
  • 背景:httpserverlocation

配置响应缓存的大小和共享内存对象名称,以便更改实时响应。该缓存包含以下类型的响应:DASH MPD,HLS索引M3U8,HDS引导,MSS清单。

vod_initial_read_size

  • 语法:vod_initial_read_size size
  • 默认:4K
  • 背景:httpserverlocation

设置MP4文件的初始读取操作的大小。

vod_max_metadata_size

  • 语法:vod_max_metadata_size size
  • 默认:128MB
  • 背景:httpserverlocation

设置支持的最大视频元数据大小(对于MP4 - moov原子大小)

vod_max_frames_size

  • 语法:vod_max_frames_size size
  • 默认:16MB
  • 背景:httpserverlocation

设置单个段的帧的总大小限制

vod_cache_buffer_size

  • 语法:vod_cache_buffer_size size
  • 默认:256K
  • 背景:httpserverlocation

设置读取MP4帧时使用的缓存缓冲区的大小。

vod_open_file_thread_pool

  • 语法:vod_open_file_thread_pool pool_name
  • 默认:off
  • 背景:httpserverlocation

启用通过线程池打开的异步文件。线程池必须使用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
  • 背景:httpserverlocation

预先分配缓冲区以生成响应数据,从而节省每个请求的分配/释放缓冲区的需求。

vod_performance_counters

  • 语法:vod_performance_counters zone_name
  • 默认:off
  • 背景:httpserverlocation

配置性能计数器的共享内存对象名称

配置指令 - DRM /加密

vod_secret_key

  • 语法:vod_secret_key string
  • 默认:empty
  • 背景:httpserverlocation

设置用于生成TS加密密钥和DASH / MSS加密IV的种子。参数值可以包含变量,通常具有“secret- $ vod_filepath”结构。查看下面这个模块添加的nginx变量列表。

vod_encryption_iv_seed

  • 语法:vod_encryption_iv_seed string
  • 默认:empty
  • 背景:httpserverlocation

设置用于生成加密IV的种子,目前仅适用于使用AES-128加密的HLS / fMP4。参数值可以包含变量。

vod_drm_enabled

  • 语法:vod_drm_enabled on/off
  • 默认:off
  • 背景:httpserverlocation

启用后,模块将根据从drm上游获得的响应来加密媒体段。目前仅支持破折号和mss(播放就绪)。

vod_drm_single_key

  • 语法:vod_drm_single_key on/off
  • 默认:off
  • 背景:httpserverlocation

启用时,模块只请求第一个序列的drm信息并将其应用于所有序列。禁用时,需要为每个序列单独请求DRM信息。此外,在DASH中,启用此设置将使模块将ContentProtection标签置于AdaptationSet下,否则置于Representation下。

vod_drm_clear_lead_segment_count

  • 语法:vod_drm_clear_lead_segment_count count
  • 默认:1
  • 背景:httpserverlocation

设置流开始处的清除(未加密)分段的数量。明确的领先优势使玩家无需等待许可证回应即可开始游戏。

vod_drm_max_info_length

  • 语法:vod_drm_max_info_length length
  • 默认:4K
  • 背景:httpserverlocation

设置从上游返回的drm信息的最大长度。

vod_drm_upstream_location

  • 语法:vod_drm_upstream_location location
  • 默认:none
  • 背景:httpserverlocation

设置应该用于获取文件的DRM信息的nginx位置。

vod_drm_info_cache

  • 语法:vod_drm_info_cache zone_name zone_size [expiration]
  • 默认:off
  • 背景:httpserverlocation

配置drm信息缓存的大小和共享内存对象名称。

vod_drm_request_uri

  • 语法:vod_drm_request_uri uri
  • 默认:$vod_suburi
  • 背景:httpserverlocation

设置drm信息请求的URI,参数值可以包含变量。在多url的情况下,$vod_suburi将是当前的子uri(每个子URL发出一个单独的drm信息请求)

vod_min_single_nalu_per_frame_segment

  • 语法:vod_min_single_nalu_per_frame_segment index
  • 默认:0
  • 背景:httpserverlocation

设置最小片段索引(从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
  • 背景:httpserverlocation

设置HLS段的加密方法,允许值为:none(缺省),aes-128,sample-aes。

vod_hls_force_unmuxed_segments

  • 语法:vod_hls_force_unmuxed_segments on/off
  • 默认:off
  • 背景:httpserverlocation

启用后,服务器将以不同于视频流使用的音频流的音频流(使用EXT-X-MEDIA)

vod_hls_container_format

  • 语法:vod_hls_container_format mpegts/fmp4/auto
  • 默认:auto
  • 背景:httpserverlocation

设置HLS段的容器格式。默认行为是使用fmp4作为HEVC,否则使用mpegts(Apple不支持MPEG TS上的HEVC)。

vod_hls_absolute_master_urls

  • 语法:vod_hls_absolute_master_urls on/off
  • 默认:on
  • 背景:httpserverlocation

启用后,服务器将返回主播放列表请求中的绝对播放列表URL

vod_hls_absolute_index_urls

  • 语法:vod_hls_absolute_index_urls on/off
  • 默认:on
  • 背景:httpserverlocation

启用时,服务器将返回媒体播放列表请求中的绝对段URL

vod_hls_absolute_iframe_urls

  • 语法:vod_hls_absolute_iframe_urls on/off
  • 默认:off
  • 背景:httpserverlocation

启用后,服务器将返回iframe播放列表请求中的绝对段URL

vod_hls_master_file_name_prefix

  • 语法:vod_hls_master_file_name_prefix name
  • 默认:master
  • 背景:httpserverlocation

HLS主播放列表文件的名称(默认为m3u8扩展名)。

vod_hls_index_file_name_prefix

  • 语法:vod_hls_index_file_name_prefix name
  • 默认:index
  • 背景:httpserverlocation

HLS媒体播放列表文件的名称(隐含M3u8扩展名)。

vod_hls_iframes_file_name_prefix

  • 语法:vod_hls_iframes_file_name_prefix name
  • 默认:iframes
  • 背景:httpserverlocation

HLS I帧播放列表文件的名称(隐含M3u8扩展名)。

vod_hls_segment_file_name_prefix

  • 语法:vod_hls_segment_file_name_prefix name
  • 默认:seg
  • 背景:httpserverlocation

段文件名的前缀,实际的文件名是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
  • 背景:httpserverlocation

init段文件名的名称,只有在使用fmp4容器时才有意义。

vod_hls_encryption_key_file_name

  • 语法:vod_hls_encryption_key_file_name name
  • 默认:encryption.key
  • 背景:httpserverlocation

加密密钥文件名的名称,仅在加密方法不相关时才适用none

vod_hls_encryption_key_uri

  • 语法:vod_hls_encryption_key_uri uri
  • 默认:a url pointing to encryption.key
  • 背景:httpserverlocation

设置EXT-X-KEY的URI属性的值,仅在加密方法不相关时才有效none。参数值可以包含变量。

vod_hls_encryption_key_format

  • 语法:vod_hls_encryption_key_format format
  • 默认:none
  • 背景:httpserverlocation

设置EXT-X-KEY的KEYFORMAT属性的值,仅在加密方法不相关时才相关none

vod_hls_encryption_key_format_versions

  • 语法:vod_hls_encryption_key_format_versions versions
  • 默认:none
  • 背景:httpserverlocation

设置EXT-X-KEY的KEYFORMATVERSIONS属性的值,仅在加密方法不相关时才有效none

vod_hls_mpegts_interleave_frames

  • 语法:vod_hls_mpegts_interleave_frames on/off
  • 默认:off
  • 背景:httpserverlocation

当启用时,HLS复用器交织不同流(音频/视频)的帧。禁用时,在音频/视频之间的每个开关上,复用器都会刷新MPEG TS数据包。

vod_hls_mpegts_align_frames

  • 语法:vod_hls_mpegts_align_frames on/off
  • 默认:on
  • 背景:httpserverlocation

启用时,每个视频/音频帧均与MPEG TS数据包边界对齐,根据需要添加填充。

vod_hls_mpegts_output_id3_timestamps

  • 语法:vod_hls_mpegts_output_id3_timestamps on/off
  • 默认:on
  • 背景:httpserverlocation

启用后,将在每个TS段中输出ID3 TEXT帧,其中包含带绝对段时间戳的JSON。时间戳以自纪元(unixtime x 1000)以毫秒计算,JSON结构为:{"timestamp":1459779115000}

Nginx 学习笔记(五)nginx-vod-module 模块的更多相关文章

  1. nginx 学习笔记(2) nginx新手入门

    这篇手册简单介绍了nginx,并提供了一些可以操作的简单的工作.前提是nginx已经被安装到你的服务器上.如果没有安装,请阅读上篇:nginx 学习笔记(1) nginx安装.这篇手册主要内容:1. ...

  2. nginx 学习笔记(1) nginx安装

    1.nginx安装 根据操作系统的不同,nginx的安装方式也不相同. 1.1 对linux系统来说,nginx.org提供了nginx安装包.http://nginx.org/en/linux_pa ...

  3. Nginx学习笔记六Nginx的模块开发

    1.Nginx配置文件主要组成:main(全局配置)这部分的指令将影响其他所有部分.server(虚拟主机配置)这部分指令主要用于指定虚拟主机域名,IP和端口.upstream(主要为反向代理,负载均 ...

  4. Nginx 学习笔记(四)nginx-module-vts模块

    看看已经搭建好的效果图 1.基本信息 2.过滤信息 3.上游服务器 4.其他进程 1.获取组区域(默认返回json格式数据) (1)mainZones https://www.tinywan.com/ ...

  5. 七、Nginx学习笔记七Nginx的Web缓存服务

    user www; worker_processes 1; error_log /usr/local/nginx/logs/error.log crit; pid /usr/local/nginx/l ...

  6. nginx学习笔记(7)Nginx如何处理一个请求---转载

    如何防止处理未定义主机名的请求基于域名和IP混合的虚拟主机一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口 ...

  7. nginx 学习笔记(5) nginx调试日志

    为启动一个调试日志,nginx需要在构建时配置城支持调试模式. ./configure --with-debug ... 而且调试级别应该使用err_log指令来设置: err_log /path/t ...

  8. nginx 学习笔记(3) nginx管理

    nginx可以通过向其发送信号来进行管理.默认情况下主进程的进程ID写到文件/usr/local/nginx/logs/nginx.pid中.当然也可以在配置文件中自定义该pid文件,自定义使用pid ...

  9. nginx 学习笔记(6) nginx配置文件中的度量单位

    容量大小可以用比特(byte),千比特(kilobyte,后缀k或者K)或者兆(megabytes,后缀m或者M),例如:“1024”,“8k”,“1m”. 时间间隔可以用毫秒(millisecond ...

  10. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

随机推荐

  1. Maven2查看源码

  2. Linux CentOS7 安装php简要过程以及nginx

    Copy From  https://www.cnblogs.com/freeweb/p/5425554.html 修改了下: 1. 下载php源码: wget  http://cn2.php.net ...

  3. SQLSERVER case when 的学习

    sqlserver 查询时的CASE WHEN学习记录 ) as '任务数', RPATask_State as id, case RPATask_State when then '已接收' when ...

  4. Win2012r2 以及win2016 安装.NET3.5

    自从微软的内核 6.2以上的版本之后 win2012 win2016 已经自带了 .net4.0的版本 但是很多应用还需要.net 3.5的版本,虽然微软的安装盘里面有 .net 3.5的安装文件,但 ...

  5. k8s 1.9 安装

    测试环境 主机 系统 master CentOS 7.3 node CentOS 7.3 2.关闭selinux(所有节点都执行) [root@matser ~]# getenforce Disabl ...

  6. Python——socketsever模块

    1.作用:同时与多个客户端通信 import socketserver class MyServer(skcketserver.BaseRequestHandler): def handle(self ...

  7. Dictionary CPU 100%

    昨天服务器的CPU突然100%,此服务已经运行几年了,都平安无事.既然问题出现当然要找出这个遗留多年的小概率问题.出现cpu 100% 一般就是哪里出现了无法跳出的死循环. 1.获取进程的内存信息 服 ...

  8. LOJ6045 雅礼集训 2017 Day8 价(最小割)

    由Hall定理,任意k种减肥药对应的药材数量>=k.考虑如何限制其恰好为k,可以将其看作是使对应的药材数量尽量少. 考虑最小割.建一个二分图,左边的点表示减肥药,右边的点表示药材.减肥药和其使用 ...

  9. BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)

    显然答案就是最小割.直接跑dinic也能过,不过显得不太靠谱. 考虑更正确的做法.作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边.于是我们把空白区域看成点,隔开他们的边 ...

  10. Spring AOP动态代理原理与实现方式

    AOP:面向切面.面向方面.面向接口是一种横切技术横切技术运用:1.事务管理: (1)数据库事务:(2)编程事务(3)声明事物:Spring AOP-->声明事物   2.日志处理:3.安全验证 ...