【问题标题】:error: (-210:Unsupported format or combination of formats) Video source is not supported by hardware video decoder in function 'create'错误:(-210:不支持的格式或格式组合)“创建”函数中的硬件视频解码器不支持视频源
【发布时间】:2020-06-29 08:54:50
【问题描述】:

我的环境信息:

  • 操作系统:Ubuntu 18.04
  • OpenCV:4.3.0
  • CUDA:10.2
  • NVIDIA GPU:GEFORCE RTX 2060

安装opencv前我的cmake列表:

cmake -D CMAKE_BUILD_TYPE=RELEASE
-D CMAKE_INSTALL_PREFIX=/usr/local
-D INSTALL_C_EXAMPLES=ON
-D INSTALL_PYTHON_EXAMPLES=OFF
-D WITH_TBB=ON \ -D WITH_CUDA=ON
-D CUDA_GENERATION=图灵\-D BUILD_opencv_cudacodec=ON
-D ENABLE_FAST_MATH=ON
-D NVCUVID_FAST_MATH=ON
-D CUDA_FAST_MATH=ON
-D WITH_CUBLAS=ON
-D BUILD_opencv_java=OFF
-D BUILD_ZLIB=ON
-D BUILD_TIFF=ON
-D WITH_GTK=ON
-D WITH_NVCUVID=ON
-D WITH_FFMPEG=ON
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2
-D WITH_1394=开启
-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include
-D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.7.6.5
-D OPENCV_GENERATE_PKGCONFIG=ON
-D OPENCV_PC_FILE_NAME=opencv4.pc
-D OPENCV_ENABLE_NONFREE=ON
-D WITH_GSTREAMER=ON
-D WITH_V4L=ON
-D OPENCV_PYTHON3_INSTALL_PATH=$cwd/OpenCV-4.3.0-py3/lib/python3.5/site-packages
-D WITH_QT=ON
-D WITH_CUDNN=ON
-D OPENCV_DNN_CUDA=ON
-D WITH_OPENGL=ON
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules
-D BUILD_EXAMPLES=ON ..

Cmake后的一部分输出:

. .
--   Video I/O:
--     DC1394:                      YES (2.2.5)
--     FFMPEG:                      YES
--       avcodec:                   YES (57.107.100)
--       avformat:                  YES (57.83.100)
--       avutil:                    YES (55.78.100)
--       swscale:                   YES (4.8.100)
--       avresample:                YES (3.7.0)
--     GStreamer:                   YES (1.14.5)
--     v4l/v4l2:                    YES (linux/videodev2.h)
-- 
--   Parallel framework:            TBB (ver 2017.0 interface 9107)
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Intel IPP:                   2020.0.0 Gold [2020.0.0]
--            at:                   /home/yongatek02/opencv/build/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2020.0.0)
--               at:                /home/yongatek02/opencv/build/3rdparty/ippicv/ippicv_lnx/iw
--     Lapack:                      NO
--     Eigen:                       YES (ver 3.3.4)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.5.1)
-- 
--   NVIDIA CUDA:                   YES (ver 10.2, CUFFT CUBLAS NVCUVID FAST_MATH)
--     NVIDIA GPU arch:             75
--     NVIDIA PTX archs:
-- 
--   cuDNN:                         YES (ver 7.6.5)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/yongatek02/opencv/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load . .

我测试了简单的 cuda 示例和 OpenCV,并且工作正常没问题。我尝试this example 能够使用 GPU 解码我的 IP 摄像机流。它通过终端上的这个命令编译得很好:

g++ -std=c++11 codec.cpp `pkg-config --libs --cflags opencv4` -o output

这也是我的代码:

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

int main(int argc, const char* argv[])
{
    const std::string fname = "rtsp://usrname/ipadress..."; // Tried also different formats of videos such as YUV,mp4 webM

    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;
}

但是当我尝试运行它时,它给了我这个错误:

在抛出 'cv::Exception' 实例后调用终止
什么():OpenCV(4.3.0) /home/yongatek02/opencv_contrib/modules/cudacodec/src/video_decoder.cpp:101: 错误:(-210:不支持的格式或格式组合)视频 函数'create'中的硬件视频解码器不支持源

中止(核心转储)

我也尝试过使用一些不同类型的格式,如YUV、MP4、webm等,还是报错。

我在这里缺少什么?

【问题讨论】:

  • 你能在没有 CUDA 的情况下从 RTSP 读取流吗?
  • @farbiondriven 我可以通过 VideoCapture 或 VLC 读取,我也可以读取流和显示。
  • @talonmies 为什么你认为我的问题与 cuda 没有关系?
  • 好的,所以流本身一切正常。我的问题更多:您可以使用 opencv 本身而不是 cuda 读取流吗?我认为确实问题在于将流绑定到 CUDA 阅读器。
  • @farbiondriven 我可以使用一些带有 opencv 函数的示例,例如 cv::cuda::findcontours...。这意味着 cuda 安装正确。是的,没有 cuda,因为没有通过 cuda 上的视频捕获读取的选项。唯一的方法是使用 createVideoReader 但它也失败了。我不知道错误在哪里。我还安装了 NVIDIA Video Codec SDK 以便能够使用 NVCUVID。但仍然失败..

标签: c++ opencv ubuntu-18.04 nvidia


【解决方案1】:

我在本地磁盘上处理视频文件时遇到了同样的问题。原来,cudacodec 不支持其音轨的编解码器。我使用 ffmpeg 删除音轨,它工作正常。

ffmpeg -i input.mp4 -an output.mp4

但我不确定如何处理 rtsp 流

【讨论】:

    猜你喜欢
    • 2017-02-14
    • 2021-12-17
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多