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

Audio 使用FFMPEG填充原始音频UDP流的间隙,audio,ffmpeg,stream,vlc,audio-streaming,Audio,Ffmpeg,Stream,Vlc,Audio Streaming,我有一个软件无线电(SDR),它从紧急服务中接收音频,并在软件的帮助下,使用UDP传输原始音频。音频是PCM签名的16位little endian。UDP流也不是恒定的,只有在检测到音频时才有数据 我试图解决的问题是,我希望录制的音频中的空白被静音或空音频填充。以下是我解决这一问题的几次尝试: ffmpeg-f s16le-ar 8000-iudp://127.0.0.1:23456 -af aresample=async=1-acodec libmp3lame- f rtprtp://127.

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

我试图解决的问题是,我希望录制的音频中的空白被静音或空音频填充。以下是我解决这一问题的几次尝试:

  • ffmpeg-f s16le-ar 8000-iudp://127.0.0.1:23456 -af aresample=async=1-acodec libmp3lame- f rtprtp://127.0.0.1:1234
  • ffmpeg-re-f lavfi-i anullsrc-f s16le-ar 8000-iudp://127.0.0.1:23456 -过滤复合物 amix=输入=2:持续时间=第一次-acodec libmp3lame-f rtprtp://127.0.0.1:1234

  • 我想我的问题是关于解决这个问题的最佳方法,以及ffmpeg是否可以用来实现这一点?

    为了确定差距,ffmpeg需要检查时间戳,但原始流没有时间戳。因此,解决方法是ffmpeg在接收时将wallclock时间指定为时间戳

    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
    

    谢谢,这正是我想要的。在花更多的时间使用这种方法后,我注意到它会降低音频质量,并导致频繁的微口吃。音频更加清晰,没有时间戳和采样部分。这个问题可以解决吗?再次感谢你的帮助!我可以通过调整min_hard_comp标志的值来纠正我之前的评论中提到的问题。@wallace I有类似的情况:Opus音频从按键通话软件中捕获,然后解码到f32be原始PCM,并通过STDIN输入ffmpeg/ffplay。PCM音频可能包含巨大的间隙(只有当有人说话时才会出现),而ffplay在出现较大间隙后停止产生声音。上述解决方案仅在间隙非常小的情况下对我有效。调试日志显示,它不会在间隙发生时插入静默,而是在间隙结束时开始计算并插入静默。这将导致在刚消除间隙后的前30-40秒音频。有什么线索吗?感谢过滤器以帧为基础运行。aresample只知道在接收到下一帧并计算与前一帧的间隔时,它必须插入间隙。