GStreamer Metal 插件
Apple 平台上 GStreamer 的 GPU 加速视频处理。七个基于 Metal 的元素以零拷贝、单次 GPU 处理替代 CPU 密集型操作。
什么是 GStreamer Metal?
GStreamer Metal(gst-vf-metal)是一个专业级 GStreamer 插件,为 macOS 和 iOS 提供基于 Metal 的常见 CPU 密集型视频元素实现。它通过 Apple 的 Metal 框架和计算着色器实现显著的性能提升,以最小的 CPU 开销实现实时视频处理。
零拷贝架构
CVMetalTextureCache 消除了冗余的 CPU-GPU 拷贝。元素在配置为默认值时自动跳过 GPU 工作。
单次 GPU 处理
所有滤镜效果(亮度、对比度、色调、色度键、LUT 等)在一次 GPU 调度中应用——效果之间没有中间帧缓冲。
混合格式合成
合成器接受异构输入格式(如 BGRA + NV12 同时使用),并自动进行格式转换。
6 种像素格式
整个元素套件支持 BGRA、RGBA、NV12、I420、UYVY 和 YUY2 像素格式。
GPU 加速元素
vfmetalcompositor
多输入视频混合与合成
- 每个焊盘的定位、缩放、Alpha 和 Z 顺序
- 混合模式:source、over、add
- 混合格式输入(BGRA + NV12 同时使用)
- 保持宽高比的尺寸策略
vfmetalvideosink
硬件加速视频渲染器和显示
- GstVideoOverlay 和 GstNavigation 支持
- 保持宽高比的自动窗口创建
- 鼠标/键盘事件转发
- BGRA、RGBA、NV12 和 I420 格式
vfmetalvideofilter
单个元素中 15 种 GPU 加速视觉效果
- 颜色:亮度、对比度、饱和度、色调、伽玛
- 效果:锐度/模糊、棕褐色、反转、噪点、暗角
- 色度键(绿幕)容差控制
- 3D LUT 色彩分级(.cube 和 .png 格式)
vfmetalconvertscale
格式转换与缩放合一
- 支持所有 6 种格式对(如 NV12→BGRA、UYVY→I420)
- 双线性和最近邻插值
- 自定义边框颜色的信箱模式
- 同时替代 videoconvert 和 videoscale
vfmetaltransform
几何变换
- 8 种旋转和翻转方法
- 按边裁剪
- 无需变换时的恒等直通
- BGRA、RGBA、NV12 和 I420 格式
vfmetaldeinterlace
GPU 加速去隔行
- Bob、weave、linear 和 greedy-H 算法
- 运动自适应去隔行(greedy-H)
- 自动/手动场序检测
- BGRA、RGBA、NV12 和 I420 格式
vfmetaloverlay
图像合成叠加
- PNG 和 JPEG 叠加支持
- 绝对和相对定位
- 自定义大小与 Alpha 混合
- BGRA、RGBA、NV12 和 I420 格式
15 种视频效果
所有效果在单次 GPU 处理中应用,可通过 GstController 进行动画:
亮度调节(-1 到 1)
对比度控制(0 到 2)
色彩饱和度(0 到 2)
色调旋转(-1 到 1)
伽玛校正(0.01 到 10)
锐度和模糊(-1 到 1)
棕褐色调效果(0 到 1)
色彩反转
噪点/颗粒叠加(0 到 1)
暗角效果(0 到 1)
色度键(绿幕移除)
色度键边缘容差
色度键边缘平滑度
通过 .cube 文件进行 3D LUT 分级(DaVinci Resolve/Adobe)
通过 .png 条带文件进行 3D LUT 分级
平台支持
macOS
13.0+(Ventura)
动态库(gstvfmetal.dylib)
iOS
14.0+
静态库(libgstvfmetal.a)
常见问题
什么是 GStreamer Metal?
GStreamer Metal 是一个开源 GStreamer 插件,为 macOS 和 iOS 提供 GPU 加速的视频处理元素。它使用 Apple 的 Metal 框架和计算着色器来替代 CPU 密集型的视频操作,在合成、色彩校正、格式转换和去隔行等任务中提供显著更好的性能。
支持哪些平台?
GStreamer Metal 支持 macOS 13.0(Ventura)及更高版本和 iOS 14.0 及更高版本。在 macOS 上构建为动态库(gstvfmetal.dylib),在 iOS 上构建为带有注册头文件的静态库(libgstvfmetal.a)。
支持哪些像素格式?
该插件支持六种像素格式:BGRA、RGBA、NV12、I420、UYVY 和 YUY2。大多数元素支持 BGRA、RGBA、NV12 和 I420,而 vfmetalconvertscale 支持所有六种格式以实现最大转换灵活性。
如何安装插件?
克隆 GitHub 仓库并运行附带的构建脚本(./build.sh)用于 macOS。对于 iOS,使用基于 CMake 的交叉编译配置。生成的库可以放置在 GStreamer 插件路径中以便自动发现。
是否免费?使用什么许可证?
是的,GStreamer Metal 完全免费且开源,在 GNU Library General Public License v2(LGPL v2)下发布。您可以在开源和商业应用中免费使用,无需许可费用。
包含哪些 GStreamer 元素?
该插件提供七个 GPU 加速元素:vfmetalcompositor(视频混合)、vfmetalvideosink(显示)、vfmetalvideofilter(15 种视觉效果)、vfmetalconvertscale(格式转换和缩放)、vfmetaltransform(旋转/翻转/裁剪)、vfmetaldeinterlace(去隔行)和 vfmetaloverlay(图像合成)。
可以在 iOS 应用中使用吗?
可以。对于 iOS,插件构建为静态库(libgstvfmetal.a),附带用于静态注册的 gstvfmetal_static.h 头文件。它与 GStreamer iOS SDK 集成,并支持 iOS 上常用的视频格式。
GPU 处理与基于 CPU 的元素相比如何?
GPU 加速处理相比基于 CPU 的 GStreamer 元素提供显著的性能提升。零拷贝架构和单次处理最小化了数据传输和帧缓冲。元素在恒等值时自动绕过 GPU 工作,确保不需要处理时没有开销。
