[gstreamer-bugs] [Bug 566604] Add RTMP client support

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Wed Nov 25 11:52:32 PST 2009


https://bugzilla.gnome.org/show_bug.cgi?id=566604
  GStreamer | don't know | git

Benjamin Otte (Company) <otte> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |otte at gnome.org

--- Comment #6 from Benjamin Otte (Company) <otte at gnome.org> 2009-11-25 19:52:26 UTC ---
So, here's an overview about my thoughts about RTMP.
RTMP is a protocol that allows you to send basically 3 types of streams:
1) video data
2) audio data
3) remote procedure calls
It is easy to interpret 1) and 2) - in fact, an FLV file is pretty much just a
dump of the server=>client part of an RTMP session.

The problem is the remote calls. The remote calls are used to execute functions
inside the Flash Player. These functions get defined inside the SWF file that
opens the RTMP connection and are executed in one of the many virtual machines
of the Flash player in the context of the Flash DOM. So to handle RTMP 100%,
you must run a working Flash player and have the launching SWF file at hand.
>From this point of view, it makes absolutely no sense to try to add RTMP
support to GStreamer separate from a full Flash player. And no, the current
Gnash or Swfdec implementations do not count.

However, quite a few Flash sites I've come across do use the default components
of Adobe's Flash Media Server. That software ships a bunch of components that
implement video streaming and live broadcasts and they are quite complex. So it
is no wonder that people prefer to just drop them into their server and use
them as is.
So what the Open Source RTMP tools do is implement compatibility to these
components - of course the components come in multiple versions and with quite
a few configuration options. They try to implement the default responses to all
the remote functions calls. They do not attempt to interpret or even download
the code of the functions that should be called. So this is a very huge hack
that fails whenever a site uses custom Flash code or a new version of the
components gets released. But it often works quite well.

In summary, I have no idea if it is a worthwhile goal to pursue such a project.
Before judging that I would like to have the biggest 50 RTMP using sites
audited for the way their servers work. And I've never tried that.
I just know that doing it does involve a lot of duct tape. And I know from
Swfdec experience it needs very careful coding to get the error paths not crash
and have useful error reporting.

As for Bastien's questions:

> - There's no public functions to allow seeking
>
Afaik seeking is just another remote call that needs to be implemented. So this
should be a missing feature.

> - There's no way to get the size in bytes
>
I don't think there is a way to query that in the default components. The
default components emit an onMetaData event, but I'm pretty sure the usual
metadata injectors only inject the time, not the bytesize of the stream.

> - There's no way to detect whether a stream is live or not
>
I did not investigate this when working on RTMP, but afaik this information is
not available either. Usually the surrounding SWF file will tell you if it's
live. ;)

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.




More information about the Gstreamer-bugs mailing list