当前位置:网站首页 >  攻略

从零配置基于Nginx的RTMP/HLS/DASH全场景视频点播协议

时间:2026年06月04日 08:13:53 来源:易频IT社区
一、前置准备 1.1 系统环境 推荐使用 Ubuntu 22.04 LTS 64位 系统,操作前确保已执行系统更新: ```bash sudo apt update && sudo apt upgrade -y ``` 1.2 编译依赖安装 Nginx默认不支持RTMP,需编译模块;HLS/DASH需模块`nginx-http-flv-module`替代基础RTMP(性能更优,支持HLS/DASH自动生成),依赖如下: ```bash sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev git -y ``` 1.3 源码下载 固定Nginx 1.25.3(稳定版+兼容HTTP-FLV)和模块源码: ```bash 切换到临时目录 cd /usr/local/src 下载Nginx wget http://nginx.org/download/nginx-1.25.3.tar.gz 解压Nginx tar -zxvf nginx-1.25.3.tar.gz 下载nginx-http-flv-module git clone https://github.com/winshining/nginx-http-flv-module.git ``` 二、编译安装Nginx 2.1 配置编译参数 配置模块路径、安装路径、SSL等: ```bash cd nginx-1.25.3 ./configure \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --add-module=../nginx-http-flv-module ``` 2.2 编译并安装 ```bash make -j$(nproc) sudo make install ``` 2.3 配置系统服务 创建服务文件便于管理: ```bash sudo nano /etc/systemd/system/nginx.service ``` 粘贴以下完整内容: ``` [Unit] Description=nginx - high performance web server Documentation=http://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStartPre=/usr/local/nginx/sbin/nginx -t ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target ``` 保存退出(Ctrl+O→Enter→Ctrl+X),重载并启动服务: ```bash sudo systemctl daemon-reload sudo systemctl start nginx sudo systemctl enable nginx ``` 三、全场景点播协议配置 3.1 核心目录准备 创建点播文件存放目录、HLS/DASH临时转码目录,设置权限: ```bash sudo mkdir -p /var/www/vod/video /var/www/vod/temp sudo chown -R www-data:www-data /var/www/vod ``` 3.2 完整Nginx配置文件 替换默认配置: ```bash sudo mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak sudo nano /usr/local/nginx/conf/nginx.conf ``` 粘贴以下完整可复制内容: ``` user www-data; worker_processes auto; pid /usr/local/nginx/logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; tcp_nopush on; keepalive_timeout 65; 点播HTTP端口(按需修改为8080等) server { listen 80; server_name _; HLS/DASH静态文件目录 location /vod { alias /var/www/vod/video; expires 30d; add_header Cache-Control "public"; 跨域配置(用于Web播放,按需修改allowed_origin) add_header Access-Control-Allow-Origin ; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; if ($request_method = 'OPTIONS') { return 204; } } RTMP推流记录后自动转HLS/DASH(可选,但点播更推荐直接转静态文件) 这里为了测试方便,保留手动推流转点播的入口 location /vod-live-to-static { alias /var/www/vod/temp; expires 1d; add_header Access-Control-Allow-Origin ; } } } RTMP协议配置 rtmp { server { listen 1935; chunk_size 4096; 推流记录应用(转静态点播源) application record { live on; 开启录制 record all; 录制文件保存路径 record_path /var/www/vod/temp; 录制文件命名规则(带时间戳+流名) record_unique on; 录制格式为flv record_format flv; 录制文件自动转HLS(可选,需手动后续合并或转MP4) hls on; hls_path /var/www/vod/temp/hls; hls_fragment 5s; hls_playlist_length 30s; 推流跨域(可选) allow play all; } 点播拉流应用 application vod { play /var/www/vod/video; } } } ``` 保存退出,重载Nginx: ```bash sudo /usr/local/nginx/sbin/nginx -t sudo systemctl reload nginx ``` 四、点播源文件处理 4.1 上传或准备源文件 将本地MP4/FLV文件上传到`/var/www/vod/video`目录,推荐使用`scp`命令(本地终端执行,替换IP、路径): ```bash 本地Windows/Mac/Linux通用(Mac/Linux无需转义,Windows PowerShell需替换路径分隔符) scp /本地/文件/路径/test.mp4 root@服务器公网IP:/var/www/vod/video/ ``` 上传后再次确认权限: ```bash sudo chown -R www-data:www-data /var/www/vod/video/test.mp4 ``` 4.2 源文件转HLS/DASH(必做,适配Web) Nginx HTTP-FLV支持MP4/FLV点播,但HLS/DASH是Web/移动端通用的高兼容协议,需用`ffmpeg`转: ```bash 安装ffmpeg sudo apt install ffmpeg -y 转HLS(单码率,推荐,兼容性最好) sudo ffmpeg -i /var/www/vod/video/test.mp4 \ -c:v libx264 -c:a aac \ -hls_time 5 \ -hls_list_size 0 \ -hls_segment_filename /var/www/vod/video/test_%03d.ts \ /var/www/vod/video/test.m3u8 转DASH(单码率,适配Chrome/Edge等现代浏览器,可选但建议) sudo ffmpeg -i /var/www/vod/video/test.mp4 \ -c:v libx264 -c:a aac \ -f dash \ -seg_duration 5 \ -window_size 0 \ -adaptation_sets "id=0,streams=v id=1,streams=a" \ /var/www/vod/video/test.mpd ``` 转码后权限再次确认: ```bash sudo chown -R www-data:www-data /var/www/vod/video/ ``` 五、播放测试 5.1 RTMP点播测试 使用VLC播放器: - 打开VLC→媒体→打开网络串流 - 输入地址:`rtmp://服务器公网IP/vod/test.mp4` - 点击播放即可 5.2 HLS/DASH点播测试 使用在线测试工具(无需本地安装播放器): - HLS测试:访问https://test-streams.mux.dev/x36xhzz/ ,输入地址`http://服务器公网IP/vod/test.m3u8` - DASH测试:访问https://reference.dashif.org/dash.js/latest/samples/dash-if-reference-player/index.html ,输入地址`http://服务器公网IP/vod/test.mpd` 5.3 本地Web测试(可选) 新建本地HTML文件`test.html`,粘贴以下内容(支持HLS/DASH自动切换兼容模式): ```html 点播测试 ``` 用浏览器打开本地`test.html`即可播放。 六、常见问题排查 6.1 Nginx启动失败 - 检查端口占用:`sudo netstat -tulpn | grep -E '80|1935'`,如有占用可修改Nginx配置的`listen`值 - 检查配置语法:`sudo /usr/local/nginx/sbin/nginx -t` 6.2 播放403/404 - 404:确认文件路径与Nginx配置的`alias`/`play`匹配 - 403:确认目录/文件权限为`www-data:www-data`,或临时设为`755`测试:`sudo chmod -R 755 /var/www/vod` 6.3 RTMP点播卡顿 - 调整Nginx配置的`chunk_size`为`8192`或`16384` - 检查服务器带宽,单码率1080P需至少2Mbps上行/下行带宽

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图