GStreamer - ArchWiki

Jump to content
From ArchWiki

GStreamer is a pipeline-based multimedia framework written in the C programming language with the type system based on GObject.

GStreamer allows a programmer to create a 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, streaming media broadcasters, and media players.

Designed to be cross-platform, it is known to work on Linux (x86, PowerPC and ARM), Solaris (Intel and SPARC), macOS, Microsoft Windows and OS/400. GStreamer has bindings for programming-languages like Python, C++, Perl, GNU Guile (guile), and Ruby. GStreamer is free software, licensed under the GNU Lesser General Public License.

## 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.

- gst-libav - Libav-based plugin containing many decoders and encoders.
- 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 LGPL license.
- gst-plugins-ugly - Good-quality plugins that might pose distribution problems.
- gst-plugin-libde265AUR[broken link: package not found] - libde265 plugin (an open h.265 video codec implementation) for gstreamer.
- gst-plugin-openh264AUR - H.264 support.

## 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-plugin-va
      Documentation            https://gstreamer.freedesktop.org/documentation/va/
      Source release date      date
      Binary package           gst-plugin-va
      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 webkit2gtk-based browsers) by appending `avdec_av1:NONE` and `av1dec:NONE` to the list above.

## See also

- Sound system
- website

Category:

- Multimedia

Hidden category:

- Pages with broken package links