gstreamer/docs/random/ensonic/distributed.txt
2018-05-01 11:18:03 +01:00

42 lines
1.5 KiB
Text

$Id$
= distributed gstreamer pipelines =
The idea is to have a proxy element for remote elements so that you can treat
the whole pipeline as a local one. The proxy element creates the real instance
by talking to GOD (GStreamer Object Daemon, GObject Daemon, ...) on the
respective machine.
At runtime when the proxy-element receives data it sends it to the remote
element and after processing it gets it back and forwards it to the element.
The challenge is to optimize links when multiple connected elements are on the
same remote machine so that the data gets passed directly there.
== proxy creation ==
In addition to
GstElement* gst_element_factory_make (const gchar *factoryname,
const gchar *name);
we need:
GstElement* gst_element_factory_make_remote (const gchar *factoryname,
const gchar *name,
GstRemoteFactory *remote);
and some API to get a remote factory handle via hostname lookup, ip address
lookup or even zeroconf (avahi).
== remote server ==
The remote server manages pipelines with elements that are bound to the proxies.
Each pipeline has an id, that refers to the client+the clients pipeline address.
Proxyelements supply the client. pipeline address pair when creating remote
elements.
== issues / thoughts ==
* we need to distribute the clock
* is dataprotocol-library useful to send events, data, property- and state-
changes
* we need to sync the remote pipelines with the main-pipeline