GPU编解码 - 硬编码
来源:互联网 发布:java特种兵作者 编辑:程序博客网 时间:2024/05/17 04:04
一、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() 编码后的统计工作
回调函数的调用顺序:
http://www.cnblogs.com/dwdxdy/p/3247075.html
- GPU编解码 - 硬编码
- GPU编解码 - 硬解码---CUVID
- GPU编解码 - 硬解码 - CUVID
- 【视频开发】GPU编解码:GPU硬解码---DXVA
- GPU硬解码---CUVID
- GPU硬解码---DXVA
- Android硬编实战之采集编码解码
- GPU硬编码---NVCUVENC
- 树莓派 FFmpeg 支持GPU硬解码
- 树莓派 FFmpeg 支持GPU硬解码
- 基于CUDA的硬编解码
- 基于NVIDIA显卡的硬编解码
- Android硬编解码并播放
- 视频硬编解码初级篇
- 使用GPU进行视频编解码
- OpenCV中利用GPU硬编码
- 地理编码 ,反编码 ,地理编解码
- 基于NVIDIA显卡的硬编解码的一点心得
- 文件I/O编程
- kindeditor 赋值 未结束的字符串常量
- 获取在一段范围内的月份
- notepad++ 的书签功能怎么用(在行号后面的那个圈的用法)
- Servlet的生命周期
- GPU编解码 - 硬编码
- 不定义JQuery插件,不要说会JQuery
- android 存储图片到data目录和读取data目录下的图片
- 随机数生成解析
- 常见几个有关存储的名词,如硬盘、内存、u盘Mp3存储设备的特点及原因
- C常见问题之字符串数组和字符指针数组问题
- String 、StringBuffer 和 StringBuilder 的区别
- 第k元素log(n)算法--划分树
- 用C语言实现有限状态自动机FSM