Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cv::cudacodec::VideoReader无法播放rtsp流_C++_Opencv_Ffmpeg - Fatal编程技术网

C++ cv::cudacodec::VideoReader无法播放rtsp流

C++ cv::cudacodec::VideoReader无法播放rtsp流,c++,opencv,ffmpeg,C++,Opencv,Ffmpeg,系统信息 OpenCV=>3.3.0 操作系统/平台=>Ubuntu 16.04,x86_64 编译器=>gcc版本5.4.1 20160904 Cuda=>8.0 Nvidia卡=>GTX 1080 Ti ffmpeg详细信息 libavutil 55。74.100 / 55. 74.100 libavcodec 57.103.100/57.103.100 libav57格式。77.100 / 57. 77.100 libav57设备。7.101 / 57. 7.101 libavfil

系统信息

  • OpenCV=>3.3.0
  • 操作系统/平台=>Ubuntu 16.04,x86_64
  • 编译器=>gcc版本5.4.1 20160904
  • Cuda=>8.0
  • Nvidia卡=>GTX 1080 Ti
  • ffmpeg详细信息
    • libavutil 55。74.100 / 55. 74.100
    • libavcodec 57.103.100/57.103.100
    • libav57格式。77.100 / 57. 77.100
    • libav57设备。7.101 / 57. 7.101
    • libavfilter 6.100.100/6.100.100
    • libsw4。7.103 / 4. 7.103
    • libswresample2。8.100 / 2. 8.100
详细说明

我正在尝试使用
cudacodec::VideoReader

Rtsp流详细信息(来自vlc)

此流在vlc和
cv::VideoCapture
中播放效果很好,但当我尝试在
cudacodec::VideoReader
中播放时,我收到一个错误,错误如下所示:

OpenCV错误:在CuvidVideoSource、FILE/home/deep/Development/libraries/OpenCV/OpenCV/modules/cudacodec/src/cuvideou-source.cpp的第66行中,Gpu API调用(CUDA\u-Error\u-FILE\u-NOT\u-FOUND[code=301])

OpenCV错误:在FFmpegVideoSource,file/home/deep/Development/libraries/OpenCV/OpenCV/modules/cudacodec/src/FFMPEG\u video\u source.cpp,第101行,断言失败(init\u MediaStream\u FFMPEG()

复制步骤

#include <iostream>
#include "opencv2/opencv_modules.hpp"

#if defined(HAVE_OPENCV_CUDACODEC)

#include <opencv2/core.hpp>
#include <opencv2/cudacodec.hpp>
#include <opencv2/highgui.hpp>

int main(int argc, const char* argv[])
{
    const std::string fname = "rtsp://admin:admin@192.168.1.13/media/video2";

    cv::namedWindow("GPU", cv::WINDOW_NORMAL);

    cv::cuda::GpuMat d_frame;
    cv::Ptr<cv::cudacodec::VideoReader> d_reader = cv::cudacodec::createVideoReader(fname);

    for (;;)
    {

        if (!d_reader->nextFrame(d_frame))
            break;

        cv::Mat frame;
        d_frame.download(frame);
        cv::imshow("GPU", frame);

        if (cv::waitKey(3) > 0)
            break;
    }
    return 0;
}

#else
int main()
{
    std::cout << "OpenCV was built without CUDA Video decoding support\n" << std::endl;
    return 0;
}
#endif
更新:

我已经解决了这个问题

在提供的解决方案中,问题与ffmpeg检测到的像素格式有关

为了检查您的rtsp像素格式,您可以使用。 然后在你的图像中,你应该添加与你的像素格式相关的案例,比如

case AV_PIX_FMT_YUV420P:
case AV_PIX_FMT_YUVJ420P:
    *chroma_format = ::VideoChromaFormat_YUV420;
     break;

然后重建opencv。

欢迎链接到解决方案,但请确保没有它时您的答案是有用的:这样您的其他用户就会知道它是什么以及为什么存在,然后引用您链接到的页面的最相关部分,以防目标页面不可用@安德烈:是的,我解决了。你链接的帖子实际上是我的,我忘了更新stackoverflow上的解决方案。
case AV_PIX_FMT_YUV420P:
case AV_PIX_FMT_YUVJ420P:
    *chroma_format = ::VideoChromaFormat_YUV420;
     break;