Linuxでrtspプロトコルとh264 linuxドライバを介してIPカメラストリーミングを行っています。次のアドレスとポートでビデオをVLCで見ることができます。
rtsp://192.168.1.2:8080/out.h264
ただし、Python 2.7.5(MacOS X 10.9))でOpenCV処理用に同じビデオを取得しようとすると、次のようになります。
import cv
video = cv.CaptureFromFile('rtsp://192.168.1.2:8080/out.h264')
次のエラーが発生します。
WARNING: Couldn't read movie file rtsp://192.168.1.2:8080/out.h264
かなりシンプルに見えますが、行き詰まっています。ありがとう。
これは私のために動作します(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)
OpenCVは、ビデオ形式とIPカメラプロトコルの処理をffmpegまたは他のビデオバックエンドに依存しています。プラットフォームとOpenCVのインストール方法によっては、rtspをサポートしていない場合があります。
OpenCVインストールのビデオバックエンドサポートを確認できます。
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
これでしばらく苦労しました...
最後に this うまくいきました。
どういうわけか、私が知っているように、OpenCVはデフォルトでトランスポートにTCP=プロトコルを使用しました。次に、ストリーミングがUDPプロトコルを使用している場合、次のコードで環境オプションを定義する必要があります。
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)
OpenCV2ビルドがFFMPEG(RTSP)に付属しているかどうかを確認する必要もあります。Solar.gyのアンサーとして、付属していない場合は、FFMPEGでopenCVを再ビルドしてインストールする必要があります。
python -c "import cv2; print(cv2.getBuildInformation())"