我想用以下命令合并两个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
返回错误bind failed: error number -10048 occurred rtp://127.0.0.1:5005?I/O error
在我尝试这个之前,我首先尝试用以下命令合并两个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
有没有人知道两个rtp流如何被捕获,合并并写入ffmpeg中的mp3文件?还是像2012年那样只支持一个rtp流?
上面命令的一个问题是端口号。如果在一个端口上接收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
使用sdp文件作为FFmpeg的输入:
ffmpeg -i a.sdp -i b.sdp -filter_complex ...