GStreamer: Difference between revisions
(→Hardware video acceleration: issue was fixed in 3.16.3) |
(→Hardware video acceleration: Remove gstreamer-vaapi, because it's deprecated, and gst-plugin-va is the new default and recommended package for VA-API support since GStreamer 1.24.) |
||
(45 intermediate revisions by 20 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Multimedia]] | [[Category:Multimedia]] | ||
[[de:GStreamer]] | [[de:GStreamer]] | ||
[[ja:GStreamer]] | [[ja:GStreamer]] | ||
[[zh-hans:GStreamer]] | [[zh-hans:GStreamer]] | ||
Line 14: | Line 13: | ||
[[Install]] the {{Pkg|gstreamer}} package. | [[Install]] the {{Pkg|gstreamer}} package. | ||
To make GStreamer useful, install the plugins packages you require. See [https://gstreamer.freedesktop.org/documentation/ | To make GStreamer useful, install the plugins packages you require. See [https://gstreamer.freedesktop.org/documentation/plugins_doc.html official documentation] for list of features in each plugin. | ||
* {{Pkg|gst-libav}} - Libav-based plugin containing many decoders and encoders. | * {{Pkg|gst-libav}} - [[FFmpeg|Libav-based]] plugin containing many decoders and encoders. | ||
* {{Pkg|gst-plugins-bad}} - Plugins that need more quality, testing or documentation. | * {{Pkg|gst-plugins-bad}} - Plugins that need more quality, testing or documentation. | ||
* {{Pkg|gst-plugins-base}} - Essential exemplary set of elements. | * {{Pkg|gst-plugins-base}} - Essential exemplary set of elements. | ||
* {{Pkg|gst-plugins-good}} - Good-quality plugins under LGPL license. | * {{Pkg|gst-plugins-good}} - Good-quality plugins under LGPL license. | ||
* {{Pkg|gst-plugins-ugly}} - Good-quality plugins that might pose distribution problems. | * {{Pkg|gst-plugins-ugly}} - Good-quality plugins that might pose distribution problems. | ||
* {{AUR|gst-plugin-libde265}} - {{Pkg|libde265}} plugin (an open h.265 video codec implementation) for gstreamer. | * {{AUR|gst-plugin-libde265}}{{Broken package link|package not found}} - {{Pkg|libde265}} plugin (an open h.265 video codec implementation) for gstreamer. | ||
* {{AUR|gst-plugin-openh264}} - H.264 support. | |||
== Usage == | |||
=== Using gst-launch-1.0 === | |||
A helpful tool of GStreamer is the {{man|1|gst-launch-1.0}} 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 {{man|1|gst-discoverer-1.0}}, which is the GStreamer equivalent of FFmpeg's {{man|1|ffprobe}}. | |||
Get info on a video file: | |||
{{hc|$ gst-discoverer-1.0 file.mp4|2= | |||
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 == | == Integration == | ||
Line 28: | Line 70: | ||
[[PulseAudio]] support is provided by the {{Pkg|gst-plugins-good}} package. | [[PulseAudio]] support is provided by the {{Pkg|gst-plugins-good}} package. | ||
=== PipeWire === | |||
[[PipeWire]] support is provided by the {{Pkg|gst-plugin-pipewire}} package. | |||
=== KDE / Phonon integration === | === KDE / Phonon integration === | ||
Line 37: | Line 83: | ||
See [[Hardware video acceleration]]. | See [[Hardware video acceleration]]. | ||
GStreamer will automatically detect and use the correct API [https://gstreamer.freedesktop.org/documentation/tutorials/playback/hardware-accelerated-video-decoding.html]. Depending on | GStreamer will automatically detect and use the correct API [https://gstreamer.freedesktop.org/documentation/tutorials/playback/hardware-accelerated-video-decoding.html]. Depending on the system [[install]]: | ||
* {{pkg| | |||
* {{pkg|gst-plugins-bad}} for | * {{pkg|gst-plugin-va}} for [[VA-API]] support. | ||
* {{pkg|gst-plugins-bad}} and {{pkg|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: | |||
{{hc|$ gst-inspect-1.0 va|2= | |||
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: | |||
{{hc|$ gst-inspect-1.0 nvcodec|2= | |||
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 <nowiki>https://archlinux.org/</nowiki> | |||
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, {{Pkg|gst-libav}} may prioritize the Libav decoder over [https://gstreamer.freedesktop.org/documentation/nvcodec/index.html nvcodec] decoders which will inhibit hardware acceleration. The {{ic|GST_PLUGIN_FEATURE_RANK}} [[environment variable]] can be used to rank decoders and thus alleviate this issue. See "GST_PLUGIN_FEATURE_RANK" in the [https://gstreamer.freedesktop.org/documentation/gstreamer/running.html#environment-variables 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 {{Pkg|webkit2gtk}}-based browsers) by appending {{ic|avdec_av1:NONE}} and {{ic|av1dec:NONE}} to the list above. | |||
== See also == | == See also == |
Latest revision as of 11:50, 8 March 2024
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-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 webkit2gtk-based browsers) by appending avdec_av1:NONE
and av1dec:NONE
to the list above.