使用 OpenCV 从IP摄像机捕获 RTSP 流

使用 OpenCV 从IP摄像机捕获 RTSP 流

大多数 IP 摄像机都支持实时流协议 (RTSP) 来控制音频和视频流。本教程提供了如何使用 OpenCV 和 Python 从 IP 摄像机捕获 RTSP 流的示例。

OpenCV 提供了VideoCapture允许从视频文件、图像序列、网络摄像头、IP 摄像机等捕获视频的类。要从 IP 摄像机捕获 RTSP 流,我们需要指定 RTSP URL 作为参数。由于 RTSP URL 未标准化,不同的网络摄像机制造商可能使用不同的 RTSP URL。许多制造商在其网站或用户手册上提供 RTSP URL。RTSP URL 通常由用户名、密码、摄像机IP 地址、端口号(默认RTSP 端口号为554)、流名称组成。

使用函数在窗口中显示捕获的帧imshow。可以通过按 ESC 键(表示为 ASCII 代码 27)关闭窗口。Reolink E1 Pro 相机已用于测试。

import cv2
import os

RTSP_URL = 'rtsp://user:pass@192.168.0.189:554/h264Preview_01_main'

os.environ['OPENCV_FFMPEG_CAPTURE_OPTIONS'] = 'rtsp_transport;udp'

cap = cv2.VideoCapture(RTSP_URL, cv2.CAP_FFMPEG)

if not cap.isOpened():
    print('Cannot open RTSP stream')
    exit(-1)

while True:
    _, frame = cap.read()
    cv2.imshow('RTSP stream', frame)

    if cv2.waitKey(1) == 27:
        break

cap.release()
cv2.destroyAllWindows()
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    const std::string RTSP_URL = "rtsp://user:pass@192.168.0.189:554/h264Preview_01_main";

#if WIN32
    _putenv_s("OPENCV_FFMPEG_CAPTURE_OPTIONS", "rtsp_transport;udp");
#else
    setenv("OPENCV_FFMPEG_CAPTURE_OPTIONS", "rtsp_transport;udp", 1);
#endif

    Mat frame;
    VideoCapture cap(RTSP_URL, CAP_FFMPEG);

    if (!cap.isOpened()) {
        std::cout << "Cannot open RTSP stream" << std::endl;

        return -1;
    }

    while (true) {
        cap >> frame;
        imshow("RTSP stream", frame);

        if (waitKey(1) == 27) {
            break;
        }
    }

    cap.release();
    destroyAllWindows();

    return 0;
}
package app;

import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio;

public class Main
{
    static { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

    public static void main(String[] args)
    {
        String RTSP_URL = "rtsp://user:pass@192.168.0.189:554/h264Preview_01_main";

        System.setProperty("OPENCV_FFMPEG_CAPTURE_OPTIONS", "rtsp_transport;udp");

        Mat frame = new Mat();
        VideoCapture cap = new VideoCapture(RTSP_URL, Videoio.CAP_FFMPEG);

        if (!cap.isOpened()) {
            System.out.println("Cannot open RTSP stream");
            System.exit(-1);
        }

        while (true) {
            cap.read(frame);
            HighGui.imshow("RTSP stream", frame);

            if (HighGui.waitKey(1) == 27) {
                break;
            }
        }

        cap.release();
        HighGui.destroyAllWindows();

        System.exit(0);
    }
}

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(1)

相关推荐

发表回复

登录后才能评论