带有 Gstreamer 流的 OpenCV 具有延迟、缓慢和伪影

Posted

技术标签:

【中文标题】带有 Gstreamer 流的 OpenCV 具有延迟、缓慢和伪影【英文标题】:OpenCV with Gstreamer streams with delay, slow and artifacts 【发布时间】:2019-08-26 14:04:37 【问题描述】:

使用 OpenCV 的 gstreamer 管道存在延迟。我想读取 rtsp 流,获取帧,修改它们,然后在新的 rtsp/tcp/udp 流中输出。

延迟 results 在 opencv 中产生我的管道:

下面的代码读取 rtsp 流并输出到 tcp 这些帧。但是 OpenCV 在流式传输 rtsp 相机示例以及使用 videotestsrc 时给了我延迟。有人可以帮助并解释如何处理我的管道以使其尽快工作吗?

我想获得与 gst-launch 相比的速度。与 OpenCV 相比,使用 gst-launch 没有延迟和减慢的伪影

gst-launch-1.0 -v rtspsrc location=rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa ! decodebin ! videoconvert ! x264enc ! mpegtsmux ! tcpserversink  port=8554 host=0.0.0.0

P.S 这是我可以使用免费 rtsp 相机获得的唯一一个工作管道。顺便说一句,我无法流入 rtsp,只能流入 tcp


import cv2
import time

cap = cv2.VideoCapture('rtspsrc location=rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa ! decodebin ! videoconvert ! appsink', cv2.CAP_GSTREAMER)
f_width = int(cap.get(3))
f_height = int(cap.get(4))
f_fps = int(cap.get(5))
print(f_width, f_height, f_fps)

out = cv2.VideoWriter('appsrc ! videoconvert ! x264enc ! mpegtsmux ! tcpserversink  port=8554 host=0.0.0.0', cv2.CAP_GSTREAMER,0, 20, (f_width,f_height), True)

while cap.isOpened():
  read_start = time.time()
  ret, frame = cap.read()
  read_end = time.time() - read_start
  print('read:', read_end)
  print(ret)
  if ret:
    out_start = time.time()
    out.write(frame)
    out_wtite = time.time() - out_start
    print('write', out_wtite)

  print('-'*10)

cap.release()
out.release()

我的电脑上的上限读写速度结果。

----------
read: 0.06638693809509277
write 0.00010824203491210938
----------
read: 0.06541061401367188
write 0.00011515617370605469
----------
read: 0.06638312339782715
write 0.00010037422180175781
----------
read: 0.06667900085449219
write 0.00010275840759277344
----------
read: 0.066192626953125
write 0.00012063980102539062
----------
read: 0.06572628021240234
write 9.441375732421875e-05
----------
read: 0.0661618709564209
write 0.00011110305786132812

感谢您的任何帮助和建议。

【问题讨论】:

【参考方案1】:

我找到了解决方案:只需最小化 x264enc 比特率并最小化写入 fps,所有这些都可以作为一种魅力。相信它会帮助某人

【讨论】:

可以分享一下代码吗?我不知道你的意思,我也有同样的问题。提前致谢

以上是关于带有 Gstreamer 流的 OpenCV 具有延迟、缓慢和伪影的主要内容,如果未能解决你的问题,请参考以下文章

来自 RTSP 流的 gstreamer,更改分辨率

如何结合gstreamer和opencv?

从 python 中的 opencv 写入 Gstreamer 管道

gstreamer分析-rtp流的接收

如何将 opencv mat 写入 gstreamer 管道?

Gstreamer 的 OpenCV 3.0.0 错误