声明:文章仅作知识整理、分享,如有侵权请联系作者删除博文,谢谢!

实时视频处理中,紧靠CPU进行视频解码速度慢/占用CPU资源较多,导致整个系统处理效率不高,解码成为系统的瓶颈。需要进行GPU解码高清视频,降低解码所占用CPU资源,加速解码过程。

以下来自网络测试结果:【视频解码性能对比】opencv + cuvid + gpu vs. ffmpeg + cpu - ahfuzhang - 博客园

视频大小:1168856 字节 画面尺寸:480*848 帧数:275 opencv + cuvid + tesla P4, 解码性能:1426.84 fps ffmpeg 4.0 API + [Intel(R) Xeon(R) Gold 6133 CPU @ 2.50GHz] ,解码性能:206.46 fps GPU解码是CPU解码的6.9倍。

注意:

1. GPU解码丢了两帧;

2. 如果使用cuda stream流水线技术,理论上性能还会再提升。

大部分摘抄自:【GPU编解码】GPU硬解码---CUVID - 一点心青 - 博客园

1、OpenCV中的硬解码

OpenCV2.4.6之后,已实现利用GPU进行读取视频,由cv::gpu::VideoReader_GPU完成。阅读OpenCV中VideoReader_GPU源码,可发现其底层实现是借助于视频解码库CUVID。其示例程序如下。

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;
}

2、视频解码库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。

3、jetson-TX1/TX2上原生CUDA SAMPLE实现GPU解码

demo路径:/usr/src/jetson_multimedia_api/samples

每个SAMPLE实现一独立的功能。底层仍是CUVID实现,因为CUVID中CuvideoSource不支持rtsp视频流数据,所以,rtsp的网络流媒体文件需先按流协议解码,之后在对码流硬解码。

4、CUVID解码rtsp视频流

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

基本步骤:

1.利用FFmpeg解析rtsp视频流

2.创建VideoParser

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

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

5.VideoParser解码数据包

其示例伪代码如下图所示:

5、FFPEG+CUVID+OPENCV主流做法

ffmpeg专题——ffmpeg实现视频播放,存储,H264编、解码,RTSP推流,RTSP解码 - 知乎

该专栏主要涉及ffmpeg的视频编解码操作。由浅入深,完成ffmpeg的学习。包括以下内容:

1、ffmpeg环境搭建

2、ffmpeg实现将视频存储为图片jpg

3、ffmpeg播放视频

4、FFMPEG+SDL2 实现播放器功能

5、ffmpeg解码H264文件并实时播放

6、ffmpeg将视频编码为H264格式

7、ffmpeg实现H264压缩并且推流至RTSP

8、FFMPEG实现RTSP中H264数据流解码 并且实时播放

里面提供源码可以直接下载运行!

https://edu.csdn.net/lecturer/4645?spm=1002.2001.3001.4144

视频GPU硬解码方案对比相关推荐

  1. AI视频行为分析系统项目复盘——技术篇2:视频流GPU硬解码

    0 项目背景 见<AI视频行为分析系统项目复盘--技术篇1> https://blog.csdn.net/weixin_42118657/article/details/118105545 ...

  2. Android视频滤镜添加硬解码方案

    由于工作的需求,研究过了一段时间的Android 的音视频播放渲染以及编辑方面的知识,这里就自己一些浅薄的了解对所了解做一个简单的介绍和记录,如有不对的地方请指正!同时也会记录下硬件解码的情况下完成滤 ...

  3. EasyPlayerPro:安卓视频播放器Android H.265硬解码方案(内含代码)

    背景介绍 H.265是ITU-TVCEG继H.264之后所制定的新的视频编码标准.H.265标准围绕着现有的视频编码标准H.264,保留原来的某些技术,同时对一些相关的技术加以改进.H.265使用先进 ...

  4. NVIDIA GPU 硬解码的支持情况

    官网资料: 不同显卡的支持情况: https://developer.nvidia.com/video-encode-decode-gpu-support-matrix 每代GPU体系对硬解码的支持: ...

  5. opencv+gpu硬解码

    一.安装NVIDIA VIDEO CODEC SDK NVIDIA VIDEO CODEC SDK 下载地址 注意查看需要的环境要求,有显卡驱动的要求和cuda的要求,因为我的环境,所以我选择10.0 ...

  6. ffmpeg + cuda(cuvid) 硬解码+像素格式转换(cpu主导)实战

    注意: VAAPI 是inter gpu 提供的硬编解码接口 VDPAU 是 video decode present api for unix nvdec / ncvid 都是nivida产出的硬解 ...

  7. HEVC的软解码和硬解码

    1.概念 从数字视频诞生以来,硬解码和软解码的说法一直伴随着它的发展.数字视频的软解码是指在通用CPU上通过专门的播放软件解码并播放视频:而硬解码则是指在专用的硬件解码模块解码视频,然后将解码数据送至 ...

  8. 摄像头RTSP流硬解码

    1. 问题分析 项目中,之前用的是OpenCV对摄像头的RTSP流进行解码.随着时间的推移以及业务摄像头的增加,发现十路流CPU就已经100%啦,很明显解码所占CPU资源较多,导致整个系统处理效率不高 ...

  9. MediaCodec在Android视频硬解码组件的应用

    https://yq.aliyun.com/articles/632892 云栖社区> 博客列表> 正文 MediaCodec在Android视频硬解码组件的应用 cheenc 2018- ...

最新文章

  1. np.nan is an invalid document, expected byte or unicode string
  2. Flex很可能会消失
  3. Linux下解决命令未找到的问题
  4. spark指定hive字段_Spark2.0集成Hive操作的相关配置与注意事项
  5. 【laravel】docker 部署laravel 遇到的问题?
  6. 使dreamweaver支持ftl扩展名
  7. TMG之恶意网址检查
  8. 牛客 - 走迷宫(模拟+离线)
  9. BusinessPartner Relationship in WebUI and Fiori
  10. 多个相同参数表单提交
  11. 日志文件和mysql同步到kafka_logstash_output_kafka:Mysql 同步 Kafka 深入详解
  12. php时间跨度,在PHP中执行与日期时间相关的操作
  13. 收藏:如何实现路由器的本地验证和授权
  14. google地球无法连接_WiFi无法连接?解决macOS Big Sur/Mojave/ Catalina上的Wi-Fi问题
  15. Linux系统编程三:使用man查看帮助文档
  16. DB9串口线定义的解析
  17. 加载中动画(gif)
  18. 仿真软件EWB,NI软件
  19. 信息系统运行管理员有必要考吗?现在备考还来得及吗?
  20. Sketch软件51.3 51.2 50.2 50 52 53 54 55 56 57 58正版激活码序列号 支持在线升级

热门文章

  1. 【论文阅读】LOKI-Practical Data Poisoning Attack against Next-Item Recommendation
  2. 翻译工作的重要性_为什么翻译平台很重要
  3. 常用的手机宽度 前端切图用 常用的手机尺寸
  4. android animation
  5. 在线Json格式化、在线格式化Json代码、Json代码美化器、Json在线压缩、Json \uxxxx格式解码
  6. 世界各地的标志性建筑物
  7. 图形界面介绍Create Route Blockage
  8. sqlconnection pooling是什么意思_目标检测领域还有什么可做的?19 个方向
  9. 你知道什么是 Figma 吧
  10. 黑龙江软件第三方检测机构/软件登记(退税)测试报告