Intel Quick Sync Video Encoder
本篇记录Intel E3 1275处理器集成显卡的硬编码预研过程。
步骤如下:
(1)环境搭建
(2)demo编译,测试
(3)研究demo源码,Media SDK API使用
(4)编写so动态库封装RGB,YUV的编码接口
下面记录每个过程的主要事项以及遇到的一些重要问题。
1. 环境搭建
(1)首先在intel官网下载 MediaServerStudioEssentials2017.tar.gz, 主要考虑这个版本的SDK最适合 CentOS7.2.1511, 也可以下载R2版本。
(2)安装CentOS7.2.1511。
(3)安装Media SDK,具体步骤参考media_server_studio_getting_started_guide.pdf文档。这里要说明的是media sdk安装过程中会依赖很多基础库,比如libdrm, libva,X11, libGL等等,但是在install_sdk_script.sh脚本中安装的rpm包依赖的这些基础库的版本可能比CentOS7.2.1511中的低,这时候会安装失败,提示依赖错误。解决办法是在install_sdk_script.sh脚本中的yum命令参数加上--oldpackage参数,强制安装旧版本,使依赖关系通过。
第二个问题是依赖冲突,出现过一个问题是kernel-tools安装了两个不同版本rmp包,这时候会依赖冲突,导致安装失败,解决方法是删掉一个rpm包。对于yum如何处理两个不同版本依赖库的问题后面再考虑。(这里我是对比一个安装正确的环境,删掉了一个高版本的库)
2. demo编译,测试
环境搭建好之后,可以根据文档中的说明验证media sdk安装的正确性。然后根据Sample_guide.pdf文档,使用cmake程序编译,再使用每一个demo目录下的文档中参数的说明测试demo。这一步没什么好说的,如果环境安装正确的话,一切顺利。需要提一下的是,用sample_encode 把yuv数据编码成h264后不能用VLC直接播放,需要在命令行加--demux h264参数启动vlc才能播放。关于cmake的使用,后续要学习一下,跨平台的编译工具,还可以用来写测试用例自动测试程序。
3. 源码分析, SDK API使用
对照着demo和media_sdk.pdf文档看,基本上没啥问题。需要关注的几个点是:
(1)VPP,Encoder参数初始化
(2)输入输出缓冲区是如何分配与管理的(有一个”异步深度”的概念,主要关系到分配的输入缓冲区个数)
(3)VPP, Encoder的异步处理流程(编码RGB数据源需要用到VPP模块)
(4)编码结果数据的获取。
(5)RGBA的编码处理: 把VPP的输入格式改成RGB4, 输出改成NV12,把rgb视频数据拷贝pData.R, 然后赋值pData.G = pData.R+1, pData.B=pData.R+2, pData.A = pData.R+3,利用VPP完成RGB到yuv颜色空间的转换。
4. so动态库
由于不会cmake,所以这里我把源码直接拿过来写makefile编译的,需要注意的几个问题:
(1)makefile里面需要定义几个与libVA有关的宏,使硬编码生效。( -DLIBVA_SUPPORT -DLIBVA_DRM_SUPPORT -DLIBVA_X11_SUPPORT)
(2)so链接的静态库不是libmfx.a, 而是libdispatch_shared.a, 这个静态库需要自己在/opt/intel/mediasdk/opensource/mfx_dispatch目录下用cmake编译出来,具体过程看dispatch的相关文档。如果使用libmfx.a链接,so会产生符号冲突,导致崩溃。
(3)在虚拟机中搭建环境,安装media-sdk,编译libdispatch_shared.a,然后生成自己的so动态库,把动态库放到物理机中链接运行导致出错的问题,是因为不同环境下编译出来的静态库不能通用导致的,此处的问题是libdispatch_shared.a.
Intel Quick Sync Video Encoder的更多相关文章
- Intel Quick Sync Video Encoder 2
这边博客主要记录在预研quick sync中涉及到的一些性能质量相关的关键参数设置. github: https://github.com/MarkRepo/qsve 1. VPP处理过程伪代码: M ...
- H.264转码加速:NVENC大战Quick Sync
GPU加速技术对普通消费者最直观的影响就是视频转码应用上了,NVIDIA..AMD以及Intel都有自己的加速技术,而在新一代CPU和GPU架构上,三方都有更新的技术方案.<br>< ...
- H.265 Video Encoder IP Core
复制: 开源H.265硬件视频编码器H.265 Video Encoder IP Core是开源的H.265硬件视频编码器,实现了H.265(或叫HEVC)的大部分功能. 它由复旦大学专用集成电路与系 ...
- H.265 HD 和H.265 4K Video Encoder IP Core
H.265 HD 和H.265 4K Video Encoder IP Core H.265 HD Video Encoder IP Core(H.265 HD Video/Audio Encoder ...
- Intel Media SDK H264 encoder GOP setting
1 I帧,P帧,B帧,IDR帧,NAL单元 I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随 ...
- Getting Started with the Intel Media SDK
By Gael Hofemeier on March 19, 2015 Follow Gael on Twitter: @GaelHof Media SDK Developer’s Guide Med ...
- Intel® Media SDK(一)
A cross-platform API for developing media applications on Windows* Fast video playback, encode, proc ...
- Intel 处理器架构演进 转
Intel 处理器架构演进 Posted on 2018-02-13 | Edited on 2018-09-23 | In Computer Architecture | Comments: ...
- Intel® Core™ i5-5300U Processor
3M Cache, up to 2.90 GHz Specifications Ordering and Compliance Essentials Product Collection 5t ...
随机推荐
- es6 - array for-chrome
// 去重复 Array.from(new Set([1, 1, 2, 3])); // [1, 2, 3] console.log(Array.from(new Set([1, 1, 2, 3])) ...
- mysql 随机取数据
SELECT * FROM table WHERE id >= (SELECT FLOOR(RAND()*MAX(id)) FROM table ) ORDER BY idLIMIT 1; 这样 ...
- 二维树状数组的区间加减及查询 tyvj 1716 上帝造题的七分钟
详细解释见小结.http://blog.csdn.net/zmx354/article/details/31740985 #include <algorithm> #include < ...
- OrCAD16.6中对比两份DSN文件的方法
OrCAD16.6中对比两份改版前后DSN文件的方法 两种方法: (1)第一种用软件对比netlist (2)用orcad自带的对比功能 一.将两份要对比的原理图都生成orTelesis.dll格式的 ...
- android学习笔记(3)Button控件的学习
一,增加一个button并用外部类绑定事件 //XML文件: <Button android:id="@+id/button1" android:layout_width=& ...
- sparkstreaming+socket workCount 小案例
Consumer代码 import org.apache.spark.SparkConf import org.apache.spark.streaming.StreamingContext impo ...
- IIS中使用ASP.NET MVC的经验总结
在这篇文章中我们学习在不同版本的IIS中使用ASP.NET MVC和URL Routing.我们学习针对IIS7.0.IIS6.0和更早版本的IIS的处理策略. ASP.NET MVC框架依赖于URL ...
- shiro集成encache
针对多频次或者几乎不变的大数量的数据,我们可以通过缓存来实现,具体的比如说权限认证,这个,每次操作都需要权限认证,所以,这里添加encache注解.具体的认证过程是: 1,用户第一次访问用户权限信息, ...
- push推送服务设计
PUSH系统架构设计简述 一.网络传输协议的选择 PUSH系统协议选取: UDP协议实时性更好,但是如何处理安全可靠的传输并且处理不同客户端之间的消息交互是个难题,实现起来过于复杂,那就非TCP协议莫 ...
- Java NIO —— Buffer(缓冲区)
Buffer是一个抽象类,位于java.nio包中,主要用作缓冲区.注意:Buffer是非线程安全类. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer ...