跳转至内容

GStreamer

来自 ArchWiki

来自 Wikipedia

GStreamer 是一个基于管道的多媒体框架,它将各种媒体处理系统连接起来以完成复杂的工作流程。例如,GStreamer 可用于构建一个读取一种格式的文件、对其进行处理,然后将其导出为另一种格式的系统。格式和处理可以即插即用式地进行更改。
GStreamer 支持多种多样的媒体处理组件,包括简单的音频播放、音视频播放、录制、流媒体和编辑。管道设计为创建多种类型的多媒体应用(如视频编辑器、转码器、流媒体广播器和媒体播放器)奠定了基础。

安装

安装 gstreamer 包。

为了使 GStreamer 发挥作用,请安装您需要的插件包。请参阅 官方文档 以获取每个插件特性的列表。

用法

使用 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),它是 GStreamer 中与 FFmpeg 的 ffprobe(1) 相当的工具。

获取视频文件信息

$ 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]。根据您的系统,请

如果安装了软件包后新元素没有出现,您可能需要删除并重新构建插件注册表。通常,这样做就足够了:

$ 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

设置解码器优先级

对于一些 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 解码器(例如,对于基于 webkit2gtk 的浏览器上的 YouTube),方法是在上面的列表中添加 `avdec_av1:NONE` 和 `av1dec:NONE`。

参见