简体   繁体   中英

Changing gstreamer pipeline to opencv in python

I have successfully installed and built gstreamer on opencv. It says YES when i print(cv2.getBuildInformation()).

Gstreamer version: 1.14.0
opencv version: 3.4.5.20

Bumped into a wall for quite a while at the moment, was using the gstreamer pipeline. It works wonderfully.

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

This is the python script I've written for the gstreamer pipeline.

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()

I keep getting this error though, unable to troubleshoot what caused this.

gst_element_get_state: assertion 'GST_IS_ELEMENT (element)' failed

Update: Found the answer by Fixing the pipeline using rtspsrc instead of playbin.

Opencv's VideoCapture is not able to take autovideoconvert and autovideosink . A work around would be to use videoconvert and appsink when using rtspsrc but latency can't be adjusted. However, if you want to adjust the latency you will need to use decodebin to decode instead of avdec_h264

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

NB: Pipeline will work in the python script but may not work in the command line.

This is for RTSP with IP cameras!

Cheers.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM