nginx RTMP推拉流,多个音频流合并。

发布时间 2023-06-26 17:23:05作者: Rolay

使用nginx RTMP(nginx的一个插件模块,具体的网上搜一下)做一个简易的多人音频通话流媒体服务器,多个端通话时,客户端无法处理其他端发过来的音频流,比如A、B、C三个端通话,A设备同时持有B、C的音频流,这样对设备端非常的不友好。

这时候就需要用到一个强大的工具,FFMPEG,安装网上很多,搜下就有,具体命令如下:

ffmpeg -i rtmp://source1 -i rtmp://source2 -filter_complex amix=inputs=2:duration=longest -c:a aac -f flv rtmp://destination

上述命令假设你有两个输入 RTMP 音频流,分别是 rtmp://source1rtmp://source2,以及一个输出 RTMP 地址 rtmp://destination

使用 -filter_complex amix=inputs=2:duration=longest 部分来合并两个输入流,并确保输出流的时长与最长的输入流相匹配。

使用 -c:a aac 部分来指定输出音频的编码格式为 AAC。

最后,使用 -f flv 来指定输出格式为 FLV。

这时候我们可以动态的根据参与通话的设备数量来通过上诉命令,合并音频流,并推送到新的一个流地址,设备端只需要拿到合并的这个地址播放即可。