使用ngix-vod-module创建即时的HLS流媒体分发环境
nginx-vod-module是什么?
在服务器上将视频文件动态转换成hls或mpd格式的nginx扩展。
条件

安装所需的工具
apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev libgd-dev libxml2 libxml2-dev uuid-dev git
下载源代码
使用一种原生的中文表达方式重新表述以下内容:
Nginx
wget https://nginx.org/download/nginx-1.23.3.tar.gz
tar -xzvf nginx-1.23.3.tar.gz
nginx-vod-module 通过中文本地化助手進行消歧化预处理
cd nginx-1.23.3
git clone https://github.com/kaltura/nginx-vod-module
建造
设定
./configure --add-module=./nginx-vod-module --with-file-aio --with-threads --with-cc-opt='-O3 -mpopcnt' --with-cc-opt='-DNGX_VOD_MAX_TRACK_COUNT=256 -mavx2' --with-http_ssl_module --with-http_sub_module --with-http_gzip_static_module --with-http_gunzip_module --with-http_addition_module --with-http_slice_module --with-http_dav_module --with-http_v2_module --with-http_auth_request_module --with-http_realip_module --with-http_stub_status_module --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-pcre-jit --with-cc-opt='-g -O2 -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -fPIC' --with-compat --with-debug
搭建
make
make install
设定
/sample.conf 的路径是 /etc/nginx/conf.d/。
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;
root /path/to/root;
include /etc/nginx/default.d/*.conf;
client_max_body_size 100M;
vod_mode local; #基本はlocalでok、remoteを入れるとhttp経由でmp4を取れる
vod_fallback_upstream_location /fallback;
vod_last_modified 'Sun, 19 Nov 2000 08:52:00 GMT';
vod_last_modified_types *;
vod_metadata_cache metadata_cache 1024m;
vod_response_cache response_cache 512m;
vod_manifest_segment_durations_mode accurate; #hlsなどのセグメント長を実際の数値に合わせる
vod_segment_duration 10000; #セグメント長はお好みで
vod_align_segments_to_key_frames on; #onにしない(キーフレームに合わせない)と音だけとかになる
gzip on;
gzip_types application/vnd.apple.mpegurl;
open_file_cache max=1000 inactive=5m;
open_file_cache_valid 2m;
open_file_cache_min_uses 1;
open_file_cache_errors on;
aio on;
location / {
vod dash;
vod hls;
alias /path/to/movie/;
}
}
※请根据需要适时更改密码
※建议进行单独的认证设置
我会试着访问。
使用支持HLS的播放器访问以下路径,即可播放视频:http:// 主机名 / 视频路径 / master.m3u8。
故障排除
无法在虚拟机上正常运行
在vod_mode为local时,使用virtio等可能会导致错误。在这种情况下,请尝试通过nfs等进行传输。
所有segment的URL都变成了http。
如果服务器通过代理等方式来处理连接,并且接受HTTP连接,那么段落的URL也将是HTTP的。请尝试启用SSL。
在hls.js中出现了片段间的丢失。
请在服务器中添加以下配置。
※此示例已经有设置。
vod_manifest_segment_durations_mode accurate; #hlsなどのセグメント長を実際の数値に合わせる
vod_segment_duration 10000; #セグメント長はお好みで
vod_align_segments_to_key_frames on; #onにしない(キーフレームに合わせない)と音だけとかになる