我正在尝试使用gstreamer从opencv流式传输一些图像,但管道有一些问题。我对gstreamer和opencv基本上都是新手。我用gstreamer为一个树莓pi 3上的python3编译了opencv3.2。我有一个小的bash脚本,我和raspivid一起使用
raspivid -fps 25 -h 720 -w 1080 -vf -n -t 0 -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=192.168.1.27 port=5000
我想翻译这个管道,以便从opencv中使用它,并将我的算法处理的图像输入到其中。我做了一些研究,发现我可以将videoWriter与appsrc一起使用,而不是fdsrc,但是我得到了以下错误
GStreamer Plugin: Embedded video playback halted; module appsrc0 reported: Internal data flow error.
我想到的python脚本如下 进口cv2
cap = cv2.VideoCapture(0)
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('appsrc ! h264parse ! '
'rtph264pay config-interval=1 pt=96 ! '
'gdppay ! tcpserversink host=192.168.1.27 port=5000 ',
fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if ret:
frame = cv2.flip(frame, 0)
# write the flipped frame
out.write(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
管道中有错误吗?我不明白这个错误。我已经有了一个Python客户机,可以从bash管道读取数据,从延迟角度和消耗的资源来看,结果非常好。
我找到了解决办法,我希望这能帮助其他遇到同样问题的人。 管道布置错误,需要视频转换。 另一方面,延迟是非常相关的,但是将speed.preset设置为ultrafast解决了这个问题,即使没有太多的压缩,这是一个很好的折衷方案。这是我的解决办法。
相关问题 更多 >
编程相关推荐