You need to enable JavaScript to run this app. 如何在Nginx RTMP中合并视频循环流与广播音频流搭建Web TV
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 05:24:09