Module defining behaviour for endpoints - elements consuming and producing data.
Behaviours for endpoints are specified, besides this place, in modules
Membrane.Element.Base,
Membrane.Element.WithOutputPads,
and Membrane.Element.WithInputPads.
Endpoint can have both input and output pads. Job of usual endpoint is both, to
receive some data on input pads and consume it (write to a soundcard, send through
TCP etc.) and to produce some data (read from soundcard, download through HTTP,
etc.) and send on output pads. If the pad has the flow control set to
:manual, then endpoint is also responsible for receiving demands on the output
pad and requesting them on the input pad (for more details, see
Membrane.Element.WithOutputPads.handle_demand/5 callback).
Endpoints, like all elements, can of course have multiple pads if needed to
provide more complex solutions.
Although Endpoints may seem similair to Filters - they both have input and output pads - there are some important differences. While Filters can be thought as parts of a Pipeline that take in data, process it in some way, and then pass it along, Endpoints create "holes" in the pipeline. They behave more like a Sink and a Source combined in a single element - media they consume and produce are parts of different streams.
For instance, while a typical Filter would only modify the input stream and then forward it, a typical Endpoint would consume the input stream (e.g. send it to some external receiver) and produce a completely separate output stream (e.g. receive it from some external sender).
The main consequence of this is the fact that they separate the flow control of the pipeline ahead of them and behind them, as their input pads behave like those of a Sink, and their output pads behave like those of a Source:
- A Filter can have
:flow_controlset to:autoon its output pads, an Endpoint cannot - just like a Source. - A Filter cannot return
:redemandaction inhandle_demandcallback, an Endpoint can - just like a Source.
List of available callbacks
Below there is a list of all the callbacks available in a module, that implements Membrane.Endpoint behaviour.
We have put it for your convenience, as some of these callbacks aren't directly defined in that module and
their specification is available in different modules.
The callbacks available in Membrane.Endpoint behaviour:
Membrane.Element.Base.__struct__/0Membrane.Element.Base.__struct__/1Membrane.Element.Base.handle_event/4Membrane.Element.Base.handle_info/3Membrane.Element.Base.handle_init/2Membrane.Element.Base.handle_pad_added/3Membrane.Element.Base.handle_pad_removed/3Membrane.Element.Base.handle_parent_notification/3Membrane.Element.Base.handle_playing/2Membrane.Element.Base.handle_setup/2Membrane.Element.Base.handle_terminate_request/2Membrane.Element.Base.handle_tick/3
Summary
Functions
Brings all the stuff necessary to implement a endpoint element.
Functions
Brings all the stuff necessary to implement a endpoint element.
Options:
:bring_pad?- if true (default) requires and aliasesMembrane.Pad:flow_control_hints?- if true (default) generates compile-time warnings if the number, direction, and type of flow control of pads are likely to cause unintended behaviours.