GStreamer - ArchWiki

Jump to content

# GStreamer

From ArchWiki

Related articles

- FFmpeg

From Wikipedia:

  GStreamer is a pipeline-based multimedia framework that links together a wide variety of media processing systems to complete complex workflows. For instance, GStreamer can be used to build a system that reads files in one format, processes them, and exports them in another. The formats and processes can be changed in a plug and play fashion.
  GStreamer supports a wide variety of media-handling components, including simple audio playback, audio and video playback, recording, streaming and editing. The pipeline design serves as a base to create many types of multimedia applications such as video editors, transcoders, streaming media broadcasters and media players.

## Installation

Install the gstreamer package.

To make GStreamer useful, install the plugins packages you require. See official documentation for list of features in each plugin.

Common set of packages that cover the majority of use-cases:

- gst-libav — Libav-based plugin containing many decoders and encoders.
- gst-plugin-pipewire — Support for the PipeWire audio system.
- gst-plugin-va — Support for the VA-API system.
- gst-plugins-bad — Plugins that need more quality, testing or documentation.
- gst-plugins-base — Essential exemplary set of elements.
- gst-plugins-good — Good-quality plugins under the LGPL license. Also contains support for PulseAudio.
- gst-plugins-ugly — Good-quality plugins that might pose distribution problems.

## Usage

### Using gst-launch-1.0

A helpful tool of GStreamer is the gst-launch-1.0(1) command. It is an extremely versatile command line tool to create GStreamer pipelines. It is very similar to and can do many of the things the FFmpeg command can do. Here are some examples:

Convert an MP4 file to 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

### Using gst-discoverer-1.0

Another helpful tool is gst-discoverer-1.0(1), which is the GStreamer equivalent of FFmpeg's ffprobe(1).

Get info on a video file:

    $ 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

## Integration

### PulseAudio

PulseAudio support is provided by the gst-plugins-good package.

### PipeWire

PipeWire support is provided by the gst-plugin-pipewire package.

### KDE / Phonon integration

See Phonon.

### Hardware video acceleration

See Hardware video acceleration.

GStreamer will automatically detect and use the correct API [1]. Depending on the system install:

- gst-plugin-va for VA-API support.
- gst-plugins-bad and nvidia-utils for NVDECODE/NVENCODE support.

If the new elements do not show up after installing the packages, you may want to delete and rebuild the plugin registry. Usually it suffices to:

    $ rm ~/.cache/gstreamer-1.0/registry.*.bin

GStreamer will then rebuild the registry on the next invocation, which usually takes a few seconds.

#### Verify VA-API support

To verify VA-API support:

    $ 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/

      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

#### Verify NVDECODE/NVENCODE support

To verify NVDECODE/NVENCODE support:

    $ 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/

      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

#### Set decoder ranks

For some NVIDIA users, gst-libav may prioritize the Libav decoder over nvcodec decoders which will inhibit hardware acceleration. The `GST_PLUGIN_FEATURE_RANK` environment variable can be used to rank decoders and thus alleviate this issue. See "GST_PLUGIN_FEATURE_RANK" in the documentation for more information. For example:

    GST_PLUGIN_FEATURE_RANK=nvmpegvideodec:MAX,nvmpeg2videodec:MAX,nvmpeg4videodec:MAX,nvh264sldec:MAX,nvh264dec:MAX,nvjpegdec:MAX,nvh265sldec:MAX,nvh265dec:MAX,nvvp9dec:MAX

Those without AV1 hardware support may also want to disable AV1 decoders (e.g., for YouTube on webkit2gtkAUR-based browsers) by appending `avdec_av1:NONE` and `av1dec:NONE` to the list above.

## See also

- Sound system
- website

Category:

- Multimedia

GStreamer
Add topic