VS2019+CMAKE+OPENCV 实现GPU加速视频解码(二)RTSP视频流

实现了本地视频文件的加速解码后,需要更进一步的实现RTSP视频流的GPU加速解码。

0.VLC

下载一个VLC media player,进行本地的视频串流,选择本地视频文件和本地IP。VS2019+CMAKE+OPENCV 实现GPU加速视频解码(二)RTSP视频流_第1张图片VS2019+CMAKE+OPENCV 实现GPU加速视频解码(二)RTSP视频流_第2张图片

 在端口号前面加上本地IP地址,设置好后再打开一个VLC看看能不能读取视频流。VS2019+CMAKE+OPENCV 实现GPU加速视频解码(二)RTSP视频流_第3张图片

 1.OpenCV配置

修改(一)中的视频解码程序,处理视频流,发现报错unsupported transport,发现还需要一些包没有安装。先安装gstreamer,发现编译不通过,还需要安装freetype和harfbuzz。教程如下:https://blog.csdn.net/Jay_Xio/article/details/115724624

 但是或许不需要这个功能,于是在cmake里把with freetype给去掉,编译试试。

#include 
#include 
using namespace std;
using namespace cv;
int main()
{
    VideoCapture cap;
    cap.open("rtsp://172.18.1.98:800/1stream");
    Mat Camera_CImg;
    if (!cap.isOpened())
        return 1024;
    while (1)
    {
        cap >> Camera_CImg;
 
        if (Camera_CImg.empty())
        {
            cout << "empty" << endl;
            break;
        }
     
        cout << "end1" << endl;
        imshow("input", Camera_CImg);
        cout << "end2" << endl;
        if (waitKey(10) > 0)
            break;
    }
    system("pause");
    return 0;
}

编译通过,代码可以运行,VideoCapture()也就是cpu,是可以读取RTSP视频流的,只是有点花屏。

之后再尝试gpu读取,用cudacodec解码。

const std::string fname("rtsp://172.18.1.98:8551/1stream");
    cv::cuda::setGlDevice();
    cv::cuda::GpuMat d_frame;
    cv::Ptr d_reader = cv::cudacodec::createVideoReader(fname);
    while(1)
    {
    if (!d_reader->nextFrame(d_frame))
            break;
        cv::Mat temp;
        d_frame.download(temp);
        cv::imshow("GPU", temp);
        if (cv::waitKey(10) > 0)
            break;
    } 

报错:

 createVideoReader()这个函数先调用ffmpeg_video_source之后又调用cuvid_video_source,暂时还不知道这两部分的关系。网上有人说cuvid_video_source不支持RTSP视频流,但是根据这个https://github.com/opencv/opencv/issues/9739,看起来这个代码应该是可以运行才对,这里面说是ffmpeg没有安装的原因,但是我已经用了opencv自动下载的ffmpeg库了。

VS2019+CMAKE+OPENCV 实现GPU加速视频解码(二)RTSP视频流_第4张图片

或许根本不用解决,我把RTSP换了个源就好了

rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

看来之前的cuvid_video_source格式确实不支持,这下换成上面这个就好了,测试之前先用VLC试一下看看能不能播放。

测试代码发现,GPU跑起来了。

至此,WINDOWS10下使用opencv硬解码RTSP视频流终于完成,下面再尝试使用Ubuntu系统

你可能感兴趣的:(opencv)