zoukankan      html  css  js  c++  java
  • 【计算机视觉】【并行计算与CUDA开发】GPU硬解码---CUVID

    问题描述:项目中,需要对高清监控视频分析处理,经测试,其解码过程所占CPU资源较多,导致整个系统处理效率不高,解码成为系统的瓶颈。

    解决思路:

    利用GPU解码高清视频,降低解码所占用CPU资源,加速解码过程。

    一、OpenCV中的硬解码

    OpenCV2.4.6中,已实现利用GPU进行读取视频,由cv::gpu::VideoReader_GPU完成,其示例程序如下。

    复制代码
     1 int main(int argc, const char* argv[])
     2 {
     3     if (argc != 2)
     4         return -1;
     5     const std::string fname(argv[1]);
     6     cv::namedWindow("GPU", cv::WINDOW_OPENGL);    
     7     cv::gpu::setGlDevice();
     8     
     9     cv::gpu::GpuMat d_frame;
    10     cv::gpu::VideoReader_GPU d_reader(fname);
    11     d_reader.dumpFormat(std::cout);
    12     for (;;)
    13     {
    14         if (!d_reader.read(d_frame))
    15             break;
    16         //....
    17         cv::imshow("GPU", d_frame);
    18         if (cv::waitKey(3) > 0)
    19             break;
    20     }
    21     return 0;
    22 }
    复制代码

    阅读OpenCV中VideoReader_GPU源码,可发现其底层实现是借助于视频解码库CUVID。

    二、视频解码库CUVID

    CUVID是基于CUDA的视频解码库,利用CUVID进行解码,主要包括以下四个步骤:

    1.解析视频数据文件

    2.在GPU端解码

    3.转换解码后的数据(YUV420、NV12 ---> RGBA)

    4.将RGBA数据显示出来

    下图为利用CUVID解码的伪代码示意图,其中VideoSource用来解析视频数据文件,VideoParser用来解码数据。

    VideoSource的回调函数HandleVideoData(),当VideoSource的状态设置为Started时,开始解析视频文件,并创建VideoParser,解码数据。

    VideoParser的回调函数:

    HandleVideoSequence() 创建解码器或重设解码器

    HandlePictureDecode() 解码每帧视频数据

    HandlePictureDisplay() 转换,处理,显示解码后的数据

    OpenCV中VideoReader_GPU可以方便地利用GPU读取视频文件,加速解码过程,但OpenCV中VideoReader_GPU无法读取rtsp视频流数据。

    这是因为CUVID中CuvideoSource不支持rtsp视频流数据,不能由rtsp地址创建VideoSource

    三、CUVID解码rtsp视频流

    基本思路:跳过VideoSource模块,利用其他方式解析视频数据文件。

    基本步骤:

    1.利用FFmpeg解析rtsp视频流

    2.创建VideoParser

    3.利用FFmpeg读取数据包(AVpacket)

    4.将数据包传输到VideoParser(AVpacket ---> CUVIDSOURCEDATAPACKET)

    5.VideoParser解码数据包

    其示例伪代码如下图所示

     

  • 相关阅读:
    Django(app的概念、ORM介绍及编码错误问题)
    Django(完整的登录示例、render字符串替换和redirect跳转)
    Construct Binary Tree from Preorder and Inorder Traversal
    Single Number II
    Single Number
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Binary Tree Zigzag Level Order Traversal
    Recover Binary Search Tree
    Add Binary
  • 原文地址:https://www.cnblogs.com/huty/p/8517791.html
Copyright © 2011-2022 走看看