使用ngix-vod-module创建即时的HLS流媒体分发环境

nginx-vod-module是什么?

在服务器上将视频文件动态转换成hls或mpd格式的nginx扩展。

条件

QXfKogTWwOaU4q81680420142_1680420195.png

安装所需的工具

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にしない(キーフレームに合わせない)と音だけとかになる
广告
将在 10 秒后关闭
bannerAds