GPU视频解码之CUVID
问题描述:项目中,需要对高清监控视频分析处理,经 测试,其解码过程所占CPU资源较多,导致整个系统处理效率不高,解码成为系统的瓶颈。
解决思路:
利用GPU解码高清视频,降低解码所占用CPU资源,加速解码过程。
一、OpenCV中的硬解码
OpenCV2.4.6中,已实现利用GPU进行读取视频,由cv::gpu::VideoReader_GPU完成,其示例程序如下。
- int main(int argc, const char* argv[])
- {
- if (argc != 2)
- return -1;
- const std::string fname(argv[1]);
- cv::namedWindow("GPU", cv::WINDOW_OPENGL);
- cv::gpu::setGlDevice();
- cv::gpu::GpuMat d_frame;
- cv::gpu::VideoReader_GPU d_reader(fname);
- d_reader.dumpFormat(std::cout);
- for (;;)
- {
- if (!d_reader.read(d_frame))
- break;
- //....
- cv::imshow("GPU", d_frame);
- if (cv::waitKey(3) > 0)
- break;
- }
- return 0;
- }
阅读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.html
GPU视频解码之CUVID相关推荐
- ffmpeg 采用cuda 硬编解码
在找资料的过程中,找到两中方法: 第一种是ffmpeg官方文档,连接: http://ffmpeg.org/doxygen/trunk/hw_decode_8c-example.html 第二种是gi ...
- 视频GPU硬解码方案对比
声明:文章仅作知识整理.分享,如有侵权请联系作者删除博文,谢谢! 实时视频处理中,紧靠CPU进行视频解码速度慢/占用CPU资源较多,导致整个系统处理效率不高,解码成为系统的瓶颈.需要进行GPU解码高清 ...
- ffmpeg + cuda(cuvid) 硬解码+像素格式转换(cpu主导)实战
注意: VAAPI 是inter gpu 提供的硬编解码接口 VDPAU 是 video decode present api for unix nvdec / ncvid 都是nivida产出的硬解 ...
- 哔哩哔哩超大规模视频查重算法与工程优化实践
本期作者 刘璟 哔哩哔哩高级算法工程师 齐竟雄 哔哩哔哩高级算法工程师 唐哲 哔哩哔哩高级算法工程师 李傲 哔哩哔哩资深算法工程师 一.需求背景 当前站内存在一定比例的UP主投稿重复.低编辑度的低创视 ...
- 摄像头RTSP流硬解码
1. 问题分析 项目中,之前用的是OpenCV对摄像头的RTSP流进行解码.随着时间的推移以及业务摄像头的增加,发现十路流CPU就已经100%啦,很明显解码所占CPU资源较多,导致整个系统处理效率不高 ...
- AI视频行为分析系统项目复盘——技术篇2:视频流GPU硬解码
0 项目背景 见<AI视频行为分析系统项目复盘--技术篇1> https://blog.csdn.net/weixin_42118657/article/details/118105545 ...
- “ GPU视频处理技术调研报告 ”
本文来自英伟达高级工程师 季光在LiveVideoStack 线上交流分享,并由LiveVideoStack整理而成.分享中季光详细解析了GPU在视频编解码,图像分析和视频处理方面的相关技术支持,及实 ...
- 使用GPU硬件加速FFmpeg视频转码
最近看了些视频处理相关的文章,这里有一篇是讲如何使用Nvidia显卡为视频的编解码进行加速的, 为了方便查阅就转载了: 本文内容包括: 在Linux环境下安装FFmpeg 通过命令行实现视频格式识别和 ...
- NVIDIA GPU加速FFmpeg
一.参考资料 使用GPU硬件加速FFmpeg视频转码 二.重要指令 查看支持的硬件加速选项 ffmpeg -hwaccels 查看cuvid提供的GPU编解码器 ffmpeg -codecs | gr ...
最新文章
- python os system用法_Python调用系统命令os.system()和os.popen()的实现
- mysql中两种备份方法的优缺点_Mysql两种存储引擎的优缺点
- 鲁迅先生就ERP实施问题答记者问
- python网络编程案例_Python 网络编程_python网络编程基础_python高级编程
- VUE—从入门到飞起(五)
- [gdb][python][libpython] 使用gdb调试python脚本
- Python解析pdf转为TXT格式
- selenium的定位方式
- 在线十六进制颜色随机生成器
- MyBatis 简介
- autoflowchart软件使用步骤_【AutoFlowChart流程图自动生成软件】|C语言流程图生成工具(AutoFlowchart)下载_v1.0 中文版_9号软件下载...
- 50个app帮你手机大换血!
- 基于51单片机的指纹考勤系统
- mysql主从 备份数据库脱敏_数据库脱敏有用吗?会不会损坏重要数据?
- 通信原理及系统系列11—— 设计无码间串扰的通信系统(升余弦滚降滤波器)
- vivado查看原理图
- “学习方法”学习笔记(一)费曼技巧
- ffmpeg从mp4(音视频)中提取音频aac
- 百度地图 前端html,前端js调用百度地图常用基本功能
- 基于Python的车辆管理系统
热门文章
- tf.ConfigProto()详解
- 计算机系统结构广义定义,《计算机系统结构》电子教案(清华版).ppt.ppt
- bert中文预训练模型_[中文医疗预训练模型] MC-BERT
- 《JAVA与模式》之抽象工厂模式
- Java时间日期格式转换
- 锻炼后应该做的4件事
- 卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
- 如何编写YARN应用程序
- 程序员面试题精选100题(60)-判断二叉树是不是平衡[数据结构]
- 图像处理(十三)保刚性图像变形算法-Siggraph 2004