以下测试是通过一台笔记本电脑和一台运行 GStreamer 的服务器完成的。
\n我有一个非常基本的管道:
\n单连接
\naudio: 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我遇到了这个似乎相关的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 提供了用于音频视频同步的各种元素和机制,也许研究一下audiomixer和videomixer等元素,最明显的一个是检查 gstreamer 是否是最新的。
归档时间: |
|
查看次数: |
191 次 |
最近记录: |