本页面介绍了 OBS Studio 中 Intel QuickSync Video (QSV) 编码器的实现。QSV 编码器允许用户利用 Intel 的硬件编码能力,以低 CPU 使用率实现高效视频压缩。本文档涵盖了 QSV 编码器的架构、支持的编解码器、配置选项和平台特定考量。
有关 x264 或 NVENC 等其他编码器的信息,请参阅其各自的页面(x264 编码器和NVENC 编码器)。
QSV 编码器使用 Intel GPU 上可用的 Intel QuickSync Video 技术提供硬件加速编码。它支持 H.264/AVC、HEVC 和 AV1(在较新的硬件上)编解码器。该编码器作为插件实现,并与 OBS 编码器系统集成。
OBS 中 QSV 的实现使用了 Intel 的视频处理库 (VPL),它是 Intel Media SDK 的后续产品。这使得高效的硬件加速编码成为可能,同时在低 CPU 使用率下提供良好的质量。
来源:plugins/obs-qsv11/obs-qsv11.c1-150 plugins/obs-qsv11/obs-qsv11-plugin-main.c1-109
QSV 编码器被构造成一个与 OBS 的编码器 API 接口的插件。实现包含多个层,从面向 OBS 的接口到硬件抽象层。
来源:plugins/obs-qsv11/obs-qsv11.c83-136 plugins/obs-qsv11/QSV_Encoder.h57-171 plugins/obs-qsv11/QSV_Encoder_Internal.h56-140
obs_qsv 接口:OBS 编码器 API 与 QSV 实现之间的桥梁,处理编码器回调和设置。
QSV_Encoder API:提供一个简化的 C 接口,用于 OBS 可使用的编码操作。
QSV_Encoder_Internal:处理编码任务的详细实现,直接与 Intel VPL 交互。
通用工具:用于内存分配、设备检测和资源管理的实用函数和平台特定实现。
平台层:Windows 上的 DirectX 11 和 Linux 上的 VA-API,用于 GPU 内存管理和硬件交互。
VPL/Media SDK:与硬件编码器交互的 Intel 媒体库。
来源:plugins/obs-qsv11/QSV_Encoder_Internal.cpp57-168 plugins/obs-qsv11/QSV_Encoder.cpp57-110
编码过程涉及从帧采集到生成压缩比特流数据的几个步骤。
来源:plugins/obs-qsv11/obs-qsv11.c832-847 plugins/obs-qsv11/QSV_Encoder_Internal.cpp687-785
OBS 提供多种 QSV 编码器类型以支持不同的编解码器和输入方法
| 编码器名称 | 编解码器 | 描述 |
|---|---|---|
| obs_qsv_encoder | H.264 | 传统 H.264 软件输入编码器 (v1) |
| obs_qsv_encoder_v2 | H.264 | H.264 软件输入编码器 (v2) |
| obs_qsv_encoder_tex | H.264 | H.264 基于纹理的编码器 (v1) |
| obs_qsv_encoder_tex_v2 | H.264 | H.264 基于纹理的编码器 (v2) |
| obs_qsv_av1_encoder | AV1 | AV1 软件输入编码器 |
| obs_qsv_av1_encoder_tex | AV1 | AV1 基于纹理的编码器 |
| obs_qsv_hevc_encoder | HEVC | HEVC 软件输入编码器 |
| obs_qsv_hevc_encoder_tex | HEVC | HEVC 基于纹理的编码器 |
基于纹理的编码器允许直接 GPU 到 GPU 传输,在源已位于 GPU 上时提供更好的性能。
来源:plugins/obs-qsv11/obs-qsv11.c834-905 plugins/obs-qsv11/obs-qsv11-plugin-main.c67-107
QSV 编码器实现涉及多个协同工作的关键组件,以提供硬件加速编码。
来源:plugins/obs-qsv11/QSV_Encoder_Internal.cpp132-166 plugins/obs-qsv11/obs-qsv11.c757-847
编码器根据平台使用不同的内存管理策略
Windows (DirectX 11):
Linux (VA-API):
来源:plugins/obs-qsv11/common_directx11.cpp1-45 plugins/obs-qsv11/common_utils_linux.cpp46-155
QSV 编码器通过 OBS UI 向用户公开了几个配置选项。这些选项控制编码质量、性能和比特率特性。
“目标用途”设置控制编码器的速度/质量权衡
| 值 | 描述 |
|---|---|
| TU1 | 最佳质量,最慢性能 |
| TU2 | 较慢预设 |
| TU3 | 慢速预设 |
| TU4 | 平衡(默认) |
| TU5 | 快速预设 |
| TU6 | 更快预设 |
| TU7 | 最佳速度,较低质量 |
来源:plugins/obs-qsv11/data/locale/en-US.ini1-22 plugins/obs-qsv11/obs-qsv11.c485-498
QSV 支持各种码率控制方法
| 方法 | 描述 |
|---|---|
| CBR | 恒定比特率 - 维持目标比特率 |
| VBR | 可变比特率 - 改变比特率以维持质量,最高可达最大比特率 |
| CQP | 恒定量化参数 - 使用固定 QP 值 |
| ICQ | 智能恒定质量 - 基于质量的码率控制 |
来源:plugins/obs-qsv11/obs-qsv11.c599-606 plugins/obs-qsv11/QSV_Encoder.h76-80
不同的编解码器支持不同的配置文件
| 编解码器 | 配置文件 |
|---|---|
| H.264 | Baseline, Main, High |
| HEVC | Main, Main10 (用于 HDR) |
| AV1 | 主进程 |
来源:plugins/obs-qsv11/obs-qsv11.c502-525 plugins/obs-qsv11/QSV_Encoder.h82-84
QSV 提供不同的流媒体延迟模式
| 模式 | 描述 |
|---|---|
| 超低 | 端到端延迟 <500ms,最低质量 |
| 低 | 降低延迟并带有一些前瞻 |
| 正常 | 更高延迟,但质量更好 |
来源:plugins/obs-qsv11/data/locale/en-US.ini8-9 plugins/obs-qsv11/obs-qsv11.c609-621
QSV 插件执行平台检测以确定可用的 Intel GPU 及其功能,包括支持的编解码器。
来源:plugins/obs-qsv11/obs-qsv11-plugin-main.c76-107 plugins/obs-qsv11/common_utils_windows.cpp159-229 plugins/obs-qsv11/common_utils_linux.cpp478-518
对于基于纹理的编码,插件实现了 OBS 和 Intel 编码器之间的直接 GPU 内存共享。
对于 Windows,这使用 Direct3D 11 共享纹理。对于 Linux,这使用 VA-API 和 DRM PRIME 缓冲区共享。
来源:plugins/obs-qsv11/QSV_Encoder_Internal.cpp787-832 plugins/obs-qsv11/common_utils_linux.cpp223-245
编解码器的可用性取决于 Intel GPU 硬件。
| 编解码器 | 最低硬件要求 |
|---|---|
| H.264 | 第二代 Intel Core (Sandy Bridge) 或更新 |
| HEVC | 第五代 Intel Core (Broadwell) 或更新 |
| AV1 | 第十二代 Intel Core (Alder Lake) 或更新 |
该插件自动检测可用的 GPU 功能,并仅启用支持的编解码器。
来源:plugins/obs-qsv11/QSV_Encoder.cpp235-315 plugins/obs-qsv11/obs-qsv-test/obs-qsv-test.cpp94-112
QSV 编码器实现了全面的错误处理,为用户提供有意义的反馈。
发生错误时,插件会提供描述性的错误消息以指导用户。
来源:plugins/obs-qsv11/QSV_Encoder.cpp76-128 plugins/obs-qsv11/obs-qsv11.c769-799
QSV 编码器通过回调函数与 OBS 的编码器 API 集成
这些回调在插件加载时注册到 OBS。
来源:plugins/obs-qsv11/obs-qsv11.c111-133 plugins/obs-qsv11/obs-qsv11.c834-847
在 Windows 上,QSV 编码器使用 DirectX 11 进行 GPU 内存管理。
来源:plugins/obs-qsv11/common_directx11.cpp1-45 plugins/obs-qsv11/common_utils_windows.cpp18-121
在 Linux 上,QSV 编码器使用 VA-API 进行 GPU 内存管理。
来源:plugins/obs-qsv11/common_utils_linux.cpp30-155 plugins/obs-qsv11/common_utils_linux.cpp396-480
QSV 编码器为拥有 Intel GPU 的 OBS 用户提供高效的硬件加速编码解决方案。通过利用 Intel 的 QuickSync Video 技术,它以最小的 CPU 使用率提供良好的视频质量。该插件支持多种编解码器(H.264、HEVC、AV1)和各种配置选项,以平衡质量、性能和比特率要求。