借助ffmpeg实现Nginx RTMP服务下文件夹内视频通过网页播放器独立播放
解决方案
你已经完成Nginx+RTMP模块的基础配置,可通过扩展RTMP模块的点播/HLS能力,适配JWPlayer这类网页播放器的拉流需求,具体操作如下:
步骤1:修改Nginx配置文件
编辑你的Nginx配置文件(通常路径为/usr/local/nginx/conf/nginx.conf或/etc/nginx/nginx.conf),分别调整rtmp块和http块的配置:
rtmp块新增配置
rtmp { server { listen 1935; chunk_size 4096; # RTMP协议点播配置 application vod { play /path/to/your/movie/folder; # 替换为你的电影文件夹实际路径 } # HLS流配置,适配网页播放器 application hls { live on; hls on; hls_path /tmp/hls; # 提前创建该目录,给Nginx运行用户授予读写权限 hls_fragment 5s; hls_playlist_length 20s; push_reconnect 1s; } } }
http块新增配置
http { # 保留你原有配置不变,新增如下server块 server { listen 8080; # 可替换为任意未占用端口 # 跨域配置,避免网页播放器跨域报错 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'; # HLS切片文件访问配置 location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; expires -1; } # 可选:HTTP直接点播MP4文件配置 location /vod { root /path/to/your/movie/folder; mp4; mp4_buffer_size 1m; mp4_max_buffer_size 5m; } } }
修改完成后执行nginx -t检查配置合法性,确认无报错后执行nginx -s reload重载配置生效。
步骤2:生成可拉流的播放地址
根据需求选择两种方案即可:
- 方案一:点播模式(按需加载,适合文件多、访问量小的场景)
无需额外转码,直接生成HTTP点播地址即可,格式为http://你的服务器IP:8080/vod/电影文件名.mp4,JWPlayer原生支持直接播放该类地址。 - 方案二:常驻直播流模式(随时可拉流,适合高访问量场景)
用ffmpeg将本地电影文件推送到RTMP服务生成常驻HLS流,示例命令:ffmpeg -re -i /path/to/your/movie/folder/xxx.mp4 -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1:1935/hls/xxx
其中xxx为自定义流名,推送成功后对应的HLS流地址为http://你的服务器IP:8080/hls/xxx.m3u8。
步骤3:JWPlayer端加载流
直接将上述生成的地址填入JWPlayer配置即可,示例:
jwplayer("player-container").setup({ file: "http://你的服务器IP:8080/hls/xxx.m3u8", // 也可替换为HTTP点播的MP4地址 width: "100%", aspectratio: "16:9" });
注意事项
- 所有涉及的文件路径都需要给Nginx运行用户授予对应读写权限,避免403报错
- 公网部署需要在防火墙/安全组放开1935(RTMP)、8080(HTTP)端口的访问权限
- 播放卡顿可适当调大hls切片长度,或调整ffmpeg编码参数降低输出码率
内容的提问来源于stack exchange,提问作者abraham selous
相关产品推荐
相关产品推荐

