Reputation: 675
I have an IP camera streaming on Linux through rtsp protocol and h264 linux driver. I am able to see the video in VLC with the following address and port:
rtsp://192.168.1.2:8080/out.h264
However if I try to get the same video for OpenCV processing in Python 2.7.5 (MacOS X 10.9):
import cv
video = cv.CaptureFromFile('rtsp://192.168.1.2:8080/out.h264')
I get the following error:
WARNING: Couldn't read movie file rtsp://192.168.1.2:8080/out.h264
It seems something rather simple, but I am stuck on it. Thanks.
Upvotes: 32
Views: 122474
Reputation: 1
I use Python on OpenCV 2 under Linux. The following works for me.
cap = cv2.VideoCapture('rtsp://' + str(s_count) + '@' + str(s_URL) + ':' + str(i_rtsp_port) + '/' + str(i_rtsp_stream))
If you do not mind, you can visit the sample code here.
Upvotes: 0
Reputation: 405
struggled for a while on this...
finally this got it going for me.
On Android
Install: https://play.google.com/store/apps/details?id=com.miv.rtspcamera
Start rtsp server on android
On PC, create python script
import cv2
import numpy as npimport os
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;udp"
vcap = cv2.VideoCapture("rtsp://192.168.1.2:5554/camera", cv2.CAP_FFMPEG)
while(1):
ret, frame = vcap.read()
if ret == False:
print("Frame is empty")
break;
else:
cv2.imshow('VIDEO', frame)
cv2.waitKey(1)
Change “192.168.1.2” to your android device address.
Run python script
Upvotes: 9
Reputation: 91
Somehow by default, as I knew, OpenCV used TCP protocol for transporting. Then, if your streaming is using UDP protocol, then you must define the environ option by the following code:
import os
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;udp"
cam = cv2.VideoCapture("rtsp://YOUR_STREAMING_IP_ADDRESS:PORT/foo.sdp", cv2.CAP_FFMPEG)
You also need check if your openCV2 build comes with FFMPEG (RTSP) or not as Solar.gy 's anwser, if not, you must rebuild and install openCV with FFMPEG.
python -c "import cv2; print(cv2.getBuildInformation())"
Upvotes: 6
Reputation: 1197
OpenCV relies on ffmpeg or other video backends for handling video formats and IP camera protocols. Depending on your platform and how you installed OpenCV, you may not have any support for rtsp.
You can check video backend support for your OpenCV installation:
python -c "import cv2; print(cv2.getBuildInformation())"
Video I/O:
DC1394 1.x: NO
DC1394 2.x: NO
FFMPEG: NO
avcodec: NO
avformat: NO
avutil: NO
swscale: NO
avresample: NO
GStreamer: NO
OpenNI: NO
OpenNI PrimeSensor Modules: NO
OpenNI2: NO
PvAPI: NO
GigEVisionSDK: NO
Aravis SDK: NO
UniCap: NO
UniCap ucil: NO
V4L/V4L2: NO/NO
XIMEA: NO
Xine: NO
gPhoto2: NO
Upvotes: 21
Reputation: 506
this works for me (using opencv 2.4.9):
vcap = cv.VideoCapture("rtsp://192.168.1.2:8080/out.h264")
while(1):
ret, frame = vcap.read()
cv.imshow('VIDEO', frame)
cv.waitKey(1)
Upvotes: 33