Source / Input / Passive
blank
Produce silence and blank images.
Type:
(?id : string?, ?duration : {float}) -> source('a)
where 'a is a set of internal tracks
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.duration(of type{float}, which defaults to-1.0): Duration of blank tracks in seconds, Negative value means forever.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source('A), track_sensitive : bool}) -> unit where 'A is a set of internal tracks): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type({ending : source('A)?, replay_metadata : bool, starting : source('A)}) -> source('A) where 'A is a set of internal tracks): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
debug.is_ready
A source that always produces an empty frame when the underlying source is not ready, used for testing and debugging.
Type:
(?id : string?, source('a)) -> source('a)
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.(unlabeled)(of typesource('a))
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source('A), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type({ending : source('A)?, replay_metadata : bool, starting : source('A)}) -> source('A)): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
This function is experimental.
input.external.avi
Stream data from an external application.
Type:
(?id : string?, ?buffer : float, ?max : float, ?restart : bool,
?restart_on_error : bool, {string}) -> source(audio=pcm('a),
video=yuv420p('b))
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.buffer(of typefloat, which defaults to1.0): Duration of the pre-buffered data.max(of typefloat, which defaults to10.0): Maximum duration of the buffered data.restart(of typebool, which defaults totrue): Restart process when exited.restart_on_error(of typebool, which defaults tofalse): Restart process when exited with error.(unlabeled)(of type{string}): Command to execute.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source(audio=pcm('B), video=yuv420p('A)), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type( { ending : source(audio=pcm('B), video=yuv420p('A))?, replay_metadata : bool, starting : source(audio=pcm('B), video=yuv420p('A)) }) -> source(audio=pcm('B), video=yuv420p('A))): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
This function is experimental.
input.external.rawaudio
Stream raw PCM data (interleaved signed 16 bits little endian integers) from an external application.
Type:
(?id : string?, ?buffer : float, ?channels : int, ?max : float,
?restart : bool, ?restart_delay_on_error : float, ?restart_on_error : bool,
?samplerate : int, {string}) -> source(audio=pcm('a))
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.buffer(of typefloat, which defaults to2.0): Duration of the pre-buffered data.channels(of typeint, which defaults to2): Number of channels.max(of typefloat, which defaults to10.0): Maximum duration of the buffered data.restart(of typebool, which defaults totrue): Restart process when exited.restart_delay_on_error(of typefloat, which defaults to0.1): Delay (in seconds) before restarting the process if its exit status is other than 0. Prevents busy-looping when the command exits immediately.restart_on_error(of typebool, which defaults tofalse): Restart process when exited with error.samplerate(of typeint, which defaults to44100): Samplerate.(unlabeled)(of type{string}): Command to execute.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source(audio=pcm('A)), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type( { ending : source(audio=pcm('A))?, replay_metadata : bool, starting : source(audio=pcm('A)) }) -> source(audio=pcm('A))): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
input.external.rawvideo
Stream data from an external application.
Type:
(?id : string?, ?buffer : float, ?max : float, ?restart : bool,
?restart_on_error : bool, {string}) -> source(video=yuv420p('a))
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.buffer(of typefloat, which defaults to1.0): Duration of the pre-buffered data.max(of typefloat, which defaults to10.0): Maximum duration of the buffered data.restart(of typebool, which defaults totrue): Restart process when exited.restart_on_error(of typebool, which defaults tofalse): Restart process when exited with error.(unlabeled)(of type{string}): Command to execute.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source(video=yuv420p('A)), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type( { ending : source(video=yuv420p('A))?, replay_metadata : bool, starting : source(video=yuv420p('A)) }) -> source(video=yuv420p('A))): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
This function is experimental.
input.external.wav
Stream WAV data from an external application.
Type:
(?id : string?, ?buffer : float, ?max : float, ?restart : bool,
?restart_delay_on_error : float, ?restart_on_error : bool, {string}) ->
source(audio=pcm('a))
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.buffer(of typefloat, which defaults to2.0): Duration of the pre-buffered data.max(of typefloat, which defaults to10.0): Maximum duration of the buffered data.restart(of typebool, which defaults totrue): Restart process when exited.restart_delay_on_error(of typefloat, which defaults to0.1): Delay (in seconds) before restarting the process if its exit status is other than 0. Prevents busy-looping when the command exits immediately.restart_on_error(of typebool, which defaults tofalse): Restart process when exited with error.(unlabeled)(of type{string}): Command to execute.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source(audio=pcm('A)), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type( { ending : source(audio=pcm('A))?, replay_metadata : bool, starting : source(audio=pcm('A)) }) -> source(audio=pcm('A))): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
noise
Generate audio/video noise source.
Type:
(?id : string?, ?duration : float?) -> source('a)
where 'a is a set of internal tracks
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.duration(of typefloat?, which defaults tonull): Duration in seconds (nullmeans infinite).
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source('A), track_sensitive : bool}) -> unit where 'A is a set of internal tracks): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type({ending : source('A)?, replay_metadata : bool, starting : source('A)}) -> source('A) where 'A is a set of internal tracks): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
request.dynamic
Play request dynamically created by a given function.
Type:
(?id : string?, ?available : {bool}, ?prefetch : int?,
?retry_delay : {float}, ?synchronous : bool, ?timeout : float?,
(() -> request?)) -> source('a)
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.available(of type{bool}, which defaults totrue): Whether some new requests are available (when set to false, it stops after current playing request).prefetch(of typeint?, which defaults tonull): How many requests should be queued in advance.retry_delay(of type{float}, which defaults to0.1): Retry after a given time (in seconds) when callback returnsnullor an error occurs while resolving a returned request.synchronous(of typebool, which defaults tofalse): Iftrue, new requests are prepared as needed instead of using an asynchronous queue.timeout(of typefloat?, which defaults tonull): Timeout (in sec.) to resolve the request. Defaults tosettings.request.timeoutwhennull.(unlabeled)(of type() -> request?)
Methods:
add(of type(request) -> bool): Add a request to the queue. Requests are resolved before being added. Returnstrueif the request was successfully added.buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockcurrent(of type() -> request?): Get the request currently being played.duration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.fetch(of type() -> unit): Notify the source to queue a new request. Ifsynchronousisfalse(the default), this method returns immediately and a new request is fetched in the background. Ifsynchronousistrue, can take long to return and should usually be run in a separate thread.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.queue(of type() -> [request]): Get the requests currently in the queue.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)set_queue(of type([request]) -> unit): Set the queue of requests. Requests are resolved before being added to the queue. You are responsible for destroying the requests currently in the queue.skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source('A), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type({ending : source('A)?, replay_metadata : bool, starting : source('A)}) -> source('A)): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
saw
Generate a saw wave.
Type:
(?id : string?, ?amplitude : {float}, ?duration : float?, ?{float}) ->
source(audio=pcm*)
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.amplitude(of type{float}, which defaults to1.0): Maximal value of the waveform.duration(of typefloat?, which defaults tonull): Duration in seconds (nullmeans infinite).(unlabeled)(of type{float}, which defaults to440.0): Frequency of the saw.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source(audio=pcm*), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type( { ending : source(audio=pcm*)?, replay_metadata : bool, starting : source(audio=pcm*) }) -> source(audio=pcm*)): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
sine
Generate a sine wave.
Type:
(?id : string?, ?amplitude : {float}, ?duration : float?, ?{float}) ->
source(audio=pcm*)
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.amplitude(of type{float}, which defaults to1.0): Maximal value of the waveform.duration(of typefloat?, which defaults tonull): Duration in seconds (nullmeans infinite).(unlabeled)(of type{float}, which defaults to440.0): Frequency of the sine.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source(audio=pcm*), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type( { ending : source(audio=pcm*)?, replay_metadata : bool, starting : source(audio=pcm*) }) -> source(audio=pcm*)): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
source
Create a source that muxes the given tracks.
Type:
(?id : string?, 'a.{metadata? : metadata, track_marks? : track_marks}) ->
source('a) where 'a is a set of tracks to be muxed into a source
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.(unlabeled)(of type'a.{metadata? : metadata, track_marks? : track_marks} where 'a is a set of tracks to be muxed into a source): Tracks to mux
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source('A), track_sensitive : bool}) -> unit where 'A is a set of tracks to be muxed into a source): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type({ending : source('A)?, replay_metadata : bool, starting : source('A)}) -> source('A) where 'A is a set of tracks to be muxed into a source): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
source.fail
A source that does not produce anything. No silence, no track at all.
Type:
(?id : string?) -> source('a)
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source('A), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type({ending : source('A)?, replay_metadata : bool, starting : source('A)}) -> source('A)): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
source.fail.init
A source that errors during its initialization phase, used for testing and debugging.
Type:
(?id : string?) -> source('a)
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source('A), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type({ending : source('A)?, replay_metadata : bool, starting : source('A)}) -> source('A)): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
This function is experimental.
square
Generate a square wave.
Type:
(?id : string?, ?amplitude : {float}, ?duration : float?, ?{float}) ->
source(audio=pcm*)
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.amplitude(of type{float}, which defaults to1.0): Maximal value of the waveform.duration(of typefloat?, which defaults tonull): Duration in seconds (nullmeans infinite).(unlabeled)(of type{float}, which defaults to440.0): Frequency of the square.
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source(audio=pcm*), track_sensitive : bool}) -> unit): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type( { ending : source(audio=pcm*)?, replay_metadata : bool, starting : source(audio=pcm*) }) -> source(audio=pcm*)): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).
video.testsrc
Generate a test video.
Type:
(?id : string?, ?height : int, ?width : int) -> source('a)
where 'a is a set of internal tracks
Composition:
This source uses file composition by default.
Arguments:
id(of typestring?, which defaults tonull): Force the value of the source ID.height(of typeint, which defaults to-1)width(of typeint, which defaults to-1)
Methods:
buffered(of type() -> [string * float]): Length of buffered data.clear_last_metadata(of type() -> unit): Clear the last metadata from the source.clock(of typeclock): The source's clockduration(of type() -> float): Estimation of the duration of the current track.elapsed(of type() -> float): Elapsed time in the current track.fallible(of typebool): Indicate if a source may fail, i.e. may not be ready to stream.generate_frame(of type() -> unit): Generate a frame from the source without consuming it. This can be useful in advanced cases where generating a frame is required to trigger some side effect like calculating some metadata before making a decision. You should make sure that the source is available before calling this function and it should only be called inside synchronous streaming loop callback such ason_frame!id(of type() -> string): Identifier of the source.insert_metadata(of type(?override : bool, ?new_track : bool, [string * string]) -> unit): Dynamically insert metadata in a stream. Inserts a new track with the given metadata ifnew_trackistrue. Whenoverrideisfalse, metadata that the source provides itself takes precedence over the inserted one.is_active(of type() -> bool):trueif the source is active, i.e. it is continuously animated by its own clock whenever it is ready. Typically,truefor outputs and sources such asinput.http.is_ready(of type() -> bool): Indicate if a source is ready to stream. This does not mean that the source is currently streaming, just that its resources are all properly initialized.is_up(of type() -> bool): Indicate that the source can be asked to produce some data at any time. This istruewhen the source is currently being used or if it could be used at any time, typically inside aswitchorfallback.last_metadata(of type() -> [string * string]?): Return the last metadata from the source.log(of type{level : (() -> int).{set : (int) -> unit}}): Get or set the source's log level, from1to5.register_command(of type(?usage : string?, description : string, string, ((string) -> string)) -> unit): Register a server command for this source. Command is registered under the source's id namespace when it gets up and de-registered when it gets down.remaining(of type() -> float): Estimation of remaining time in the current track.reset_last_metadata_on_track(of type(() -> bool).{set : (bool) -> unit}): Iftrue, the source'slast_metadatais reset on each new track. If a metadata is present along with the track mark, then it becomes the newlast_metadata, otherwise,last_metadata becomesnull`.seek(of type(float) -> float): Seek forward, in seconds (returns the amount of time effectively seeked).self_sync(of type() -> bool): Is the source currently controlling its own real-time loop.self_sync_description(of type() -> string)skip(of type() -> unit): Skip to the next track.time(of type() -> float): Get a source's time, based on its assigned clock.
Callbacks:
on_collect(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source is collectedon_frame(of type(?before : bool, synchronous : bool, (() -> unit)) -> unit): Call a given handler on frame. Whenbeforeistrue, callback is executed before computing the frame and after otherwiseon_frame_checksum(of type(?before : ((string?) -> unit)?, synchronous : bool, ((cache : string?, string) -> unit)) -> unit): Call a given handler Register callbacks to compute frame checksums for debugging purposes. This is useful to track frame content changes through the streaming pipeline. Thebeforecallback is called before computing the frame with the checksum of the cached frame (if any,nullotherwise). The main callback is called after computing the frame with the checksum of the generated frame and the remaining cache (if any).on_metadata(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler to execute on each metadataon_position(of type(position : {float}, ?remaining : bool, ?allow_partial : bool, synchronous : bool, ((float, [string * string]) -> unit)) -> unit): Call a given handler on track position. Ifremainingisfalse, callback is executed when position in track is more or equal toposition. Ifremainingistrue, callback is executed when remaining time in the current track is less or equal toposition. Keep in mind that elapsed time is exact while remaining time is always estimated. Remaining time is usually more accurate for file-based sources. Whenallow_partialistrue, if the current track ends before theoffsetposition is reached, callback is still executedon_shutdown(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called when source shuts downon_track(of type(synchronous : bool, (([string * string]) -> unit)) -> unit): Call a given handler on track markson_wake_up(of type(synchronous : bool, (() -> unit)) -> unit): Call a given handler to be called after the source is asked to get ready
Composition methods:
composition_type(of type(() -> string).{set : (string) -> unit}): This source uses file composition by default.on_leave(of type({source : source('A), track_sensitive : bool}) -> unit where 'A is a set of internal tracks): Called after switching away from this source in a switch operator, once the transition using the ending source has completed. Receives a record withsource(the source being left) andtrack_sensitive(trueif the ending source's last frame had a track mark, i.e. it finished naturally;falseif it was preempted mid-track). This function must return quickly as it runs in the streaming thread. The default depends on the active composition profile: file sources (source.composition.file) skip the source when preempted mid-track so it starts fresh on its next selection, and do nothing when it finished naturally; live sources (source.composition.live) do nothing.on_select(of type({ending : source('A)?, replay_metadata : bool, starting : source('A)}) -> source('A) where 'A is a set of internal tracks): Called when selecting this source in a switch operator. Receives a record withstarting(the incoming source) andending(the previous source, ornullwhen the ending source reached a track boundary). Returns the source to use. By default, both file and live profiles fade outendingwhen non-null (up to 1 second). The default is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).replay_metadata(of type{bool}): Whether to replay the latest metadata on this source when it is selected in a switch operator. Defaults totrue. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).single(of typebool): Forbid the selection of this source for two consecutive tracks in switch operators. Defaults tofalse.track_sensitive(of type{bool}): Whether this source insists on track boundaries in switch operators: whentrue, it prefers not to be interrupted mid-track and not to be started mid-track. A switch may only cut into a track that is still playing when at least one of the two sources involved hastrack_sensitiveset tofalse; otherwise it waits for the playing source to reach a track boundary. File-based sources default totrue; live network and hardware inputs default tofalse. The value is looked up at runtime from the active composition profile (source.composition.fileorsource.composition.livedepending oncomposition_type).