2016-05-27 02:21:04 +00:00
|
|
|
|
# Basic tutorial 10: GStreamer tools
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
## Goal
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
GStreamer comes with a set of tools which range from handy to
|
|
|
|
|
absolutely essential. There is no code in this tutorial, just sit back
|
|
|
|
|
and relax, and we will teach you:
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
- How to build and run GStreamer pipelines from the command line,
|
2016-06-16 00:00:24 +00:00
|
|
|
|
without using C at all!
|
2016-05-16 14:30:34 +00:00
|
|
|
|
- How to find out what GStreamer elements you have available and their
|
|
|
|
|
capabilities.
|
|
|
|
|
- How to discover the internal structure of media files.
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
## Introduction
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-17 22:21:42 +00:00
|
|
|
|
These tools are available in the bin directory of the GStreamer
|
|
|
|
|
binaries. You need to move to this directory to execute them, because
|
|
|
|
|
it is not added to the system’s `PATH` environment variable (to avoid
|
|
|
|
|
polluting it too much).
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Just open a terminal (or console window) and go to the `bin` directory
|
2016-06-17 22:21:42 +00:00
|
|
|
|
of your GStreamer installation (Read again the [Installing
|
2016-10-06 19:41:20 +00:00
|
|
|
|
GStreamer](sdk-installing.md) section to find our where this is),
|
2016-05-16 14:30:34 +00:00
|
|
|
|
and you are ready to start typing the commands given in this tutorial.
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
|
|
|
|
|
> ![Information](images/icons/emoticons/information.png)
|
|
|
|
|
>
|
|
|
|
|
>On Linux, though, you can use the provided
|
|
|
|
|
>`/opt/gstreamer-sdk/bin/gst-sdk-shell` script to enter the
|
|
|
|
|
>GStreamer SDK shell environment, in which the <code>bin</code>
|
|
|
|
|
>directory is in the path. In this environment, you can use the
|
|
|
|
|
>GStreamer tools from any folder.
|
|
|
|
|
|
|
|
|
|
**FIXME: What is this now? Just refer to /usr/bin of the distro??**
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
In order to allow for multiple versions of GStreamer to coexists in the
|
|
|
|
|
same system, these tools are versioned, this is, a GStreamer version
|
2016-06-17 22:21:42 +00:00
|
|
|
|
number is appended to their name. This version is based on
|
2016-05-27 16:10:42 +00:00
|
|
|
|
GStreamer 1.0, so the tools are called `gst-launch-1.0`,
|
2016-06-16 00:00:24 +00:00
|
|
|
|
`gst-inspect-1.0` and `gst-discoverer-1.0`
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
## `gst-launch-1.0`
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
This tool accepts a textual description of a pipeline, instantiates it,
|
|
|
|
|
and sets it to the PLAYING state. It allows you to quickly check if a
|
|
|
|
|
given pipeline works, before going through the actual implementation
|
|
|
|
|
using GStreamer API calls.
|
|
|
|
|
|
|
|
|
|
Bear in mind that it can only create simple pipelines. In particular, it
|
|
|
|
|
can only simulate the interaction of the pipeline with the application
|
|
|
|
|
up to a certain level. In any case, it is extremely handy to test
|
|
|
|
|
pipelines quickly, and is used by GStreamer developers around the world
|
|
|
|
|
on a daily basis.
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Please note that `gst-launch-1.0` is primarily a debugging tool for
|
2016-05-16 14:30:34 +00:00
|
|
|
|
developers. You should not build applications on top of it. Instead, use
|
2016-06-16 00:00:24 +00:00
|
|
|
|
the `gst_parse_launch()` function of the GStreamer API as an easy way to
|
2016-05-16 14:30:34 +00:00
|
|
|
|
construct pipelines from pipeline descriptions.
|
|
|
|
|
|
|
|
|
|
Although the rules to construct pipeline descriptions are very simple,
|
|
|
|
|
the concatenation of multiple elements can quickly make such
|
|
|
|
|
descriptions resemble black magic. Fear not, for everyone learns the
|
2016-06-16 00:00:24 +00:00
|
|
|
|
`gst-launch-1.0` syntax, eventually.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-05-27 16:10:42 +00:00
|
|
|
|
The command line for gst-launch-1.0 consists of a list of options followed
|
2016-06-16 00:00:24 +00:00
|
|
|
|
by a PIPELINE-DESCRIPTION. Some simplified instructions are given next,
|
|
|
|
|
se the complete documentation at [the reference page](gst-launch.md)
|
|
|
|
|
for `gst-launch-1.0`.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
### Elements
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
In simple form, a PIPELINE-DESCRIPTION is a list of element types
|
2016-06-16 00:00:24 +00:00
|
|
|
|
separated by exclamation marks (!). Go ahead and type in the following
|
2016-05-16 14:30:34 +00:00
|
|
|
|
command:
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-06-16 00:00:24 +00:00
|
|
|
|
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
You should see a windows with an animated video pattern. Use CTRL+C on
|
|
|
|
|
the terminal to stop the program.
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
This instantiates a new element of type `videotestsrc` (an element which
|
|
|
|
|
generates a sample video pattern), an `videoconvert` (an element
|
|
|
|
|
which does raw video format conversion, making sure other elements can
|
|
|
|
|
understand each other), and an `autovideosink` (a window to which video
|
2016-05-16 14:30:34 +00:00
|
|
|
|
is rendered). Then, GStreamer tries to link the output of each element
|
|
|
|
|
to the input of the element appearing on its right in the description.
|
|
|
|
|
If more than one input or output Pad is available, the Pad Caps are used
|
|
|
|
|
to find two compatible Pads.
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
### Properties
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
Properties may be appended to elements, in the form
|
2016-06-16 00:00:24 +00:00
|
|
|
|
*property=value *(multiple properties can be specified, separated by
|
|
|
|
|
spaces). Use the `gst-inspect-1.0` tool (explained next) to find out the
|
2016-05-16 14:30:34 +00:00
|
|
|
|
available properties for an
|
|
|
|
|
element.
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-06-16 00:00:24 +00:00
|
|
|
|
gst-launch-1.0 videotestsrc pattern=11 ! videoconvert ! autovideosink
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
You should see a static video pattern, made of circles.
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
### Named elements
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Elements can be named using the `name` property, in this way complex
|
2016-05-16 14:30:34 +00:00
|
|
|
|
pipelines involving branches can be created. Names allow linking to
|
|
|
|
|
elements created previously in the description, and are indispensable to
|
|
|
|
|
use elements with multiple output pads, like demuxers or tees, for
|
|
|
|
|
example.
|
|
|
|
|
|
|
|
|
|
Named elements are referred to using their name followed by a
|
|
|
|
|
dot.
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-06-16 00:00:24 +00:00
|
|
|
|
gst-launch-1.0 videotestsrc ! videoconvert ! tee name=t ! queue ! autovideosink t. ! queue ! autovideosink
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
You should see two video windows, showing the same sample video pattern.
|
|
|
|
|
If you see only one, try to move it, since it is probably on top of the
|
|
|
|
|
second window.
|
|
|
|
|
|
|
|
|
|
This example instantiates a `videotestsrc`, linked to a
|
2016-06-16 00:00:24 +00:00
|
|
|
|
`videoconvert`, linked to a `tee` (Remember from [](sdk-basic-tutorial-multithreading-and-pad-availability.md) that
|
|
|
|
|
a `tee` copies to each of its output pads everything coming through its
|
|
|
|
|
input pad). The `tee` is named simply ‘t’ (using the `name` property)
|
|
|
|
|
and then linked to a `queue` and an `autovideosink`. The same `tee` is
|
2016-05-16 14:30:34 +00:00
|
|
|
|
referred to using ‘t.’ (mind the dot) and then linked to a second
|
2016-06-16 00:00:24 +00:00
|
|
|
|
`queue` and a second `autovideosink`.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
To learn why the queues are necessary read [](sdk-basic-tutorial-multithreading-and-pad-availability.md).
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
### Pads
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
Instead of letting GStreamer choose which Pad to use when linking two
|
2016-06-16 00:00:24 +00:00
|
|
|
|
elements, you may want to specify the Pads directly. You can do this by
|
2016-05-16 14:30:34 +00:00
|
|
|
|
adding a dot plus the Pad name after the name of the element (it must be
|
|
|
|
|
a named element). Learn the names of the Pads of an element by using
|
2016-06-16 00:00:24 +00:00
|
|
|
|
the `gst-inspect-1.0` tool.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
This is useful, for example, when you want to retrieve one particular
|
|
|
|
|
stream out of a
|
|
|
|
|
demuxer:
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux name=d d.video_00 ! matroskamux ! filesink location=sintel_video.mkv
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This fetches a media file from the internet using `souphttpsrc`, which
|
2016-06-16 00:00:24 +00:00
|
|
|
|
is in webm format (a special kind of Matroska container, see [](sdk-basic-tutorial-concepts.md)). We
|
2016-05-16 14:30:34 +00:00
|
|
|
|
then open the container using `matroskademux`. This media contains both
|
2016-06-16 00:00:24 +00:00
|
|
|
|
audio and video, so `matroskademux` will create two output Pads, named
|
|
|
|
|
`video_00` and `audio_00`. We link `video_00` to a `matroskamux` element
|
2016-05-16 14:30:34 +00:00
|
|
|
|
to re-pack the video stream into a new container, and finally link it to
|
|
|
|
|
a `filesink`, which will write the stream into a file named
|
|
|
|
|
"sintel\_video.mkv" (the `location` property specifies the name of the
|
|
|
|
|
file).
|
|
|
|
|
|
|
|
|
|
All in all, we took a webm file, stripped it of audio, and generated a
|
|
|
|
|
new matroska file with the video. If we wanted to keep only the
|
|
|
|
|
audio:
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux name=d d.audio_00 ! vorbisparse ! matroskamux ! filesink location=sintel_audio.mka
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
The `vorbisparse` element is required to extract some information from
|
2016-05-16 14:30:34 +00:00
|
|
|
|
the stream and put it in the Pad Caps, so the next element,
|
|
|
|
|
`matroskamux`, knows how to deal with the stream. In the case of video
|
2016-06-16 00:00:24 +00:00
|
|
|
|
this was not necessary, because `matroskademux` already extracted this
|
2016-05-16 14:30:34 +00:00
|
|
|
|
information and added it to the Caps.
|
|
|
|
|
|
|
|
|
|
Note that in the above two examples no media has been decoded or played.
|
|
|
|
|
We have just moved from one container to another (demultiplexing and
|
|
|
|
|
re-multiplexing again).
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
### Caps filters
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
When an element has more than one output pad, it might happen that the
|
|
|
|
|
link to the next element is ambiguous: the next element may have more
|
|
|
|
|
than one compatible input pad, or its input pad may be compatible with
|
|
|
|
|
the Pad Caps of all the output pads. In these cases GStreamer will link
|
|
|
|
|
using the first pad that is available, which pretty much amounts to
|
|
|
|
|
saying that GStreamer will choose one output pad at random.
|
|
|
|
|
|
|
|
|
|
Consider the following
|
|
|
|
|
pipeline:
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux ! filesink location=test
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
This is the same media file and demuxer as in the previous example. The
|
|
|
|
|
input Pad Caps of `filesink` are `ANY`, meaning that it can accept any
|
|
|
|
|
kind of media. Which one of the two output pads of `matroskademux` will
|
|
|
|
|
be linked against the filesink? `video_00` or `audio_00`? You cannot
|
2016-05-16 14:30:34 +00:00
|
|
|
|
know.
|
|
|
|
|
|
|
|
|
|
You can remove this ambiguity, though, by using named pads, as in the
|
|
|
|
|
previous sub-section, or by using **Caps
|
|
|
|
|
Filters**:
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux ! video/x-vp8 ! matroskamux ! filesink location=sintel_video.mkv
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
A Caps Filter behaves like a pass-through element which does nothing and
|
|
|
|
|
only accepts media with the given Caps, effectively resolving the
|
2016-06-16 00:00:24 +00:00
|
|
|
|
ambiguity. In this example, between `matroskademux` and `matroskamux` we
|
|
|
|
|
added a `video/x-vp8` Caps Filter to specify that we are interested in
|
|
|
|
|
the output pad of `matroskademux` which can produce this kind of video.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
To find out the Caps an element accepts and produces, use the
|
2016-06-16 00:00:24 +00:00
|
|
|
|
`gst-inspect-1.0` tool. To find out the Caps contained in a particular file,
|
|
|
|
|
use the `gst-discoverer-1.0` tool. To find out the Caps an element is
|
|
|
|
|
producing for a particular pipeline, run `gst-launch-1.0` as usual, with the
|
|
|
|
|
`–v` option to print Caps information.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
### Examples
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Play a media file using `playbin` (as in [](sdk-basic-tutorial-hello-world.md)):
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-launch-1.0 playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
A fully operation playback pipeline, with audio and video (more or less
|
2016-06-16 00:00:24 +00:00
|
|
|
|
the same pipeline that `playbin` will create
|
2016-05-16 14:30:34 +00:00
|
|
|
|
internally):
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux name=d ! queue ! vp8dec ! videoconvert ! autovideosink d. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
A transcoding pipeline, which opens the webm container and decodes both
|
2016-05-16 14:30:34 +00:00
|
|
|
|
streams (via uridecodebin), then re-encodes the audio and video branches
|
|
|
|
|
with a different codec, and puts them back together in an Ogg container
|
|
|
|
|
(just for the sake of
|
|
|
|
|
it).
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-launch-1.0 uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm name=d ! queue ! theoraenc ! oggmux name=m ! filesink location=sintel.ogg d. ! queue ! audioconvert ! audioresample ! flacenc ! m.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
A rescaling pipeline. The `videoscale` element performs a rescaling
|
2016-05-16 14:30:34 +00:00
|
|
|
|
operation whenever the frame size is different in the input and the
|
|
|
|
|
output caps. The output caps are set by the Caps Filter to
|
|
|
|
|
320x200.
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-launch-1.0 uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! queue ! videoscale ! video/x-raw-yuv,width=320,height=200 ! videoconvert ! autovideosink
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
This short description of `gst-launch-1.0` should be enough to get you
|
2016-05-16 14:30:34 +00:00
|
|
|
|
started. Remember that you have the [complete documentation available
|
2016-06-16 00:00:24 +00:00
|
|
|
|
here](gst-launch.md).
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
## `gst-inspect-1.0`
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
This tool has three modes of operation:
|
|
|
|
|
|
|
|
|
|
- Without arguments, it lists all available elements types, this is,
|
|
|
|
|
the types you can use to instantiate new elements.
|
|
|
|
|
- With a file name as an argument, it treats the file as a GStreamer
|
|
|
|
|
plugin, tries to open it, and lists all the elements described
|
|
|
|
|
inside.
|
|
|
|
|
- With a GStreamer element name as an argument, it lists all
|
|
|
|
|
information regarding that element.
|
|
|
|
|
|
|
|
|
|
Let's see an example of the third mode:
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-05-27 16:10:42 +00:00
|
|
|
|
gst-inspect-1.0 vp8dec
|
2016-06-16 00:00:24 +00:00
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
Factory Details:
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Rank primary (256)
|
|
|
|
|
Long-name On2 VP8 Decoder
|
|
|
|
|
Klass Codec/Decoder/Video
|
|
|
|
|
Description Decode VP8 video streams
|
|
|
|
|
Author David Schleef <ds@entropywave.com>, Sebastian Dröge <sebastian.droege@collabora.co.uk>
|
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
Plugin Details:
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Name vpx
|
|
|
|
|
Description VP8 plugin
|
|
|
|
|
Filename /usr/lib64/gstreamer-1.0/libgstvpx.so
|
|
|
|
|
Version 1.6.4
|
|
|
|
|
License LGPL
|
|
|
|
|
Source module gst-plugins-good
|
|
|
|
|
Source release date 2016-04-14
|
|
|
|
|
Binary package Fedora GStreamer-plugins-good package
|
|
|
|
|
Origin URL http://download.fedoraproject.org
|
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
GObject
|
2016-06-16 00:00:24 +00:00
|
|
|
|
+----GInitiallyUnowned
|
|
|
|
|
+----GstObject
|
|
|
|
|
+----GstElement
|
|
|
|
|
+----GstVideoDecoder
|
2016-05-16 14:30:34 +00:00
|
|
|
|
+----GstVP8Dec
|
2016-06-16 00:00:24 +00:00
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
Pad Templates:
|
2016-06-16 00:00:24 +00:00
|
|
|
|
SINK template: 'sink'
|
|
|
|
|
Availability: Always
|
|
|
|
|
Capabilities:
|
|
|
|
|
video/x-vp8
|
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
SRC template: 'src'
|
|
|
|
|
Availability: Always
|
|
|
|
|
Capabilities:
|
2016-06-16 00:00:24 +00:00
|
|
|
|
video/x-raw
|
2016-05-16 14:30:34 +00:00
|
|
|
|
format: I420
|
|
|
|
|
width: [ 1, 2147483647 ]
|
|
|
|
|
height: [ 1, 2147483647 ]
|
|
|
|
|
framerate: [ 0/1, 2147483647/1 ]
|
2016-06-16 00:00:24 +00:00
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
Element Flags:
|
|
|
|
|
no flags set
|
2016-06-16 00:00:24 +00:00
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
Element Implementation:
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Has change_state() function: gst_video_decoder_change_state
|
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
Element has no clocking capabilities.
|
|
|
|
|
Element has no URI handling capabilities.
|
2016-06-16 00:00:24 +00:00
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
Pads:
|
|
|
|
|
SINK: 'sink'
|
|
|
|
|
Pad Template: 'sink'
|
2016-06-16 00:00:24 +00:00
|
|
|
|
SRC: 'src'
|
|
|
|
|
Pad Template: 'src'
|
|
|
|
|
|
2016-05-16 14:30:34 +00:00
|
|
|
|
Element Properties:
|
|
|
|
|
name : The name of the object
|
|
|
|
|
flags: readable, writable
|
|
|
|
|
String. Default: "vp8dec0"
|
2016-06-16 00:00:24 +00:00
|
|
|
|
parent : The parent of the object
|
|
|
|
|
flags: readable, writable
|
|
|
|
|
Object of type "GstObject"
|
2016-05-16 14:30:34 +00:00
|
|
|
|
post-processing : Enable post processing
|
|
|
|
|
flags: readable, writable
|
|
|
|
|
Boolean. Default: false
|
|
|
|
|
post-processing-flags: Flags to control post processing
|
|
|
|
|
flags: readable, writable
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Flags "GstVP8DecPostProcessingFlags" Default: 0x00000403, "mfqe+demacroblock+deblock"
|
2016-05-16 14:30:34 +00:00
|
|
|
|
(0x00000001): deblock - Deblock
|
|
|
|
|
(0x00000002): demacroblock - Demacroblock
|
|
|
|
|
(0x00000004): addnoise - Add noise
|
2016-06-16 00:00:24 +00:00
|
|
|
|
(0x00000400): mfqe - Multi-frame quality enhancement
|
2016-05-16 14:30:34 +00:00
|
|
|
|
deblocking-level : Deblocking level
|
|
|
|
|
flags: readable, writable
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Unsigned Integer. Range: 0 - 16 Default: 4
|
2016-05-16 14:30:34 +00:00
|
|
|
|
noise-level : Noise level
|
|
|
|
|
flags: readable, writable
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Unsigned Integer. Range: 0 - 16 Default: 0
|
|
|
|
|
threads : Maximum number of decoding threads
|
|
|
|
|
flags: readable, writable
|
|
|
|
|
Unsigned Integer. Range: 1 - 16 Default: 0
|
2016-05-16 14:30:34 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The most relevant sections are:
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
- Pad Templates: This lists all the kinds of Pads this
|
2016-05-16 14:30:34 +00:00
|
|
|
|
element can have, along with their capabilities. This is where you
|
2016-06-16 00:00:24 +00:00
|
|
|
|
look to find out if an element can link with another one. In this
|
2016-05-16 14:30:34 +00:00
|
|
|
|
case, it has only one sink pad template, accepting only
|
2016-06-16 00:00:24 +00:00
|
|
|
|
`video/x-vp8` (encoded video data in VP8 format) and only one source
|
|
|
|
|
pad template, producing `video/x-raw` (decoded video data).
|
|
|
|
|
- Element Properties: This lists the properties of the
|
2016-05-16 14:30:34 +00:00
|
|
|
|
element, along with their type and accepted values.
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
For more information, you can check the [documentation
|
|
|
|
|
page](gst-inspect.md) of `gst-inspect-1.0`.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
## `gst-discoverer-1.0`
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
This tool is a wrapper around the `GstDiscoverer` object shown in [](sdk-basic-tutorial-media-information-gathering.md).
|
2016-05-16 14:30:34 +00:00
|
|
|
|
It accepts a URI from the command line and prints all information
|
|
|
|
|
regarding the media that GStreamer can extract. It is useful to find out
|
|
|
|
|
what container and codecs have been used to produce the media, and
|
|
|
|
|
therefore what elements you need to put in a pipeline to play it.
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
Use `gst-discoverer-1.0 --help` to obtain the list of available options,
|
2016-05-16 14:30:34 +00:00
|
|
|
|
which basically control the amount of verbosity of the output.
|
|
|
|
|
|
|
|
|
|
Let's see an
|
|
|
|
|
example:
|
|
|
|
|
|
2016-05-27 02:48:36 +00:00
|
|
|
|
```
|
2016-09-15 20:19:28 +00:00
|
|
|
|
gst-discoverer-1.0 https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm -v
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-09-15 20:19:28 +00:00
|
|
|
|
Analyzing https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
|
|
|
|
|
Done discovering https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
|
2016-05-16 14:30:34 +00:00
|
|
|
|
Topology:
|
|
|
|
|
container: video/webm
|
|
|
|
|
audio: audio/x-vorbis, channels=(int)2, rate=(int)48000
|
|
|
|
|
Codec:
|
|
|
|
|
audio/x-vorbis, channels=(int)2, rate=(int)48000
|
|
|
|
|
Additional info:
|
|
|
|
|
None
|
|
|
|
|
Language: en
|
|
|
|
|
Channels: 2
|
|
|
|
|
Sample rate: 48000
|
|
|
|
|
Depth: 0
|
|
|
|
|
Bitrate: 80000
|
|
|
|
|
Max bitrate: 0
|
|
|
|
|
Tags:
|
|
|
|
|
taglist, language-code=(string)en, container-format=(string)Matroska, audio-codec=(string)Vorbis, application-name=(string)ffmpeg2theora-0.24, encoder=(string)"Xiph.Org\ libVorbis\ I\ 20090709", encoder-version=(uint)0, nominal-bitrate=(uint)80000, bitrate=(uint)80000;
|
|
|
|
|
video: video/x-vp8, width=(int)854, height=(int)480, framerate=(fraction)25/1
|
|
|
|
|
Codec:
|
|
|
|
|
video/x-vp8, width=(int)854, height=(int)480, framerate=(fraction)25/1
|
|
|
|
|
Additional info:
|
|
|
|
|
None
|
|
|
|
|
Width: 854
|
|
|
|
|
Height: 480
|
|
|
|
|
Depth: 0
|
|
|
|
|
Frame rate: 25/1
|
|
|
|
|
Pixel aspect ratio: 1/1
|
|
|
|
|
Interlaced: false
|
|
|
|
|
Bitrate: 0
|
|
|
|
|
Max bitrate: 0
|
|
|
|
|
Tags:
|
|
|
|
|
taglist, video-codec=(string)"VP8\ video", container-format=(string)Matroska;
|
|
|
|
|
|
|
|
|
|
Properties:
|
|
|
|
|
Duration: 0:00:52.250000000
|
|
|
|
|
Seekable: yes
|
|
|
|
|
Tags:
|
2016-06-16 00:00:24 +00:00
|
|
|
|
video codec: VP8 video
|
2016-05-16 14:30:34 +00:00
|
|
|
|
language code: en
|
|
|
|
|
container format: Matroska
|
|
|
|
|
application name: ffmpeg2theora-0.24
|
|
|
|
|
encoder: Xiph.Org libVorbis I 20090709
|
|
|
|
|
encoder version: 0
|
|
|
|
|
audio codec: Vorbis
|
|
|
|
|
nominal bitrate: 80000
|
|
|
|
|
bitrate: 80000
|
|
|
|
|
```
|
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
## Conclusion
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
|
|
|
|
This tutorial has shown:
|
|
|
|
|
|
|
|
|
|
- How to build and run GStreamer pipelines from the command line using
|
2016-06-16 00:00:24 +00:00
|
|
|
|
the `gst-launch-1.0` tool.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
- How to find out what GStreamer elements you have available and their
|
2016-05-27 16:10:42 +00:00
|
|
|
|
capabilities, using the `gst-inspect-1.0` tool.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
- How to discover the internal structure of media files, using
|
2016-05-27 16:10:42 +00:00
|
|
|
|
`gst-discoverer-1.0`.
|
2016-05-16 14:30:34 +00:00
|
|
|
|
|
2016-06-16 00:00:24 +00:00
|
|
|
|
It has been a pleasure having you here, and see you soon!
|