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 ...
随机推荐
- javax.mail Java Extension(扩展)
http://baike.baidu.com/view/616724.htm JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便 ...
- 如何进入到Docker容器内部
启动Docker容器后,对应的服务(例如tomcat启动)也通过dockerfile文件命令运行起来了,这个时候如何进行容器内部观察容器的运行状态. 1.docker attach 这个命令在创建一个 ...
- 安装npm install时,长时间停留在某一处的解决方案
默认情况npm install安装时,会从 github.com 上下载文件,大部分安装不成功的原因都源自这里 因为 GitHub Releases 里的文件都托管在 s3.amazonaws.com ...
- mysql innodb_data_file_path配置增加
在配置innodb_data_file_path=ibdata1:200M:autoextend时,想增加空间,默认文件不断增加直到200M,如果要增加大小,直接修改参数增加大小会报错: auto-e ...
- 最常用的几个python库--学习引导
核心库 1.NumPy 当我们用python来处理科学计算任务时,不可避免的要用到来自SciPy Stack的帮助.SciPy Stack是一个专为python中科学计算而设计的软件包,注意不要将它 ...
- weex 学习
相关资料和链接: # 官方网站https://weex.apache.org/cn/ # githubhttps://github.com/apache/incubator-weex # weex环境 ...
- iOS ZipArchive文件解压缩
ZipArchive可以用于iOS中文件的解压缩 压缩文件的方法: //将工程中picture添加到左面111.zip压缩文件中 如果崩溃请更换压缩路径 -(void)testZipFile{ //压 ...
- Debian NAT共享上网
如果Linux主机有两个网卡,比如一个有线.一个无线,当无线连接后,其他机器即可通过有线共享上网,为了方便叙述,假设环境如下: A机器有两块网卡,eth0和ws0,其中ws0为无线网卡,已连接wifi ...
- Monkey源代码分析之事件源
上一篇文章<Monkey源代码分析之执行流程>给出了monkey执行的整个流程.让我们有一个概貌,那么往后的文章我们会尝试进一步的阐述相关的一些知识点. 这里先把整个monkey类的结构图 ...
- 高度平衡树 -- AVL 树
Scheme 的表达, 优雅. #lang scheme ( define nil '() ) ( define ( root tree )( car tree ) ) ( define ( left ...