使用 FFMPEG 填充原始音频 UDP 流的间隙

Using FFMPEG To Fill in Gaps of a Raw Audio UDP Stream

我有一个软件定义的无线电 (SDR),它从紧急服务中获取音频,并在软件的帮助下,使用 UDP 流式传输原始音频。音频是 PCM 签名的 16 位小端。 UDP 流也不是恒定的,只有在检测到音频时才会有数据。

我要解决的问题是我希望用无声或空音频填充录制音频中的空白。以下是我为解决此问题所做的一些尝试:

  1. ffmpeg -f s16le -ar 8000 -i udp://127.0.0.1:23456 -af aresample=async=1 -acodec libmp3lame - f rtp rtp://127.0.0.1:1234
  2. ffmpeg -re -f lavfi -i anullsrc -f s16le -ar 8000 -i udp://127.0.0.1:23456 -filter_complex amix=inputs=2:duration=first -acodec libmp3lame -f rtp rtp://127.0.0.1:1234

我想我的问题是关于解决这个问题的最佳方法以及是否可以使用 ffmpeg 来完成这个问题?

为了识别差距,ffmpeg 需要检查时间戳,但原始流没有任何时间戳。因此,解决方法是让 ffmpeg 在接收时将挂钟时间指定为时间戳。

ffmpeg -f s16le -sample_rate 8000 -use_wallclock_as_timestamps true -i udp://127.0.0.1:23456 -af aresample=async=1 -acodec libmp3lame -f rtp rtp://127.0.0.1:1234