Ffmpeg:通过 RTP 流式传输时音频断断续续。音频和视频同步问题

Ffmpeg:通过 RTP 流式传输时音频断断续续。音频和视频同步问题

我正在尝试通过两个单独的 RTP 通道传输视频和音频,然后通过 webRTC 在客户端上检索和播放它们,并同步播放它们。我能够在 webRTC 客户端上检索数据包,但音频非常不连贯。我的系统如下:

  • Ubuntu 20.04
  • Ffmpeg 4.2.2
  • 16 GB 内存
  • 6 核 Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz

以下是我运行的命令。

ffmpeg \
-f x11grab -video_size 1280x720 -i :20.0 \
-f pulse -ac 2 -i default \

-c:v libx264 -copyts -an -r 30 -maxrate 2000k -minrate 1000k -b:v 1500k \
-bufsize 500k -tune zerolatency -preset veryfast -pix_fmt yuv420p \
-payload_type 101 -ssrc 22222222 -pkt_size 1000 -f rtp rtp://127.0.0.1:5004 \

-c:a libopus -vn -ar 48000 -b:a 48k \
-payload_type 102 -ssrc 11111111 -pkt_size 1000 -f rtp rtp://127.0.0.1:5008

进一步调查后,我意识到 RTP 流音频本身存在卡顿。命令如下:

ffmpeg \
-f pulse -ac 2 -i default \
-c:a libopus -ar 48000 -b:a 48k -ac 2 -payload_type 102 \
-ssrc 11111111 -pkt_size 1000 -f rtp rtp://127.0.0.1:5008

我的发现

在以下情况下,播放 YouTube 视频、录制音频并将其发送到另一台计算机上的浏览器(通过 webRTC)。

  1. 第一次播放时音频听起来非常失真,需要 2 到 3 秒才能恢复正常。
  2. 暂停并再次播放视频,不会导致任何声音失真。
  3. 大约 20 秒后恢复视频会导致音频失真 2-3 秒,然后恢复正常。
  4. 更改 YouTube 视频总是会导致音频失真(持续 2-3 秒)。

这是我在三个不同的 YouTube 视频中跳转的录音。您可以听到我所描述的问题,特别是音频卡顿、失真和启动时的延迟:https://streamable.com/xz0uq8

Ffmpeg 日志

当 YouTube 视频暂停约 20 秒以上时,我会看到类似这样的日志。我看到一大串这样的非单数 DTS 消息然后恢复正常。当视频连续播放时,我没有遇到任何卡顿,也没有看到任何消息。

    Last message repeated 1 times
[rtp @ 0x55ba5d0219c0] Non-monotonous DTS in output stream 1:0; previous: 76391534506976, current: 76391534506064; changing to 76391534506976. This may result in incorrect timestamps in the output file.

[rtp @ 0x55ba5d0219c0] Non-monotonous DTS in output stream 1:0; previous: 76391534506976, current: 76391534506652; changing to 76391534506976. This may result in incorrect timestamps in the output file.

[libopus @ 0x55ba5d044640] Queue input is backward in time

[rtp @ 0x55ba5d0219c0] Non-monotonous DTS in output stream 1:0; previous: 76391534513260, current: 76391534512685; changing to 76391534513260. This may result in incorrect timestamps in the output file.

[libopus @ 0x55ba5d044640] Queue input is backward in time

frame=78361 fps= 30 q=0.0 size=   78742kB time=442080:38:22.83 bitrate=   0.0kbits/s dup=334 drop=333 speed=6.1e+05x    
[libopus @ 0x55ba5d044640] Queue input is backward in time

    Last message repeated 1 times
frame=78377 fps= 30 q=0.0 size=   78745kB time=442080:38:23.30 bitrate=   0.0kbits/s dup=334 drop=333 speed=6.1e+05x    
frame=78392 fps= 30 q=0.0 size=   78746kB time=442080:38:23.80 bitrate=   0.0kbits/s dup=334 drop=333 speed=6.1e+05x    
frame=78406 fps= 30 q=0.0 size=   78748kB time=442080:38:24.30 bitrate=   0.0kbits/s dup=334 drop=333 speed=6.09e+05x 

我需要实现流畅的音频播放,并且不出现上述任何问题。有人知道可能发生了什么吗?谢谢。

相关内容