Изменение конвейера 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-камерами!
Приветствия.