GPU编解码 - 硬解码 - CUVID

2024-04-12 22:32
文章标签 gpu 解码 编解码 cuvid

本文主要是介绍GPU编解码 - 硬解码 - CUVID,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


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

解决思路:

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

一、OpenCV中的硬解码

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

[html]  view plain copy
  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解码数据包

其示例伪代码如下图所示


http://www.cnblogs.com/dwdxdy/p/3244723.htm




这篇关于GPU编解码 - 硬解码 - CUVID的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898415

相关文章

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

如何用GPU算力卡P100玩黑神话悟空?

精力有限,只记录关键信息,希望未来能够有助于其他人。 文章目录 综述背景评估游戏性能需求显卡需求CPU和内存系统需求主机需求显式需求 实操硬件安装安装操作系统Win11安装驱动修改注册表选择程序使用什么GPU 安装黑神话悟空其他 综述 用P100 + PCIe Gen3.0 + Dell720服务器(32C64G),运行黑神话悟空画质中等流畅运行。 背景 假设有一张P100-

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

FFmpeg系列-视频解码后保存帧图片为ppm

在正常开发中遇到花屏时怎么处理呢?可以把解码后的数据直接保存成帧图片保存起来,然后直接看图片有没有花屏来排除是否是显示的问题,如果花屏,则代表显示无问题,如果图片中没有花屏,则可以往显示的方向去排查了。 void saveFrame(AVFrame* pFrame, int width, int height, int iFrame){FILE *pFile;char szFilename[

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言 在模型推理时,需要使用GPU加速,相关的CUDA和CUDNN安装好后,通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的,如果使用PyInstaller将.py文件打包为.exe,发现只能使用CPU推理了。 本文分析这个问题和提供解决方案,供大家参考。 问题分析——找不到ONNX Runtime GPU 动态库 首先直接运行python程序

麒麟系统安装GPU驱动

1.nvidia 1.1显卡驱动 本机显卡型号:nvidia rtx 3090 1.1.1下载驱动 打开 https://www.nvidia.cn/geforce/drivers/ 也可以直接使用下面这个地址下载 https://www.nvidia.com/download/driverResults.aspx/205464/en-us/ 1.1.3安装驱动 右击,

【Hot100】LeetCode—394. 字符串解码

目录 1- 思路栈实现+四种情况处理 2- 实现⭐394. 字符串解码——题解思路 3- ACM 实现 原题链接:394. 字符串解码 1- 思路 栈实现+四种情况处理 ① 遇到数字,进行倍数相加 、②遇到左括号,压栈之前的元素、③遇到右括号弹出,栈进行拼接、④否则遇到字母,直接拼接在 res通过栈,实现先进后出的思想 对于输入 3[a2[c]] 的输入,在读到 3[得

Kubernetes的alpha.kubernetes.io/nvidia-gpu无法限制GPU个数

问题描述: Pod.yaml文件中关于GPU资源的设置如下: 然而在docker中运行GPU程序时,发现宿主机上的两块GPU都在跑。甚至在yaml文件中删除关于GPU的请求,在docker中都可以运行GPU。 原因: 上例说明alpha.kubernetes.io/nvidia-gpu无效。查看yaml文件,发现该docker开启了特权模式(privileged:ture): 而

GPU池化赋能智能制造

2023年3月10日,“第六届智能工厂高峰论坛”在杭州隆重揭幕。本次会议由e-works数字化企业网、浙江制信科技有限公司主办,中国人工智能学会智能制造专业委员会、长三角新能源汽车产业链联盟、长三角(杭州)制造业数字化能力中心、浙江省智能工厂操作系统技术创新中心协办。趋动科技作为钻石合作伙伴出席了本次峰会,与制造业精英企业以及行业专业人士共同分享制造业在智能工厂推进过程中的成功经验,探讨工厂改进中

【linux 常用命令】查看gpu、显卡常用命令

1.查看显卡基本信息 lspci | grep -i nvidia 2.查看显卡驱动版本 nvidia-smi -a 3.查看gpu使用情况 nvidia-smi (spam) [dongli@dt-gpu-1 train]$ nvidia-smi Fri Sep 27 16:42:33 2019 +----------------------------------------