如何在Nginx RTMP中合并视频循环流与广播音频流搭建Web TV
结论
仅靠原生Nginx RTMP模块无法直接实现你的需求,你需要搭配ffmpeg完成音视频合并、视频循环推流的逻辑,再通过Nginx RTMP对外输出Web TV流,整套流程可正常跑通。
实现步骤
1. 配置Nginx RTMP基础服务
先搭建基础RTMP服务,配置推流接收应用,同时开启HLS切片适配Web端播放,示例配置片段如下:
rtmp { server { listen 1935; application webtv { live on; hls on; hls_path /tmp/hls; hls_fragment 2s; hls_playlist_length 10s; } } http { server { listen 80; location /hls { root /tmp; add_header Access-Control-Allow-Origin *; } } } }
2. 用FFmpeg实现视频循环+音视频合并推流
核心逻辑是通过ffmpeg同时读取无限循环的mp4视频源、Shoutcast输出的m3u8音频源,用电台音频替换视频原有音轨后推流到Nginx RTMP服务,示例命令如下:
ffmpeg -re -stream_loop -1 -i /path/to/your/loop.mp4 -i http://你的Shoutcast服务地址/stream.m3u8 \ -c:v copy -c:a aac -ar 44100 -b:a 128k -map 0:v:0 -map 1:a:0 \ -f flv rtmp://127.0.0.1:1935/webtv/livestream
核心参数说明:
-stream_loop -1:实现mp4视频无限循环播放-map 0:v:0:取第一个输入源(本地mp4)的视频流作为输出视频-map 1:a:0:取第二个输入源(Shoutcast m3u8流)的音频流作为输出音频,直接替换原视频自带音轨-c:v copy:视频编码直接复用原mp4的编码,降低CPU开销;如果你的mp4不是H.264编码,需要改成-c:v libx264做转码处理
3. 前端播放
配置完成后,前端可以直接通过http://你的服务器地址/hls/livestream.m3u8播放合成后的Web TV流,适配所有支持HLS协议的浏览器和终端设备。
注意事项
- 可给ffmpeg添加
-analyzeduration 10000000 -probesize 10000000参数,缓解Shoutcast音频流抖动导致的音画不同步问题 - 可配合systemd或supervisor管理ffmpeg进程,异常退出时自动重启,保证直播流持续可用
- 如果需要多码率适配不同网络环境,可以在ffmpeg命令中配置多输出参数,或者在Nginx RTMP中添加转码规则实现
内容的提问来源于stack exchange,提问作者rayjhp
相关产品推荐
相关产品推荐

