当前位置:  开发笔记 > 编程语言 > 正文

opencv rtsp流协议

如何解决《opencvrtsp流协议》经验,为你挑选了0个好方法。

我想处理和显示从树莓派相机创建的网络rtsp流。我有以下代码:

#include 
#include 
#include 
#include 

int main(int argc, char** argv) {

    cv::VideoCapture * stream = new cv::VideoCapture("rtsp://192.168.55.151:8554/");
    if (!stream->isOpened()) return -1;

    cv::namedWindow("rtsp_stream", CV_WINDOW_AUTOSIZE);
    cv::Mat frame;

    while (true) {

        if (!stream->read(frame)) return -1;

        cv::imshow("rtsp_stream", frame);
        cv::waitKey(15);
    }

    return 1;
}

当流不存在时,执行此操作将导致:

[tcp @ 0xa12480] Connection to tcp://192.168.55.151:8554?timeout=0 failed: Connection refused

这意味着流尝试与tcp连接。流直播时,执行结果为:

 [rtsp @ 0xb07960] method SETUP failed: 461 Client error

从互联网研究中,我发现问题可能在于流使用udp。如果我将URL更改为:

"udp://192.168.55.151:8554/"

然后执行冻结 cv::VideoCapture("udp://192.168.55.151:8554/");

VLC能够打开rtsp流。据我所知,ffmpeg用于通过opencv解码流。当我跑步时:

ffmpeg -rtsp_transport udp -i rtsp://192.168.55.151:8554/ -t 5 test.mp4

流解码和保存成功。那么我如何在opencv代码中指定要作为udp的较低级别协议呢?还有另一种方法可以用opencv吗?

编辑:如果我更改ffmpeg命令以使用tcp,即:

ffmpeg -rtsp_transport tcp -i rtsp://192.168.55.151:8554/ -t 5 test.mp4

然后我得到与C ++代码相同的确切错误461客户端错误

编辑:当代码使用udp://链接时,冻结约15秒后,执行将返回错误

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有