更新:我有一个rpi计算模块,使用cmd行成功gstreams视频。 Jetson机器也使用cmd线接收它(但不是python脚本!)
在RPi上:
raspivid -fps 15 -b 400000 -t 0 -n -w 640 -h 480 -o - | tee | gst-launch-1.0
-v fdsrc ! h264parse ! rtph264pay config-interval=1 ! udpsink
host=192.168.1.111 port=5000
在Jetson TX2 cmd行上我运行:
gst-launch-1.0 udpsrc port=5000 ! 'application/x-rtp, encoding-name=H264,
payload=96' ! rtph264depay ! h264parse ! avdec_h264 ! xvimagesink sync=false
从这里我可以看到Jetson桌面(ubuntu)上出现的gstreamer视频,所以它可以工作!
我创建了一个python脚本来打开一个cv2.cap和print语句让我知道事情的进展情况,我的真正目标是用框架做一些事情(cv2处理)。
import cv2
import numpy as np
print "start"
cap = cv2.VideoCapture("udpsrc port=5000 ! 'application/x-rtp, encoding-
name=H264, payload=96' ! rtph264depay ! h264parse ! avdec_h264 ! ! appsink",
cv2.CAP_GSTREAMER)
print "check1"
while(cap.isOpened()):
print "check2"
frame = cap.read()
cap.release()
cv2.destroyAllWindows()
我现在得到的是:
(python:3608): GStreamer-CRITICAL **: gst_element_make_from_uri: assertion
'gst_uri_is_valid (uri)' failed
OpenCV Error: Unspecified error (GStreamer: unable to start pipeline
) in cvCaptureFromCAM_GStreamer, file
/home/nvidia/opencv/modules/videoio/src/cap_gstreamer.cpp, line 881
VIDEOIO(cvCreateCapture_GStreamer (CV_CAP_GSTREAMER_FILE, filename)): raised
OpenCV exception:
/home/nvidia/opencv/modules/videoio/src/cap_gstreamer.cpp:881: error: (-2)
GStreamer: unable to start pipeline
in function cvCaptureFromCAM_GStreamer
我使用本地文件进行了测试,它可以正常工作(不断打印“循环”):
cap = cv2.VideoCapture("filesrc location=/home/nvidia/comp/grill-mjpeg.mov !
appsink", cv2.CAP_GSTREAMER)
这里唯一的区别是UDP vs本地文件和编码类型?但编码选项在cmd行中有效。有什么想法让这个脚本有效吗?
非常感谢任何帮助!