【GPU编解码】GPU硬编码

【GPU编解码】GPU硬编码

一、OpenCV中的硬编码

OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下。

 1 int main(int argc, const char* argv[])
 2 {
 3     if (argc != 2)
 4     {
 5         std::cerr << "Usage : video_writer <input video file>" << std::endl;
 6         return -1;
 7     }
 8
 9     const double FPS = 25.0;
10     cv::VideoCapture reader(argv[1]);
11
12     if (!reader.isOpened())
13     {
14         std::cerr << "Can‘t open input video file" << std::endl;
15         return -1;
16     }
17
18     cv::gpu::printShortCudaDeviceInfo(cv::gpu::getDevice());
19     cv::gpu::VideoWriter_GPU d_writer;
20
21     cv::Mat frame;
22     cv::gpu::GpuMat d_frame;
23
24     for (int i = 1;; ++i)
25     {
26         std::cout << "Read " << i << " frame" << std::endl;
27         reader >> frame;
28         if (frame.empty())
29         {
30             std::cout << "Stop" << std::endl;
31             break;
32         }
33         cv::resize(frame,frame,cv::Size(704,576));
34         if (!d_writer.isOpened())
35         {
36             std::cout << "Open GPU Writer" << std::endl;
37
38             d_writer.open("output_gpu.avi", frame.size(), FPS);
39         }
40         d_frame.upload(frame);
41         std::cout << "Write " << i << " frame" << std::endl;
42         d_writer.write(d_frame);
43     }
44     return 0;
45 }

深入阅读cv::gpu::VideoWriter_GPU类的实现,发现其底层编码实现是基于NVCUVENC库,视频文件的封装是FFmpeg。

二、NVCUVENC库

NVCUVENC库是NVIDIA公司提供的视频编码库,可以实现H.264的GPU编码,接收原始YUV frames数据,编码产生NAL packets。

利用NVCUVENC库进行视频硬编码的基本步骤如下:

1.检测是否支持NVCUVENC

2.新建编码器,设置编码类型

3.设置编码参数,注册回调函数

4.创建编码器相关资源

5.循环编码每帧数据

6.删除编码器,释放资源

伪代码示意图如下所示,其中编码前缓冲区的分配,以及编码后的数据处理都由回调函数。

回调函数说明:

AcquireBitstream() 分配coded bitstream缓冲区

ReleaseBitstream() 处理、保存coded bitstream

OnBeginFrame() 编码前的初始化工作

OnEndFrame() 编码后的统计工作

回调函数的调用顺序:

时间: 2024-10-10 18:00:25

【GPU编解码】GPU硬编码的相关文章

【GPU编解码】GPU硬解码---DXVA

[GPU编解码]GPU硬解码---DXVA 前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码. 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解码可分四级:VLD,控制BitStream:IDCT,反余弦变换:Mocomp,运动补偿,Pixel Prediction:PostProc,显示后处理.其中,VLD加速等级最高,所以其包含IDCT.MoCoopm和PostProc:IDCT加速次之,包含

【GPU编解码】GPU硬编码 (转)

一.OpenCV中的硬编码 OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下. 1 int main(int argc, const char* argv[]) 2 { 3 if (argc != 2) 4 { 5 std::cerr << "Usage : video_writer <input video file>" << std::endl; 6 return

【GPU编解码】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 re

【GPU编解码】GPU硬解码---DXVA (转)

前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码. 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解码可分四级:VLD,控制BitStream:IDCT,反余弦变换:Mocomp,运动补偿,Pixel Prediction:PostProc,显示后处理.其中,VLD加速等级最高,所以其包含IDCT.MoCoopm和PostProc:IDCT加速次之,包含MoCoopm和PostProc:最后MoC

[编解码] 关于base64编码的原理及实现

转载自: http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html [Base64]-base64的编码都是按字符串长度,以每3个8bit的字符为一组,-然后针对每组,首先获取每个字符的ASCII编码,-然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节-然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节-然后将这4个8bit的字节转换成10进制

【视频编解码&#183;学习笔记】8. 熵编码算法:基本算法列举 &amp; 指数哥伦布编码

一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H.264的标准协议中,不同的语法元素指定了不同的熵编码方法.在协议文档中共指定了10种语法元素的描述符,这些描述符表达了码流解析为语法元素值的方法,其中包含了H.264标准所支持的所有熵编码方法: 语法元素描述符 编码方法 b(8) 8位二进制比特位串,用于描述rbsp_byte() f(n) n位

iOS8系统H264视频硬件编解码说明

文章-原址 公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会提供GPU或者专用处理器来对视频流进行编解码,也就是硬件编码和解码,简称为硬编解码.苹果在iOS 8.0系统之前,没有开放系统的硬件编码解码功能,不过Mac OS系统一直有,被称为Video ToolBox的框架来处理硬件的编码和解码,终于在iOS 8.0后,苹果将该框架引入iOS系统.

H.264硬编码&硬解码

Firefly-RK3288拥有强大的VPU(视像处理器),能够流畅实现720P和1080P视频的H.264编解码: 而H.264的压缩率更高,可以更大程度更小视频的空间占用. 详细看视频演示 1. 演示介绍 基于Firefly开发板:视频监控演示: 需要两块开发板:一块开发板摄像头采集+硬编码,网络传输. 另一块开发板 网络接收.硬解码+显示. Demo中采样5GHz Wi-Fi传输,摄像头使用OV13850,或UVC camera 2. H.264技术介绍 H.264是一种高性能视频编解码技

H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持

H.264格式,iOS硬编解码 以及 iOS 11对HEVC硬编解码的支持 1,H.264格式 网络表示层NAL,如图H.264流由一帧一帧的NALU组成: SPS:序列参数集,作用于一系列连续的编码图像: PPS:图像参数集,作用于编码视频序列中一个或多个独立的图像: 这两个帧也是独立的NALU. I-Frame:关键帧,帧内编码后的帧,显示比较完全的一帧: P-Frame:参考前一帧,可能只是对比前一帧的运动估计的变化部分: B-Frame:会参照前后的帧,其他类似P-Frame.B和P F