本文将带您深入了解Intel多媒体框架,涵盖其硬件功能、显卡性能表现,以及与FFmpeg的紧密集成。我们将探讨如何在Intel平台上优化硬件视频pipeline,并利用VAAPI和oneVPL等API提升视频处理效率。此外,还将介绍FFmpeg DNN和LibXCam等高级功能,帮助您更好地理解和应用Intel的多媒体技术。
—
# Intel多媒体框架详解:硬件功能、显卡性能及FFmpeg集成
整理 / LiveVideoStack
感谢各位下午的到来,我是Intel开发者软件工程部门的工程师许广新。我们团队专注于多媒体框架的研发,并与开源的FFmpeg/GStreamer社区保持着良好的合作关系。FFmpeg官方Twitter曾赞扬我们:“如果这些大公司都能像Intel一样,贡献代码,该有多好。”我们团队也是GStreamer在中国的首个maintainer。
## 基础介绍与硬件功能
今天,我们将首先进行基础介绍,随后探讨Intel最新的硬件功能。接着,我们会展示Intel独立显卡在HEVC转码的质量和性能表现。此外,还将简要介绍FFmpeg硬件加速编解码器的工作流程。最后,我们会分享两个Post Process工具:FFmpeg DNN和LibXCam,并讲解如何在Intel GPU上搭建优化的硬件视频pipeline,以及如何发现和解决硬件管线中的临界区问题。
### FFmpeg/GStreamer Pipeline基础

图示展示了基本的FFmpeg/GStreamer pipeline,通常包括输入、视频解析器、视频解码器、视频处理、视频编码器以及输出等环节。今天我们将重点分享视频解析器和视频编解码器的相关内容。
### 硬件Codec的优势与挑战
硬件Codec的主要优势在于低延迟和高吞吐量。回想我年轻时,解码VCD(352×240分辨率)还需要专门的解码卡,而现在,一台普通笔记本就能轻松解码数十路甚至上百路1080p视频。硬件Codec的另一大好处是降低CPU使用率,从而节省大量电源消耗。然而,它也存在一些不足,例如难以与软件编码器在最高质量模式下竞争。由于客户对硬件编码器不够熟悉,很多厂商采用封闭的解决方案,难以进行定制化。但在Intel平台上,我们从驱动到中间件再到FFmpeg都是开源的,这为定制化提供了可能。不过,这需要用户对Intel硬件有较深入的了解。
硬件Codec的主要应用场景包括视频播放、流媒体、云游戏以及对时延要求极高的视频编码。
### Intel媒体API介绍

在深入了解后续内容之前,我们先简单介绍Intel在Linux上的媒体API。最底层是视频驱动程序,之上是VAAPI(Intel硬件抽象层)。虽然Linux系统(如Android、Chrome)普遍支持硬件抽象层,但VAAPI相对复杂,涉及surface管理和slice层解码。因此,Intel还提供了oneVPL(类似旧版的MediaSDK)API,它基于VAAPI二次开发,提供更强大的编码参数和硬件相关质量调整,从而生成更高质量的码流。
## Intel Xe LowPower架构硬件
### 架构概述

近年来,Intel的硬件产品主要基于Xe LowPower架构,包括三种平台:Tiger Lake及其后续产品(集成显卡)、DG1独立显卡(部分笔记本使用)和SG1(服务器专用,性能约为DG1的3-4倍)。
### 媒体引擎改进

Xe LowPower媒体引擎的主要改进包括:
– 解码和编码的输入输出速度提升至之前的两倍以上
– 新增AV1硬件解码支持
– 支持HEVC SCC扩展,可实现4K-8K 60fps视频播放
– 支持HDR/杜比以及12位端到端视频pipeline


Tiger Lake、DG1和SG1支持的功能包括:
– 基本的视频解码器支持
– 视频编码器支持
– 针对HEVC的显著性能提升
– VPP(Video Processing Pipeline)支持
## DG1独立显卡的转码质量

图示展示了DG1在转码质量方面的表现。以x265 medium为基准,DG1在各个码流上的表现均优于基准,部分码流甚至节省了高达30%的码率。


– DG1相比旧款VCA卡性能提升超过37%
– VDENC high quality模式比x265 medium好5.1%
– Balanced模式可实现18路1080p 30fps转码
– Best quality模式可实现2路1080p 30fps转码
## FFmpeg与硬件API集成
### 架构图解

FFmpeg与硬件API的集成架构如下:
– 底层是图形硬件和驱动程序
– 中间是硬件抽象层(VAAPI)
– FFmpeg提供VAAPI backend
– oneVPL或MediaSDK提供硬件优化接口
– 被libavcodec调用,最终供外部使用
### 解码与编码流程

#### 解码流程:
1. 接收AVpacket(码流)
2. 判断是否支持硬件解码
– 不支持:走软件解码流程
– 支持:调用硬件解码接口
#### 编码流程:
1. 接收AVFrame
2. 通过编码器变换为AVpacket(码流)
3. 调用VAAPI或QSV接口
– VAAPI:send_frame/receive_packet, encode_issue, vaBeginPicture, vaRender, EndPicture, encode_output
– QSV:EncodeFrameAsync, SyncOperation
## 高级功能:FFmpeg DNN与LibXCam
### FFmpeg DNN

FFmpeg DNN提供基于深度神经网络的功能,如超分、雨点去除、降噪等。目前支持基于DNN的检测和分类,未来将扩展更多功能。所有filter都调用统一的DNN接口,支持Tensorflow、Native和Intel OpenVINO backend。
### LibXCam

LibXCam是一个视频处理库,包含360视频拼接、数字降抖动、小波降噪以及HDR处理等功能。该库在GPU和CPU上均经过优化,支持360视频拼接(3-4K到8K ERP)。
## 优化硬件视频Pipeline
### 优化建议

在访问解码帧时,避免CPU直接访问GPU内存,因为集成显卡使用tiled memory(无cache),访问速度慢30倍以上。独立显卡使用总线内存,访问更慢。建议使用OpenCL、OpenGL或Vulkan进行GPU内存访问。例如,background aware subtitles可以通过OpenCL实现高效合成。
### 解决方案
– 使用vpp(DMA操作)将数据从无cache内存搬运到有cache内存
– 使用AVX512或AVX2指令批量搬运数据
## 监控与调试工具

### Intel-GPU-Top

使用Intel-GPU-Top工具可以监控GPU状态:
– GPU频率:可能因各种原因过低
– 引擎使用率:
– Render引擎(3D、OpenCL、vpp)
– Blitter引擎(CPU与GPU间数据复制)
– Video引擎(解码和编码)
– VideoEnhance引擎(低功耗模式)
通过监控各引擎使用率,可以发现系统瓶颈并进行优化。
—
{1、Intel多媒体框架, 2、硬件功能, 3、显卡性能, 4、FFmpeg, 5、硬件视频pipeline, 6、VAAPI, 7、oneVPL, 8、FFmpeg DNN, 9、LibXCam, 10、临界区}
本文是基于《Intel多媒体框架介绍:含硬件功能、显卡性能及FFmpeg相关》的AI重写版本
评论(0)