0

我已经在 opencv 上成功安装并构建了 gstreamer。当我打印(cv2.getBuildInformation())时它说是。

Gstreamer version: 1.14.0
opencv version: 3.4.5.20

此刻撞墙了很长一段时间,正在使用gstreamer管道。它工作得很好。

gst-launch-1.0 -v playbin uri=rtsp://admin:password@192.168.1.65:554/Streaming/Channels/400 uridecodebin0::source::latency=10

这是我为 gstreamer 管道编写的 python 脚本。

import cv2
import numpy as np

pipe = '"rtspsrc location=\"rtsp://admin:password@192.168.1.65:554/Streaming/Channels/400" latency=10 ! appsink'

cap = cv2.VideoCapture(pipe)

if not cap.isOpened():
    print('VideoCapture not opened')
    exit(0)

while True:
    ret, frame = cap.read()

    if not ret:
        print('empty frame')
        break

    cv2.imshow('display', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
    cap.release()

cv2.destroyAllWindows()

虽然我不断收到此错误,但无法解决导致此问题的原因。

gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed
4

1 回答 1

1

更新:通过使用 rtspsrc 而不是 playbin 修复管道找到了答案。

Opencv 的 VideoCapture 无法获取autovideoconvertautovideosink. 一种解决方法是在使用videoconvertrtspsrcappsink但无法调整延迟时使用。但是,如果要调整延迟,则需要使用 decodebin 来解码而不是 avdec_h264

例如gst-launch-1.0 rtspsrc location://admin:password@192.168.1.65:554 latency=20 ! rtph264depay ! h264parse ! decodebin ! videoconvert ! appsink

注意:管道将在 python 脚本中工作,但可能无法在命令行中工作。

这适用于带有 IP 摄像机的 RTSP!

干杯。

于 2019-07-22T07:49:48.447 回答