如何在ffmpeg中合并两个输入rtp流?

时间:2016-09-09 12:43:41

标签: ffmpeg stream rtp

我希望两个合并两个mp3输入rtp流并将它们保存为mp3文件,使用以下命令:

ffmpeg -i rtp://127.0.0.1:5004?listen -i rtp://127.0.0.1:5005?listen -filter_complex amerge -ac 2 -c 2 -c:a libmp3lame q:a 4 output.mp3

返回错误绑定失败:错误号-10048发生rtp://127.0.0.1:5005?listen:I / O错误

在我尝试这个之前,我首先尝试将两个mp3文件与以下工作命令合并:

ffmpeg -i input01.mp3 -i input02.mp3 -filter_complex amerge -ac 2 -c 2 -c:a libmp3lame -q:a 4 output.mp3

我还试图单独获取每个rtp流并创建.wav文件输出。这也适用于以下命令:

ffmpeg -i rtp://127.0.0.1:5004?listen output.wav  

使用udp我可以合并到一起流并创建一个mp3输出:

ffmpeg -i udp://127.0.0.1:5004?listen -i udp://127.0.0.1:5005 -filter_complex amerge -ac 2 -c 2 -c:a libmp3lame -q:a 4 output.mp3

有谁知道如何在ffmpeg中抓取,合并和写入两个rtp流到mp3文件?或者这仍然只是像2012年一样支持一个rtp流?

1 个答案:

答案 0 :(得分:0)

上述命令的问题是端口号。如果在端口上接收rtp(通常在大于1024的偶数端口上),则下一个更大的端口用于rtcp。

如果您为第二个流使用了一个端口,该命令可以正常工作,该端口尚未从其他流中使用(如rtcp)。

ffmpeg -i rtp://127.0.0.1:5004?listen -i rtp://127.0.0.1:5006?listen -filter_complex amerge -ac 2 -c 2 -c:a libmp3lame -q:a 4 output.mp3

如果您想对原始音频执行相同操作,则可能会出现如下错误:

Unable to receive RTP payload type 96 without an SDP file describing it. 

要解决此问题,您必须使用rtp有效内容类型,编解码器和采样率创建sdp文件,并将它们用作ffmpeg输入。

SDP示例:

v=0
c=IN IP4 127.0.0.1
m=audio 2002 RTP/AVP 96
a=rtpmap:96 L16/16000

在FFmpeg中使用sdp文件作为输入:

ffmpeg -i a.sdp -i b.sdp -filter_complex ...