[https://gstreamer.freedesktop.org/ GStreamer] is a popular multimedia framework to handle a variety of video and audio formats on different platforms in a uniform way through a powerful and convenient API in order to build multimedia apps, video/audio editors and streaming services. It consists of a huge amount low-level plugins like "videotestsrc", "videoconvert" and "autovideosink" as well as a few higher level test-and-combine framework tools like "gst-inspect", "gst-launch" etc.
== Installing via nixpkgs ==
In Nix as in other Linux distributions those tools and plugins are split into separate packages, which you can bring together with a custom Nix shell environment:
<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
# file: flake.nix
{
{
description = "A GStreamer development flake";
description = "A GStreamer development flake";
Line 14:
Line 19:
# Common plugins like "filesrc" to combine within e.g. gst-launch
# Common plugins like "filesrc" to combine within e.g. gst-launch
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-base
# Specialized plugins separated by quality
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
gst_all_1.gst-plugins-bad
Line 21:
Line 27:
# Support the Video Audio (Hardware) Acceleration API
# Support the Video Audio (Hardware) Acceleration API
gst_all_1.gst-vaapi
gst_all_1.gst-vaapi
#...
];
];
};
};
Line 27:
Line 34:
</syntaxhighlight>
</syntaxhighlight>
To activate this environment in your terminal run
<syntaxhighlight lang="nix">
$ nix develop
</syntaxhighlight>
You can find all available Nix package names through the [https://search.nixos.org/packages?query=gst_all_1. Nix search page].
== Test the installation ==
You can test that the <code>gst_all_1.gstreamer</code> tools are available by running a dummy pipeline
You can test that the <code>gst_all_1.gstreamer</code> tools are available by running a dummy pipeline
You can test that the plugins like from <code>gst_all_1.gst-plugins-base</code> are known available by playing a video on you machine with
You can test that the plugins like from <code>gst_all_1.gst-plugins-base</code> are available to the higher level tools by inspecting such a base plugin like <code>filesrc</code> with
If the plugins are not correctly made available to the higher level tools, you'll get an error
<syntaxhighlight lang="nix">
$ gst-inspect-1.0 filesrc
No such element or plugin 'filesrc'
</syntaxhighlight>
== Troubleshooting ==
==== erroneous pipeline: no element "filesrc" ====
In some cases while creating a shell using "mkShell" or "writeShellApplication" just setting the "runtimeInputs" is not enough. It's necessary to manually set the "GST_PLUGIN_SYSTEM_PATH_1_0" environment variable.<ref>https://discourse.nixos.org/t/how-to-use-gst-plugins/6345</ref>
Adding the following export to your script, sets "gstreamer" and "gst-plugins-base" and "gst-plugins-good" paths. Similarly you can add any other "gst-plugins" package as well.
* [[File:Screenshot From 2025-03-28 12-51-31.png|thumb|"Audio and Video Properties" of "Properties" window of nautilus after fix]]use <code>sudo nano /etc/nixos/configuration.nix</code> and set the environment variable <code>GST_PLUGIN_PATH</code>:<syntaxhighlight lang="nix" line="1">{ config, pkgs, ... }:
</syntaxhighlight>A system restart is needed to get the environment variable set system wide.
Revision as of 11:54, 28 March 2025
GStreamer is a popular multimedia framework to handle a variety of video and audio formats on different platforms in a uniform way through a powerful and convenient API in order to build multimedia apps, video/audio editors and streaming services. It consists of a huge amount low-level plugins like "videotestsrc", "videoconvert" and "autovideosink" as well as a few higher level test-and-combine framework tools like "gst-inspect", "gst-launch" etc.
Installing via nixpkgs
In Nix as in other Linux distributions those tools and plugins are split into separate packages, which you can bring together with a custom Nix shell environment:
# file: flake.nix{description="A GStreamer development flake";outputs={ self, nixpkgs }:letsystem="x86_64-linux";pkgs= nixpkgs.legacyPackages.${system};in{
devShells.${system}.default= pkgs.mkShell {buildInputs=with pkgs;[# Video/Audio data composition framework tools like "gst-inspect", "gst-launch" ...
gst_all_1.gstreamer
# Common plugins like "filesrc" to combine within e.g. gst-launch
gst_all_1.gst-plugins-base
# Specialized plugins separated by quality
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
gst_all_1.gst-plugins-ugly
# Plugins to reuse ffmpeg to play almost every video format
gst_all_1.gst-libav
# Support the Video Audio (Hardware) Acceleration API
gst_all_1.gst-vaapi
#...];};};}
To activate this environment in your terminal run
$ nix develop
You can find all available Nix package names through the Nix search page.
Test the installation
You can test that the gst_all_1.gstreamer tools are available by running a dummy pipeline
You can test that the plugins like from gst_all_1.gst-plugins-base are available to the higher level tools by inspecting such a base plugin like filesrc with
$ gst-inspect-1.0 filesrc
Factory Details:...
Long-name File Source
Description Read from arbitrary point in a file
...
Plugin Details:
Name coreelements
Description GStreamer core elements
Filename /nix/store/p39g1.../libgstcoreelements.so...
or by using it in a pipeline. Here, we could play a video from the local machine with
If the plugins are not correctly made available to the higher level tools, you'll get an error
$ gst-inspect-1.0 filesrc
No such element or plugin 'filesrc'
Troubleshooting
erroneous pipeline: no element "filesrc"
In some cases while creating a shell using "mkShell" or "writeShellApplication" just setting the "runtimeInputs" is not enough. It's necessary to manually set the "GST_PLUGIN_SYSTEM_PATH_1_0" environment variable.[1]
Adding the following export to your script, sets "gstreamer" and "gst-plugins-base" and "gst-plugins-good" paths. Similarly you can add any other "gst-plugins" package as well.
"Audio and Video Properties" of "Properties" window of nautilus after fixuse sudo nano /etc/nixos/configuration.nix and set the environment variable GST_PLUGIN_PATH: