在 python 中将 gstreamer 管道更改为 opencv
Changing gstreamer pipeline to opencv in python
我已经在 opencv 上成功安装并构建了 gstreamer。当我 print(cv2.getBuildInformation()).
时它说是
Gstreamer version: 1.14.0
opencv version: 3.4.5.20
暂时碰壁了好久,正在用gstreamer pipeline。效果非常好。
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
更新:通过使用 rtspsrc 而不是 playbin 修复管道找到了答案。
Opencv 的 VideoCapture 无法获取 autovideoconvert
和 autovideosink
。解决方法是在使用 rtspsrc 时使用 videoconvert
和 appsink
,但无法调整延迟。但是,如果你想调整延迟,你需要使用 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!
干杯。
我已经在 opencv 上成功安装并构建了 gstreamer。当我 print(cv2.getBuildInformation()).
时它说是Gstreamer version: 1.14.0
opencv version: 3.4.5.20
暂时碰壁了好久,正在用gstreamer pipeline。效果非常好。
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
更新:通过使用 rtspsrc 而不是 playbin 修复管道找到了答案。
Opencv 的 VideoCapture 无法获取 autovideoconvert
和 autovideosink
。解决方法是在使用 rtspsrc 时使用 videoconvert
和 appsink
,但无法调整延迟。但是,如果你想调整延迟,你需要使用 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!
干杯。