ffmpeg 192kHz udp 原始音频流

ffmpeg 192kHz udp 原始音频流

如何通过 UDP 连接传输 192000kHz 的无损音频信号?

我想通过 UTP 在连接的网络上传输在 raspberry 4(hifiberry 屏蔽)上采样的 192kHz 信号。理想情况下,作为原始字节,因为我正在运行一个自定义程序,它读取原始输入流,然后对其进行处理。为了测试 Pi 部分,我尝试使用 ffmpeg 将数据保存在 PC 上作为 wav 文件,但我遇到了问题。

我在 Pi 上运行:ffmpeg -f alsa -acodec pcm_s32le -ar 192000 -i hw:3 -f s32le -ar 192000 -acodec pcm_s32le udp://192.168.0.10:9999

使用 Wireshark,我可以看到数据包是通过 UDP 发送的。在我运行的 PC 上:ffmpeg -i udp://192.168.0.10:9999 -f s32le -bitexact -acodec pcm_s32le -ar 192000 "test.wav"但这只会导致一条错误消息:处理输入时发现无效数据。

mpegts我之前尝试过的方法是使用s32le,但这似乎只有在采样率高达 48kHz 时才可用。

有没有办法通过 UDP 传输原始 192kHz 音频流?并且包含某种形式的标头,在提取和将接收到的字节转换为 32 位浮点数时我需要考虑这一点?

答案1

我找到了问题的答案。问题是,使用 ffmpeg 上的 hifiberry 以 192kHz 采样时存在帧丢失问题。这可能是由于缓冲区太小造成的,但 ffmpeg 不允许您配置 alsa 缓冲区。至少我不知道该怎么做。

解决方案是使用arecord对数据进行采样并将其直接导入 ffmpeg 以通过 udp 进行流式传输。这个问题我修改了给定的代码。对于我的应用程序,结果是:arecord -f S32_LE -r192000 -c2 -D hw:0 | ffmpeg -report -acodec pcm_s32le -i - -f f32le -ar 192000 -ac 2 -acodec pcm_f32le -flush_packets 0 udp://192.168.0.10:9999?pkt_size=4096

相关内容