Opencv 实现GPU解码
最近一直关注使用GPU解码视频方面的工作。OpenCV已经实现了GPU解码的功能,本文将介绍一下如何使用OpenCV进行GPU解码,可能遇到的BUGs和解码速度分析。
实验环境:Ubuntu 16.04, Nvidia K40, CUDA 9.0, OpenCV 3.4, FFmepg 3.3.1, Intel E5-2630 v3 2.4GHz
首先需要安装CUDA,安装过程请参考NVIDIA官网教程。第二步,安装FFmpeg,参考安装教程 ,注意enable-cuda,enable-cuvid等。第三步,安装OpenCV,需要注意的是,在cmake过程中,也要-D WITH_CUDA=ON, -D WITH_NVCUVID=ON. 完成这三步以后,实验环境配置完成。
代码主要参考opencv\sources\samples\gpu\video_reader.cpp略做修改,编译链接以后,运行代码会出现错误:
Segmentation fault with gpu video decoding
代码Debug以后,将定位到这一行:
cv::Ptr<cv::cudacodec::VideoReader> d_reader = cv::cudacodec::createVideoReader(fname);
这个错误的主要原因在于https://github.com/opencv/opencv/issues/10201#issuecomment-379478620: