带有 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 具有延迟、缓慢和伪影的主要内容,如果未能解决你的问题,请参考以下文章
从 python 中的 opencv 写入 Gstreamer 管道