来自RPi的流,保存到Jetson(Gstreamer Opencv Python)

时间:2018-01-29 18:04:43

标签: python opencv raspberry-pi gstreamer python-gstreamer

更新:我有一个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行中有效。有什么想法让这个脚本有效吗?

非常感谢任何帮助!

0 个答案:

没有答案