低延迟管道问题

存档自 BrainFrame 论坛。发布于 2021年4月21日。 11 条回复 · 997 次浏览 由英文原帖翻译成中文。 阅读原文

AOTU support

你好~:

使用下面的配置,我连接不上我的视频流……能请你们帮我看看吗?

  • 视频流地址
rtsp://***:***@192.168.2.252:554/h264
  • 管道字符串:
rtspsrc location="{url}" latency=0 ! rtph264depay name="buffer_src" ! decodebin ! videoconvert ! vidleo/x-raw,format=(string)BGR ! appsink name="main_sink"
  • 服务端日志:
http_proxy_1      | 192.168.3.15 - - [21/Apr/2021:02:12:03 +0000] "GET /api/alerts?stream_id=6&limit=100&offset=0 HTTP/1.1" 200 2 "-" "python-urllib3/1.26.2"
http_proxy_1      | 192.168.3.15 - - [21/Apr/2021:02:12:03 +0000] "GET /api/zone_alarms?stream_id=6 HTTP/1.1" 200 2 "-" "python-urllib3/1.26.2"
http_proxy_1      | 192.168.3.15 - - [21/Apr/2021:02:12:03 +0000] "GET /api/zones?stream_id=6 HTTP/1.1" 200 66 "-" "python-urllib3/1.26.2"
core_1            | ERROR:bf_streaming.url(rtsp://***:***@192.168.2.252:554/h264):Pipeline state is null. Restarting...
core_1            | WARNING:bf_streaming.url(rtsp://***:***@192.168.2.252:554/h264):Error message on pipeline for rtsp://***:***@192.168.2.252:554/h264: ../libs/gst/base/gstbasesrc.c(3127): gst_base_src_loop (): /GstPipeline:pipeline8/GstRTSPSrc:rtspsrc13/GstUDPSrc:udpsrc65:
core_1            | streaming stopped, reason not-linked (-1)
http_proxy_1      | 192.168.3.15 - - [21/Apr/2021:02:12:04 +0000] "GET /api/streams HTTP/1.1" 200 386 "-" "python-urllib3/1.26.2"
http_proxy_1      | 192.168.3.15 - - [21/Apr/2021:02:12:04 +0000] "GET /api/alerts?stream_id=6&limit=100&offset=0 HTTP/1.1" 200 2 "-" "python-urllib3/1.26.2"
http_proxy_1      | 192.168.3.15 - - [21/Apr/2021:02:12:04 +0000] "GET /api/zone_alarms?stream_id=6 HTTP/1.1" 200 2 "-" "python-urllib3/1.26.2"
AOTU support

你好 delpanz,欢迎来到论坛!

我看到你在使用自定义管道来降低延迟。管道看起来没有问题,所以也许是 RTSP 流输出的格式不是 BrainFrame 所期望的。不使用自定义管道时,这个视频流能正常连接吗?

我想,要诊断自定义管道的问题,我们需要更多日志。请在 /usr/local/share/brainframe/.env 新建一个文件(假设你是用 BrainFrame CLI 安装的),内容如下:

GST_DEBUG=3

然后,再次尝试用你的自定义管道创建视频流,并把新的日志发给我。希望这些日志能提供足够的信息来诊断问题。

AOTU support

其实,你的自定义管道里好像有个拼写错误。caps 过滤器 vidleo/x-raw,format=(string)BGR 应该是 video/x-raw,format=(string)BGR。下面是修正后的完整管道:

rtspsrc location="{url}" latency=0 ! rtph264depay name="buffer_src" ! decodebin ! videoconvert ! video/x-raw,format=(string)BGR ! appsink name="main_sink"
AOTU support

非常感谢,tyler:

把 rtph264depay 改成 rtph265depay 就修复了。
但很遗憾,似乎没有效果,延迟仍然有 5 秒……

AOTU support

能否把 Tyler 建议的 GST_DEBUG=3 设置后的日志发来?也许用的是 TCP 而不是 UDP。日志会很有帮助!:smiley:

AOTU support

你好 alex:

这是我设置了 GST_DEBUG=3 并用命令“brainframe compose logs -f ”得到的日志
请帮忙看看……非常感谢
bf_logs.txt (2.2 MB)

AOTU support

嗯,我在这些日志里没看到什么。

能否试着给 rtspsrc 加上协议?

rtspsrc location="{url}" latency=0 protocol=udp

我想这应该能强制使用 UDP。我很好奇这能否改善你的延迟。

AOTU support

好像没用……
我会重新安装 brainframe 再测试一次

AOTU support

你好 Alex:
把视频源的尺寸从 4k 降到 720P 之后,延迟变低了。
但仍然有 1 秒的延迟。

这是我的管道:

rtspsrc location="{url}" latency=0 protocol=udp ! rtph265depay name="buffer_src" ! decodebin ! videoconvert ! video/x-raw,format=(string)BGR ! appsink name="main_sink"

所以我猜 brainframe 服务端可能有某种缓冲。但我找不到关于这方面细节的文档。
如果你能告诉我们更多细节,我们将非常感激……

谢谢。

AOTU support

请问你的应用是什么?

BrainFrame(服务端)没有任何缓冲,但 BrainFrame 客户端有。客户端必须缓冲,直到收到服务端的推理结果,这样才能把帧与它们的检测框配对。即使服务端没有加载任何算法胶囊,客户端也会这样做。

AOTU support

rver.

你好 Alex,
我们的应用只是显示来自 IP 摄像头的视频,延迟约 2 秒。
感谢你分享的缓冲细节,对我们很有帮助。

谢谢。

AOTU support

明白了,谢谢你提供的信息。

你知道 BrainFrame 客户端其实是开源的吗?源代码在这里。显示视频和检测框的所有逻辑都在那个代码库里。为它打包并构建 snap 来分发修改后的版本也很容易。

如果你对此感兴趣,欢迎随时提问。

© 2026 Aotu 版权所有 · 网站隐私声明
Built on 2026-10-10 00:24:09 UTC