View Source Membrane.Pipeline.Action (Membrane Core v0.10.0)
This module contains type specifications of actions that can be returned from pipeline callbacks.
Returning actions is a way of pipeline interaction with
other components and parts of framework. Each action may be returned by any
callback (except for Membrane.Pipeline.handle_shutdown/2
, as it
does not support returning any actions) unless explicitly stated otherwise.
Link to this section Summary
Types
Action that sends a message to a child identified by name.
Action that sets Logger
metadata for the pipeline and all its descendants.
Type describing actions that can be returned from pipeline callbacks.
Action that stops, unlinks and removes specified child/children from the pipeline.
Action that instantiates children and links them according to Membrane.ParentSpec
.
Starts a timer that will invoke Membrane.Pipeline.handle_tick/3
callback
every interval
according to the given clock
.
Stops a timer started with start_timer_t/0
action.
Changes the playback state of the pipeline to the chosen one.
Changes interval of a timer started with start_timer_t/0
.
Link to this section Types
@type forward_t() :: {:forward, {Membrane.Child.name_t(), any()} | [{Membrane.Child.name_t(), any()}]}
Action that sends a message to a child identified by name.
@type log_metadata_t() :: {:log_metadata, Keyword.t()}
Action that sets Logger
metadata for the pipeline and all its descendants.
Uses Logger.metadata/1
underneath.
@type playback_t() :: {:playback, :prepared | :playing | :stopped}
Type describing actions that can be returned from pipeline callbacks.
Returning actions is a way of pipeline interaction with its children and other parts of framework.
@type remove_child_t() :: {:remove_child, Membrane.Child.name_t() | [Membrane.Child.name_t()]}
Action that stops, unlinks and removes specified child/children from the pipeline.
@type spec_t() :: {:spec, Membrane.ParentSpec.t()}
Action that instantiates children and links them according to Membrane.ParentSpec
.
Children's playback state is changed to the current pipeline state.
Membrane.Pipeline.handle_spec_started/3
callback is executed once it happens.
@type start_timer_t() :: {:start_timer, {timer_id :: any(), interval :: Ratio.t() | non_neg_integer() | :no_interval} | {timer_id :: any(), interval :: Ratio.t() | non_neg_integer() | :no_interval, clock :: Membrane.Clock.t()}}
Starts a timer that will invoke Membrane.Pipeline.handle_tick/3
callback
every interval
according to the given clock
.
The timer's id
is passed to the Membrane.Pipeline.handle_tick/3
callback and can be used for changing its interval via timer_interval_t/0
or stopping it via stop_timer_t/0
.
If interval
is set to :no_interval
, the timer won't issue any ticks until
the interval is set with timer_interval_t/0
action.
If no clock
is passed, pipeline clock is chosen.
Timers use Process.send_after/3
under the hood.
@type stop_timer_t() :: {:stop_timer, timer_id :: any()}
Stops a timer started with start_timer_t/0
action.
This action is atomic: stopping timer guarantees that no ticks will arrive from it.
@type t() :: forward_t() | spec_t() | remove_child_t() | log_metadata_t() | start_timer_t() | timer_interval_t() | stop_timer_t() | playback_t()
Changes the playback state of the pipeline to the chosen one.
@type timer_interval_t() :: {:timer_interval, {timer_id :: any(), interval :: Ratio.t() | non_neg_integer() | :no_interval}}
Changes interval of a timer started with start_timer_t/0
.
Permitted only from Membrane.Pipeline.handle_tick/3
, unless the interval
was previously set to :no_interval
.
If the interval
is :no_interval
, the timer won't issue any ticks until
another timer_interval_t/0
action. Otherwise, the timer will issue ticks every
new interval
. The next tick after interval change is scheduled at
new_interval + previous_time
, where previous_time is the time of the latest
tick or the time of returning start_timer_t/0
action if no tick has been
sent yet. Note that if current_time - previous_time > new_interval
, a burst
of div(current_time - previous_time, new_interval)
ticks is issued immediately.