32

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.

5 Answers 5

33

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)
Sign up to request clarification or add additional context in comments.

5 Comments

This doesn't work for opencv 3, as I get the same error as Guadancil11
This did work for me using opencv 3.1.0 and python3.4
Worked for me. Python 2.7, opencv 3.3
Worked on 2.x but needed some changes: import cv2 import numpy as np #This code shows only 1 frame. vcap = cv2.VideoCapture("rtsp://cam:554/ch0_0.h264") while(1): ret, frame = vcap.read() cv2.imshow('VIDEO', frame) cv2.waitKey(0)
@ChopLabalagun Your code works on 3.x even without numpy
21

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

5 Comments

Which one indicates RTSP support?
To my knowledge, (if it is still needed), FFMPEG should indicate rtsp support, as it shows NO, one should have ffmpeg
To anyone in the future: I had to put opencv_ffmpeg310.dll into my working directory. Otherwise the VideoCapture basically just failed silently.
My Raspberry PI 3 with OPENCV 4.5.1 FFMPEG is NO. So, how to solve the issue.
@ZinMin install ffmpeg before build opencv
9

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

Comments

6

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())"

3 Comments

This bit of voodoo solved my problem. Without it: [ERROR:0] global /io/opencv/modules/videoio/src/cap.cpp (116) open VIDEOIO(CV_IMAGES): raised OpenCV exception: OpenCV(4.2.0) /io/opencv/modules/videoio/src/cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): rtsp://rpi3bp5.cosi.com:8080/ in function 'icvExtractPattern'
Maybe it is just an internal error message, it can be ignored if nothing strange happens with your video/image result?
The process dies after issuing that message. But as indicated, it's behind me. Thanks.
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.