Networking 使用ffmpeg录制/捕获不连续的音频流

Networking 使用ffmpeg录制/捕获不连续的音频流,networking,audio,ffmpeg,streaming,rtp,Networking,Audio,Ffmpeg,Streaming,Rtp,我想用ffmpeg录制音频流。问题是,这个流在我想要记录的整个时间跨度内都不可用。 我有一个设备,它从麦克风获取输入,对其进行编码并广播rtp流。可以通过按钮(或telnet命令)控制该设备启动和停止该流 所以基本上我想开始一个录音环节。如果rtp流可用,ffmpeg应捕获该rtp流。否则,应记录静音音频,当流再次可用时,应再次记录此流,依此类推 我怎样才能做到这一点?当我启动ffmpeg时,它总是在流结束时中止 目前,我的ffmpeg命令如下所示: ffmpeg-irtp://192.168.

我想用ffmpeg录制音频流。问题是,这个流在我想要记录的整个时间跨度内都不可用。
我有一个设备,它从麦克风获取输入,对其进行编码并广播rtp流。可以通过按钮(或telnet命令)控制该设备启动和停止该流

所以基本上我想开始一个录音环节。如果rtp流可用,ffmpeg应捕获该rtp流。否则,应记录静音音频,当流再次可用时,应再次记录此流,依此类推

我怎样才能做到这一点?当我启动ffmpeg时,它总是在流结束时中止

目前,我的ffmpeg命令如下所示:

ffmpeg-irtp://192.168.2.255:3131 out.wav


如果使用ffmpeg命令无法实现这一点,那么最好(或最简单)的方法是什么。

如果我理解正确,您希望在有音频时录制,而不是使用ffmpeg在静音时录制。请尝试以下操作:

ffmpeg -i rtp://192.168.2.255:3131 -af silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-30dB output-file.mp3
更多详细信息请参见:


希望能有所帮助。

如果我正确理解了问题,您希望在有音频时录制,而不是在有静音时使用ffmpeg录制。请尝试以下操作:

ffmpeg -i rtp://192.168.2.255:3131 -af silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-30dB output-file.mp3
更多详细信息请参见:


希望这能有所帮助。

您找到解决方案了吗?我有一个类似的问题。很抱歉回答得太晚了。我通过在C#程序中记录流解决了我的问题。我编写了一个类来解析rtp数据包,提取音频数据并将字节写入MemoryStream(如果流可用)。如果流不可用,我将值为0的字节写入此MemoryStream,表示静默(取决于音频格式)。您必须在1秒内写入的字节数应为:
SampleRate*(BitsPerSample/8)
谢谢,但这需要比我更多的技能:)@d03090您如何决定写入静默?我的意思是,如果出于某种原因,广播停止了,比如说2秒钟,ffmpeg没有录制静音,它只是等待来自源的新数据。“那么你怎么知道这条流是否可用呢?”卢克如我在上面的评论中所说。我现在在C#内解决了我的问题。遗憾的是,我仍然不知道如何与ffmpeg一起工作。你找到解决方案了吗?我有一个类似的问题。很抱歉回答得太晚了。我通过在C#程序中记录流解决了我的问题。我编写了一个类来解析rtp数据包,提取音频数据并将字节写入MemoryStream(如果流可用)。如果流不可用,我将值为0的字节写入此MemoryStream,表示静默(取决于音频格式)。您必须在1秒内写入的字节数应为:
SampleRate*(BitsPerSample/8)
谢谢,但这需要比我更多的技能:)@d03090您如何决定写入静默?我的意思是,如果出于某种原因,广播停止了,比如说2秒钟,ffmpeg没有录制静音,它只是等待来自源的新数据。“那么你怎么知道这条流是否可用呢?”卢克如我在上面的评论中所说。我现在在C#内解决了我的问题。遗憾的是,我仍然不知道这如何与ffmpeg一起工作。我想在rtp流不可用时录制无声的音频数据。e、 g.rtp流可用5秒,然后离线3秒,然后恢复在线10秒。我的目标是现在有一个18秒长的连续音频文件,其中包含3秒的静默。我想在rtp流不可用期间记录静默音频数据。e、 g.rtp流可用5秒,然后离线3秒,然后恢复在线10秒。我的目标是现在有一个18秒长的连续音频文件,其中包含3秒的静音。