【qqplayer 源码】【android导入仿源码】【fas影视iapp源码】c源码 qsv
1.cԴ?? qsv
2.视频和视频帧:Intel GPU(核显)的编解码故事
3.视频和视频帧:FFMPEG+Intel QSV硬解的环境安装篇
4.揭秘爱奇艺qsv文件背后的秘密
5.QSV是什么文件,如何将qsv文件转换成mp4视频格式?
cԴ?? qsv
一、配置环境
下载mfx源码:github.com/lu-zero/mfx_
下载msys2,并安装
下载ffmpeg
二、编译库(位)
在系统开始菜单中启动MSYS2 MSYS,在终端中执行以下升级操作:
修改mfx_dispatch/ Makefile.am文件,把libintel_gfx_api-x.a和libintel_gfx_api_x.a修改为以.la为后缀;
拷贝mfx_dispatch和ffmpeg至msys2/home目录下;
打开msys位的qqplayer 源码命令行窗口,通过命令进入mfx_dispatch目录,进行以下操作:
编译nv-code-headers,编译之后会自动放在/usr/local下;输入命令 export PKG_CONFIG_PATH=path,path是mfx和nv-code-headers编译之后的路径
编译ffmpeg
在执行make -j8时,如果报错,则需要在./configure命令后面添加关联libmfx的头文件目录和库文件目录,如:--extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib。
通过msys位的命令行窗口进入ffmpeg目录,进行以下操作:
三、注意事项
如果不修改c,会出现编译不通过的情况;
编译过程中要注意位和位;
export PKG_CONFIG_PATH指定的路径一定要正确,否则在编译ffmpeg会出现libmfx not found错误。
编译ffmpeg命令中,加了--disable-demuxers指令后,会发现avformat_open_input无法打开音视频流。
编译位ffmpeg-qsv库,修改编译mfx的命令和ffmpeg的命令,将位的改为位。
libmfx编译命令:Linux 编译时:./configure --prefix=/usr/local/ffmpegx --enable-shared --extra-cflags="-m" --extra-ldflags="-m" --extra-cxxflags="-m",ffmpeg编译命令。
四、CentOS
原文 ffmpeg编译,支持QSV,CUDA_cuda qsv_那比小新的博客-CSDN博客
视频和视频帧:Intel GPU(核显)的编解码故事
一般提及基于“显卡或多媒体处理芯片对视频进行解码”为硬解码,本文将探讨如何利用Intel的核显,即集成GPU实现硬解码。提及QSV,全称为Quick Sync Video,android导入仿源码Intel在年发布Sandy Bridge CPU时,一同推出了这项基于核显进行多媒体处理,包括视频编解码的技术。集成核显,官方称HD Graphics,最早在Sandy Bridge前一代制程已推出,但性能提升及充分发挥在Sandy Bridge时期。Haswell及后续制程发布更高级的Iris架构。最近Intel宣布将开发独立显卡,核显发展具体走向未知。
接手QSV项目时,预期会有很多相关资料,实则相反。因此,将记录自己学习过程。
本文将介绍:
I. Intel的核显(集成GPU):
了解核显很有必要,几个月前,作者对CPU的认识还停留在“南北桥”架构。以下内容若有不准确之处,欢迎指正。
查看Gen CPU结构图,首先看CPU核心部分。在整块CPU芯片中,核显占比不小,算力不容小觑。在没有独立显卡的笔记本上,可以运行大量大型游戏,虽偶有卡顿、掉帧情况,整体表现已相对不错。
接下来,看官方给出的GPU内部结构图。GPU内部远比图上所示复杂,fas影视iapp源码图中介绍的仅为部分Subslice芯片结构。GPU分为Slice部分和Un-Slice部分,Slice部分已介绍,接下来介绍Un-Slice部分。
作者找到了一张图,展示了在MFF上进行视频处理的流程:1) 首先在MFX/VDBOX模块上进行编解码;2) 接着送到VQE/VEBOX上做图像增强和矫正处理;3) 然后送到SFC上做scale和transcode;4) 最后送出到显示屏上展示。是否完全正确,作者这里做个记录。
推荐知乎文章《转》Intel Gen8/Gen9核芯显卡微架构详细剖析,深入浅出,关于thread dispatch的说明即出自该文。
最后,总结Intel集成GPU/核显结构图。
注意,这是skylake架构下的GT2/GT3/GT4 GPU结构图,X数字越大,集成的Slice和Unslice芯片更多,能力越强,价格也更高。
II. Quick Sync Video(QSV)技术:
QSV是Intel推出的将视频处理任务直接送到GPU上进行专门负责视频处理的硬件模块处理的软件技术。与CPU或通用GPU上的视频编码不同,QSV是处理器芯片上的专用硬件核心,这使得视频处理更为高效。
要了解QSV如何驱动GPU的MFF,首先看官方Intel® Video and Audio for Linux上的图。在介绍QSV之前,提及Intel在FFmpeg上提供的插件,包括ffmpeg-qsv、ffmpeg-vaapi和ffmpeg-ocl。详细描述如下:
· FFmpeg-vaapi提供基于低级VAAPI接口的硬件加速,在VA API标准下在Intel GPU上执行高性能视频编解码器、视频处理和转码功能。
· FFmpeg-qsv提供基于Intel GPU的linux源码安装upx硬件加速,基于Intel Media SDK提供高性能视频编解码器、视频处理和转码功能。
· FFmpeg-ocl提供基于工业标准OpenCL在CPU/GPU上的硬件加速,主要用于加速视频处理过滤器。
接下来,介绍QSV在ffmpeg2.8及以上版本的支持,经过MSDK、LibVA、UMD和LibDRM。分层进行分析:
· MSDK:Intel的媒体开发库,支持多种图形平台,实现通用功能,可用于数字视频的预处理、编解码和不同编码格式的转换。源码地址为Intel® Media SDK,在Linux平台上编译使用。
· VA-API:Video Acceleration API,提供类unix平台的视频硬件加速开源库和标准。Intel源码地址在Intel-vaapi-driver Project,在Linux平台上使用。
· UMD:User Mode Driver的缩写,指VA-API Driver。Intel提供了两个工具:intel-vaapi-driver 和 intel-media-driver,推荐使用后者。
· LibDRM:Direct Rendering Manager,解决多个程序协同使用Video Card资源问题,提供一组API访问GPU。与VA-API,LibDRM是一套通用的Linux/Unix解决方案。
· Linux Kernel:Intel的Kernel是i driver,描述了libDRM和Kernel Driver之间的关系。
至此,整个关系图较为清晰。传奇3插件 源码
III. FFMPEG+QSV解码:
QSV硬解的任务主要包括:
关于3-4步操作的详细实现,底层库会帮助完成。但作为一个优秀的工程师,研究FFMPEG源码依然十分重要。接下来,介绍如何使用FFmpeg API中的h_qsv解码器插件。
提及FFmpeg命令行使用方法,推荐阅读官方资料《QuickSync》或《Intel_FFmpeg_plugins》。
关于示例代码,作者曾遇到许多坑,总结为:多数中文博客不可靠,官方demo最可信。官方代码提供了两份可用:qsvdec.c和hw_decode.c。作者最早使用的是第一段代码,核心部分如下:
然而,这段代码存在问题。测试发现,对于赛扬系列一款CPU,在p视频上MSDK达到fps,理论上h_qsv平台上限也应为fps,但实际测试不到fps。排查后发现是av_hwframe_transfer_data()性能较弱。
最终,与Intel一起解决了性能问题。那么,性能提升方案为何是GPU-COPY技术做Memory-Mapping?
解释GPU和CPU渲染图像的过程,包括坐标系转化、纹理叠加等,仅需了解两点:
后者的数据组织方式能充分利用GPU的并行特性,加速图像处理、渲染。尽管存在一些纹理叠加的技术难题,但性能提升足以补偿。
接下来,解释Memory-Mapping:从Intel CPU架构图中可见,GPU和CPU位于同一芯片上,各自寄存器/缓存区有限,视频数据主要存储在内存上。GPU和CPU的数据组织方式不同,同一帧数据存于内存同一位置,数据格式不同,因此需要做Memory-Mapping。Memory-Mapping相较于Memory-Copy,减少了数据从内存区域A移动到区域B的操作,已经是优化。进一步优化:GPU完成Memory-Mapping以及数据从GPU到内存和CPU的操作。
在av_hwframe_transfer_data()内部,Memory-Mapping由CPU完成,性能受限于CPU,只能并行。修改后,整体性能从不到fps提升至fps,虽然与理想fps仍有差距,但满足性能需求。
据悉,Intel将在FFmpeg 4.3开源出这个解决方案。
写在后面:
了解GPU底层对应用开发人员帮助不大,毕竟了解芯片布线的重新设计、制程工艺提升、GPU-COPY技术的数据I/O提升等,也不能做什么。最终,芯片架构是芯片工程师的事,底层逻辑实现是嵌入式工程师的事。应用开发人员无法做出实质贡献,但作为知识库扩充或休闲阅读,了解也无妨。
希望有机会接触CUDA的编解码,深入学习N卡设计。
感谢因《视频和帧》系列文章结识的朋友,热心指出文章描述不准确的地方。文中如有不严谨之处,欢迎指正。
视频和视频帧:FFMPEG+Intel QSV硬解的环境安装篇
在进行视频处理项目时,需要集成FFMPEG的QSV插件以利用Intel的集成GPU(核显)进行高效视频解码。本文将详细介绍在Linux环境下如何编译和安装QSV插件,包括Intel的libva、media-driver和msdk源码编译方法,以及如何成功集成到FFMPEG源码中。以下步骤将帮助你搭建起硬解环境,提升视频处理性能。
FFMPEG作为多媒体文件处理的强大工具,不仅支持CPU处理(软解),还能够利用各种GPU卡进行硬件加速(硬解),包括Intel的集成显卡、NVIDIA的N卡以及ARM的A卡。本文专注于介绍如何在Linux环境下集成FFMPEG的QSV插件。
首先,确保环境配置满足要求,包括GCC/G++版本4.9及以上、CMAKE版本3.6及以上。选择/opt作为库的编译安装路径。Intel官方提供了QSV插件的各个组件之间的关系图,这有助于在安装前对整个QSV框架有初步的认知。
安装前的准备工作包括安装gcc和cmake,检查内核版本确保不低于4..,或根据需要更新内核版本。在执行cmake --version时,可能遇到“bash: /usr/bin/cmake: No such file or directory”的错误,解决方法是将cmake安装路径从/usr/local/bin复制到/usr/bin下。
接下来,进行libva和media-driver的编译安装。libva和libva-utils安装在/opt/intel下,确保在编译时设置PKG_CONFIG_PATH为/opt/intel/libva/lib/pkgconfig,以解决libva-utils的依赖问题。media-driver安装后,显示结果应包含成功安装的组件。
在完成libva和media-driver的安装后,接下来是Intel Media SDK(MSDK)的源码编译。MSDK安装后,库文件位于默认路径下的/opt/intel/mediasdk目录。确保在动态链接库中添加该路径,并通过运行msdk编译后的可执行程序sample_xxx进行测试,验证安装是否成功。
最后,自定义编译FFMPEG源码以集成QSV插件。由于默认安装的FFMPEG不支持QSV选项,需要手动编译。确保在编译FFMPEG时,环境变量正确指向libmfx.pc文件,以确保QSV插件被正确识别。通过运行自定义编译的FFMPEG可执行文件进行测试,验证集成是否成功。
本文通过详细步骤和注意事项,旨在帮助开发者高效搭建FFMPEG+QSV的环境,利用Intel的集成GPU进行视频解码加速。通过遵循上述指南,开发者可以避免一些常见错误,并顺利完成集成过程。希望本文内容能为视频处理项目的开发者提供实用的指导,提升视频处理效率。
揭秘爱奇艺qsv文件背后的秘密
影视爱好者们是否曾想获取爱奇艺的高清资源?是否好奇如何将qsv文件导入剪映?本文将揭开爱奇艺qsv文件的面纱,并介绍一种绿色免费的转换工具,可轻松将qsv文件转换为flv或MP4格式。
QSV文件,一种爱奇艺公司自研的视频文件格式,加密性强,仅限于爱奇艺客户端和万能播放器播放。若想将其转换为其他格式,需了解其加密方式。经过研究和分析,得出以下
QSV文件由头部信息、索引信息、json字符串和视频分段信息组成。
头部信息位于文件前字节,包含标识符、版本号、视频ID等信息。
索引信息记录视频分段信息的偏移和大小,加密后存储。
json字符串可通过头部信息中的绝对偏移和大小获取,为加密数据,需进行解密。解密算法如下:
每个qsv文件包含多个视频分段,通过索引信息中的segment_offset和segment_size定位。老版本解密算法与json字符串相同,新版本解密算法如下:
已发现的视频格式有flv(旧版客户端)和mpeg-ts(新版客户端)。
提取QSV文件中的视频信息后,需使用ffmpeg进行转换。本文提供的免费转换工具已集成ffmpeg,可直接将QSV文件转换为MP4格式。关注公众号回复QSV获取。
需要注意的是,最新版爱奇艺客户端(.0以上版本)下载的QSV文件采用了全新的加密方式,目前尚无法转换。我们也提供老版本的爱奇艺客户端,关注公众号回复QIYI获取。
本文参考开源项目qsv2flv,项目地址:github.com/btnkij/qsv2flv。该项目采用c语言和Qt开发,作者为帮助Java开发者理解,翻译了Java版本。关注我,下篇将手把手带你深入探索。
QSV是什么文件,如何将qsv文件转换成mp4视频格式?
qsv是一种视频加速格式。qsv格式是爱奇艺公司研发的一种视频文件格式,由于爱奇艺全面正版视频,故qsv格式只能使用奇艺播放器(爱奇艺影音)播放。
使用方法:
(1)安装爱奇艺影音后即可播放。
(2)如果想在手机、MP4等移动设备上播放的话,就需要通过转换格式后就可以播放了。
qsv视频格式转换器是一款可以免费下载使用的qsv视频文件专用的转换器,用它就可以转换qsv文件了。但是要注意,用它来转换qsv文件的话,只能转换FLV一种格式。如果还想要转换成MP4、mpg等其他的格式,就要用到些其他专业的转换器,将FLV再转换也是可以。
qsv转换器推荐:/article/aa6a2ca1dd4dc.html