添加音频源时 webrtcbin 视频延迟会增加

Kri*_*ris 5 gstreamer

以下测试是通过一台笔记本电脑和一台运行 GStreamer 的服务器完成的。

\n

我有一个非常基本的管道:

\n

单连接

\n
audio: no audio connection (don\'t send audio to the same endpoint)\nvideo: webrtcibin -> dec -> depay -> videoscale -> textoverlay -> tee -> compositor -> enc -> pay -> webrtcbin\n
Run Code Online (Sandbox Code Playgroud)\n

这里的玻璃到玻璃大约需要 170 毫秒,网络上的 RTT 为 40。这个很不错。

\n

双媒体连接

\n
// Connection 1\n\naudio: webrtcibin -> dec -> depay -> tee -> audiomixer -> enc -> webrtcbin\nvideo: webrtcibin -> dec -> depay -> videoscale -> textoverlay -> tee -> compositor -> enc -> pay ->  webrtcbin\n\n// audio and video cross over into each other\'s audiomixer and compositor elements\n\n// Connection 2\n\naudio: webrtcibin -> dec -> depay -> tee -> audiomixer -> enc -> pay ->  webrtcbin\nvideo: webrtcibin -> dec -> depay -> videoscale -> textoverlay -> tee -> compositor -> enc -> pay ->  webrtcbin\n
Run Code Online (Sandbox Code Playgroud)\n

由于某种原因,将音频/视频从每个连接相应的tee元素发送到相反的audiomixer/compositor会导致通常为空的队列webrtcbin很快填满。

\n

以这种方式聚合两个实时源时,我应该注意什么吗?

\n
\n

有关的

\n

我遇到了这个似乎相关的https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/1261 。

\n

似乎很多人都遇到了这样的问题:通过 WebRTCbin 发送音频和视频会比仅发送视频时产生更高的延迟。这与为什么我的单连接测试在没有音频连接时表现更好的原因是一致的。

\n

该线程的结果似乎是通过两个单独的 WebRTCbin 发送音频和视频是他们遇到的唯一解决方案。但 \xe2\x80\x99s 并不理想,因为我相信它可能会导致同步问题?

\n

长话短说

\n

为什么 WebRTCBin 在处理音频和视频时会产生极高的延迟(700 毫秒以上)(而只有视频的延迟很低 - 150 毫秒)?

\n

小智 0

处理音频和视频时延迟增加的原因通常与 WebRTCbin 元素内的同步机制和缓冲区管理有关。

如果管道具有两个媒体连接,其中音频和视频交叉到彼此的音频混合器和合成器元素中,则由于音频和视频流之间的同步问题,WebRTCbin 元素中的队列可能会快速填满。

您可以尝试更改缓冲区大小和配置,或者研究同步机制gstreamer 提供了用于音频视频同步的各种元素和机制,也许研究一下audiomixervideomixer等元素,最明显的一个是检查 gstreamer 是否是最新的。

  • 这个答案对我来说可能是 ChatGPT。我不太确定,但我有点怀疑它的准确性 (2认同)