ffmpeg - 通过 RTP 传输音频时出现抖动

ffmpeg - 通过 RTP 传输音频时出现抖动

因此,作为免责声明,我正在尝试使用 ffmpeg 做一些可能已经达到极限的事情。但是,即使这是不可能的,我也想了解原因。

我想要做的只是通过 RTP 传输 PCM 音频(16 位、单声道、48Khz),音频帧为 4ms(基本上是每帧 192 个样本),抖动尽可能小。

这是我目前正在使用的配置:

ffmpeg \
    -re \
    -i ../input.mov \
    -acodec pcm_s16le \
    -vn \
    -ac 1 \
    -af "aresample=48000,asetnsamples=n=192:p=0" \
    -f rtp \
    -payload_type 119 \
    "rtp://127.0.0.1:3333"

乍一看,结果非常令人信服,我得到了 428 个数据包,每个数据包携带 192 个单声道样本,太棒了。

但使用 Wireshark,我发现我的平均抖动约为 7ms。更有趣的是,我发现这个抖动主要是由每 6 个数据包中的 1 个引起的,显示高的接收延迟:

在此处输入图片描述

我对 ffmpeg 内部机制没有深入的了解,但我猜这可能是 RTP 复用器加载下一批 AVPackets 所花费的时间?我注意到,增加nasetnsamples 中的值会增加具有可接受延迟的数据包的数量,但会增加坏数据包的延迟。

有人对这种行为有实际解释吗?还有其他方法可以优化我的抖动吗?

谢谢!

相关内容