错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源



我的环境信息:

  • 操作系统: 乌班图 18.04
  • 开放CV: 4.3.0
  • 库达:10.2
  • NVIDIA GPU: GEFORCE RTX 2060

安装opencv之前的cmake列表:

cmake -D CMAKE_BUILD_TYPE=释放
-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=开
-D ENABLE_FAST_MATH=开
-D NVCUVID_FAST_MATH=开
-D CUDA_FAST_MATH=开
-D WITH_CUBLAS=开
-D

BUILD_opencv_java=关
-DBUILD_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=ON
-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,工作正常没有问题。我尝试了此示例,以便能够使用 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' 的实例后调用终止
what((: OpenCV(4.3.0(/home/yongatek02/opencv_contrib/modules/cudacodec/src/video_decoder.cpp:101: 错误:(-210:不支持的格式或格式组合(视频 "创建"功能中的硬件视频解码器不支持源

已中止(核心已转储(

我还尝试使用一些不同类型的格式,例如YUV,MP4,webm等,但错误仍然相同。

我在这里错过了什么?

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

ffmpeg -i input.mp4 -an output.mp4

最新更新