Изменение конвейера gstreamer на opencv в python

Я успешно установил и собрал gstreamer на opencv. Это говорит ДА, когда я печатаю (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

Это сценарий Python, который я написал для конвейера gstreamer.

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

1 ответ

Решение

Обновление: нашел ответ, исправив конвейер, используя rtspsrc вместо playbin.

OpenCV VideoCapture не может принять autovideoconvert а также autovideosink, Обходной путь будет использовать videoconvert а также appsink при использовании rtspsrc, но задержка не может быть отрегулирована. Однако, если вы хотите отрегулировать задержку, вам нужно использовать decodebin для декодирования вместо avdec_h264

например gst-launch-1.0 rtspsrc location://admin:password@192.168.1.65:554 latency=20 ! rtph264depay ! h264parse ! decodebin ! videoconvert ! appsink

Примечание: конвейер будет работать в скрипте Python, но может не работать в командной строке.

Это для RTSP с IP-камерами!

Приветствия.

Другие вопросы по тегам