[gst-devel] media player issues

Benjamin Otte in7y118 at public.uni-hamburg.de
Thu Jan 17 03:53:02 CET 2002


Hi everybody,

I've found some problems while playing with gstmediaplay and trying to
make it a nice application. These are just random things in no particular
order.

1) events
As it looks, events are neither very well implemented nor documented. In
particular, it isn't clear which event is used for what, even by reading
the source. I.e. I still haven't found out the differences between
DISCONTINUOUS and FLUSH events. And I don't know whether events can be
emitted only on playing pipelines or on ready/paused pipelines too.

2) meta information
Extracting meta information unrelated to the stream (title, interpret,
copyright...) is not implemented at all. At least not by using INFO
events.

3) meta information extraction
Nearly all media players are able to extract information like length,
title and so on before the track is played. GStreamer does not support any
way of extracting this. And the way Gstmediaplay currently does it - using
external libs for some kind of media and not getting the information else
-  is probably not a preferred way of doing this.

4) URIs
IMO there should be a standardized way of supplying URIs to all kinds of
source plugins. I think anybody would prefer to "gst-launch src
location=cdparanoia://Track1 ! osssink" and not care which source plugin
is needed.

5) plugin selection
This is basically the same problem as above. I'd like to have generic
elements for "source", "datasink", "videosink" and "audiosink".
Something like this: gstlaunch "src location=music.mp3 ! mad ! audiosink" and the
default one is selected.

6) more standardized plugins
It would be nice if the plugin object hierarchy weren't that flat. Nearly
all plugins descend(sp?) from GstElement. I'd like to have them more
standardized, because it's much easier if there are functions like
gst_element_get_windowid(GstVideoSinkElement *),
gst_element_get_uri(GstSourceElement *) or
gst_element_set_volume(GstAudioSinkElement *, guint *)

7) make the autoplugger an element
The example says it best:
"gst-launch src location=/any/supported/audiofile ! autoplugger !
audiosink"

8) LENGTH event?
IMO there should be a (horizontal) length event, which supplies
information about the length of the stream. It travels downstream and is
intercepted by plugins who supply different length information. Examples:
- Sources emit length events with the number of bytes they have.
- Mad takes byte length events and converts them to (milli)seconds length
events
- Mikmod emits its own length events when the file is read.
This way you can have sensible information about the length at the end of
the pipeline.
Another problem is how this should be communicated to the application.

9) standardize information in INFO events
AFAIK there are no #DEFINEs which define how "bitrate" should be written
in INFO events. And I don't want to miss the bitrate because some plugin
calls
it "bit rate" or something. A more serious example would be "author" and
"authors" or even "AUTHORS".
And you would have a good hint about which information should be put out.

10) distinguish between horizontal and vertical events
I don't know if this is good or bad or irrelevant, but I'm often
really confused about vertical (plugin -> app) and horizontal (plugin ->
plugin) events. Maybe they should be called something different?


See? I don't have many problems. ;)
Anyway: If I'm missing something I haven't discovered yet, please tell me.

And comments please, many many comments.

Benjamin





More information about the gstreamer-devel mailing list