GStreamer
来自 维基百科
- GStreamer 是一个基于流水线 (pipeline) 的多媒体框架,它将各种媒体处理系统连接在一起以完成复杂的工作流。例如,GStreamer 可用于构建一个读取某种格式文件、对其进行处理并以另一种格式导出文件的系统。格式和处理过程可以以插件即用的方式进行更改。
- GStreamer 支持广泛的媒体处理组件,包括简单的音频播放、音视频播放、录制、流传输和编辑。其流水线设计为创建多种类型的多媒体应用程序(如视频编辑器、转码器、流媒体广播软件和媒体播放器)提供了基础。
安装
为了使 GStreamer 发挥作用,请安装所需的插件包。有关每个插件的功能列表,请参阅 官方文档。
涵盖大多数用例的常用软件包集
- gst-libav — 基于 Libav 的插件,包含许多解码器和编码器。
- gst-plugin-pipewire — 对 PipeWire 音频系统的支持。
- gst-plugin-va — 对 VA-API 系统的支持。
- gst-plugins-bad — 需要更多质量优化、测试或文档的插件。
- gst-plugins-base — 基础且典型的元素集。
- gst-plugins-good — LGPL 许可下的高质量插件。还包含对 PulseAudio 的支持。
- gst-plugins-ugly — 高质量但可能存在分发问题的插件。
用法
使用 gst-launch-1.0
GStreamer 的一个实用工具是 gst-launch-1.0(1) 命令。这是一个极其多功能的命令行工具,用于创建 GStreamer 流水线。它与 FFmpeg 命令非常相似,并能完成许多 FFmpeg 能做的事情。以下是一些示例
将 MP4 文件转换为 MKV
$ gst-launch-1.0 filesrc location=source.mp4 ! qtdemux name=demux matroskamux name=mux ! filesink location=dest.mkv demux.audio_0 ! queue ! aacparse ! queue ! mux.audio_0 demux.video_0 ! queue ! h264parse ! queue ! mux.video_0
使用 gst-discoverer-1.0
另一个实用工具是 gst-discoverer-1.0(1),它是 FFmpeg 中 ffprobe(1) 的 GStreamer 等效工具。
获取视频文件的信息
$ gst-discoverer-1.0 file.mp4
Properties:
Duration: 0:02:55.613000000
Seekable: yes
Live: no
container: Quicktime
audio: MPEG-4 AAC
Stream ID: c910ef2fa357f9f4ad365aebc98cfca88d23fdca99d832645f5113efa43b0cd3/002
Language: <unknown>
Channels: 2 (front-left, front-right)
Sample rate: 44100
Depth: 16
Bitrate: 125588
Max bitrate: 125588
video: H.264 (Constrained Baseline Profile)
Stream ID: c910ef2fa357f9f4ad365aebc98cfca88d23fdca99d832645f5113efa43b0cd3/001
Width: 192
Height: 144
Depth: 24
Frame rate: 15000/1001
Pixel aspect ratio: 1/1
Interlaced: false
Bitrate: 107884
Max bitrate: 107884
集成
PulseAudio
PulseAudio 支持由 gst-plugins-good 软件包提供。
PipeWire
PipeWire 支持由 gst-plugin-pipewire 软件包提供。
KDE / Phonon 集成
请参阅 Phonon。
硬件视频加速
请参阅 硬件视频加速。
GStreamer 将自动检测并使用正确的 API [1]。根据系统情况安装
- gst-plugin-va 以支持 VA-API。
- gst-plugins-bad 和 nvidia-utils 以支持 NVDECODE/NVENCODE。
如果在安装软件包后新元素没有出现,您可能需要删除并重建插件注册表。通常只需执行
$ rm ~/.cache/gstreamer-1.0/registry.*.bin
GStreamer 将在下次调用时重建注册表,这通常需要几秒钟。
验证 VA-API 支持
要验证 VA-API 支持
$ gst-inspect-1.0 va
Plugin Details: Name va Description VA-API codecs plugin Filename /usr/lib/gstreamer-1.0/libgstva.so Version version License LGPL Source module gst-plugins-bad Documentation https://gstreamer.freedesktop.org/documentation/va/ Source release date date Binary package Arch Linux gst-plugins-bad version Origin URL https://archlinux.org.cn/ vaav1dec: VA-API AV1 Decoder vacompositor: VA-API Video Compositor vadeinterlace: VA-API Deinterlacer vah264dec: VA-API H.264 Decoder vah264enc: VA-API H.264 Encoder vah264lpenc: VA-API H.264 Low Power Encoder vah265dec: VA-API H.265 Decoder vah265enc: VA-API H.265 Encoder vah265lpenc: VA-API H.265 Low Power Encoder vajpegdec: VA-API JPEG Decoder vampeg2dec: VA-API Mpeg2 Decoder vapostproc: VA-API Video Postprocessor vavp8dec: VA-API VP8 Decoder vavp9dec: VA-API VP9 Decoder 14 features: +-- 14 elements
验证 NVDECODE/NVENCODE 支持
要验证 NVDECODE/NVENCODE 支持
$ gst-inspect-1.0 nvcodec
Plugin Details: Name nvcodec Description GStreamer NVCODEC plugin Filename /usr/lib/gstreamer-1.0/libgstnvcodec.so Version version License LGPL Source module gst-plugins-bad Source release date date Binary package GStreamer Bad Plugins (Arch Linux) Origin URL https://archlinux.org.cn/ cudadownload: CUDA downloader cudaupload: CUDA uploader nvautogpuh264enc: NVENC H.264 Video Encoder Auto GPU select Mode nvautogpuh265enc: NVENC H.265 Video Encoder Auto GPU select Mode nvav1dec: NVDEC AV1 Decoder nvcudah264enc: NVENC H.264 Video Encoder CUDA Mode nvcudah265enc: NVENC H.265 Video Encoder CUDA Mode nvh264dec: NVDEC h264 Video Decoder nvh264enc: NVENC H.264 Video Encoder nvh264sldec: NVDEC H.264 Stateless Decoder nvh265dec: NVDEC h265 Video Decoder nvh265enc: NVENC HEVC Video Encoder nvh265sldec: NVDEC H.265 Stateless Decoder nvjpegdec: NVDEC jpeg Video Decoder nvmpeg2videodec: NVDEC mpeg2video Video Decoder nvmpeg4videodec: NVDEC mpeg4video Video Decoder nvmpegvideodec: NVDEC mpegvideo Video Decoder nvvp8dec: NVDEC vp8 Video Decoder nvvp8sldec: NVDEC VP8 Stateless Decoder nvvp9dec: NVDEC vp9 Video Decoder nvvp9sldec: NVDEC VP9 Stateless Decoder 21 features: +-- 21 elements
设置解码器优先级 (ranks)
对于某些 NVIDIA 用户,gst-libav 可能会优先使用 Libav 解码器而非 nvcodec 解码器,这将导致硬件加速失效。可以使用 GST_PLUGIN_FEATURE_RANK 环境变量 对解码器进行排序,从而解决此问题。更多信息请参阅文档中的 "GST_PLUGIN_FEATURE_RANK" 部分。例如
GST_PLUGIN_FEATURE_RANK=nvmpegvideodec:MAX,nvmpeg2videodec:MAX,nvmpeg4videodec:MAX,nvh264sldec:MAX,nvh264dec:MAX,nvjpegdec:MAX,nvh265sldec:MAX,nvh265dec:MAX,nvvp9dec:MAX
没有 AV1 硬件支持的用户可能还希望禁用 AV1 解码器(例如,针对基于 webkit2gtkAUR 的浏览器观看 YouTube),可以在上述列表后添加 avdec_av1:NONE 和 av1dec:NONE。