我可以使用以下代码成功捕获网络摄像机的帧:
os.system("C:/Python37/ffmpeg/bin/ffmpeg.exe -i rtsp://admin:[email protected]:554/onvif1 -codec copy -f mpegts udp://127.0.0.1:3000 &")
问题是我只是不知道如何在Opencv上使用这些框架,因为当我运行上面的代码时,没有其他(之后)运行。就像一个循环。
没有gstreamer,有没有办法在Opencv上使用此转换后的流?
我相信,由于缺少gstreamer,我不能直接将RTSP地址直接传递给Opencv-永远行不通。
PS:我已经尽一切努力使Windows 8.1上的gstreamer-完全没有成功。
通过设置以下环境变量,我能够使用Python中的OpenCV 4.0.0(使用FFMPEG构建)解决打开RTSP流的问题:
import os
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;udp"
FFMPEG默认为TCP传输,但是某些RTSP提要是UDP,因此这为FFMPEG设置了正确的模式。
然后使用:
cv2.VideoCapture(<stream URI>, cv2.CAP_FFMPEG)
ret, frame = cap.read()
while ret:
cv2.imshow('frame', frame)
# do other processing on frame...
ret, frame = cap.read()
if (cv2.waitKey(1) & 0xFF == ord('q')):
break
cap.release()
cv2.destroyAllWindows()
照常。