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

标签 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

哪个返回错误 bind failed: Error number -10048 发生 rtp://127.0.0.1:5005?listen: 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

有谁知道如何在 ffmpeg 中抓取、合并和写入 mp3 文件中的两个 rtp 流?还是像 2012 年那样只支持一个 rtp 流?

最佳答案

上面命令的一个问题是端口号。如果您在某个端口(通常在大于 1024 的偶数端口)上接收 rtp,则下一个更大的端口用于 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 ...

关于ffmpeg - 如何在 ffmpeg 中合并两个输入 rtp 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39411901/

相关文章:

node.js - 流利的 ffmpeg 模块 : "end" event does not fire

ffmpeg - 如何从捕获设备捕获带有音频的简单视频输入

c# - 提高流式传输大型 (1-10 GB) 文件的速度 .Net Core

video - 不支持的 CodecID V_MPEGH/ISO/HEVC ffmpeg Centos 6.8

html - Safari 9.0 无法播放存储服务器上的mp4视频

c++ - 如何在 Windows 中的 bash 进程之间传输大量数据?

c# - 使用 Orleans 的相同 Grain 接口(interface)的多个实现

javascript - 是否可以使用 ICE 直接连接,然后在 WebRTC 中直接进行点对点信令?

android - 通过udp实现VOIP,当播放器无法应对接收数据包的速度时采取什么方法

streaming - 流媒体服务器中的 RTP 或 RTSP 有什么区别?