View Source Membrane.HTTPAdaptiveStream.Manifest.Track (Membrane HTTP Adaptive Stream plugin v0.12.0)

Struct representing a state of a single manifest track and functions to operate on it.

Link to this section Summary

Functions

Append a partial segment to the current incomplete segment.

Add a segment of given duration to the track. It is recommended not to pass discontinuity attribute manually but use discontinue/1 function instead.

Returns all segments present in the track, including stale segments.

Discontinue the track, indicating that parameters of the stream have changed.

Finalize current segment.

Marks the track as finished. After this action, it won't be possible to add any new segments to the track.

Return new track with all stale segments restored, resulting in playback of historic data. Only works with 'persist?' option enabled.

Tells whether the track is able to produce partial media segments.

Link to this section Types

@type id_t() :: any()
@type segment_byte_size_t() :: non_neg_integer()
@type segment_duration_t() :: Membrane.Time.t() | Ratio.t()
@type segment_opt_t() ::
  {:name, String.t()}
  | {:complete?, boolean()}
  | {:duration, segment_duration_t()}
  | {:byte_size, segment_byte_size_t()}
@type t() :: %Membrane.HTTPAdaptiveStream.Manifest.Track{
  awaiting_discontinuity: term(),
  content_type: :audio | :video | :muxed,
  current_discontinuity_seq_num: non_neg_integer(),
  current_seq_num: non_neg_integer(),
  discontinuities_counter: non_neg_integer(),
  finished?: boolean(),
  header_extension: String.t(),
  header_name: String.t(),
  header_naming_fun: (t(), counter :: non_neg_integer() -> String.t()),
  id: id_t(),
  next_segment_id: non_neg_integer(),
  persist?: boolean(),
  segment_extension: String.t(),
  segment_naming_fun: (t() -> String.t()),
  segments: segments_t(),
  stale_headers: term(),
  stale_segments: segments_t(),
  target_partial_segment_duration: segment_duration_t() | nil,
  target_segment_duration: segment_duration_t(),
  target_window_duration: Membrane.Time.t() | Ratio.t(),
  track_name: String.t(),
  window_duration: non_neg_integer()
}

The struct representing a track.

Consists of all the fields from Config.t and also:

  • header_name - name of the header file
  • current_seq_num - the number to identify the next segment
  • current_discontinuity_seq_num - number of current discontinuity sequence.
  • segments - segments' names and durations
  • stale_segments - stale segments' names and durations, kept empty unless persist? is set to true
  • stale_headers - stale headers' names, kept empty unless persist? is set to true
  • finished? - determines whether the track is finished
  • window_duration - current window duration
  • discontinuities_counter - the number of discontinuities that happened so far
  • next_segment_id - the sequence number of the next segment that will be generated

Link to this section Functions

Link to this function

add_partial_segment(track, independent?, duration, byte_size)

View Source

Append a partial segment to the current incomplete segment.

The current segment is supposed to be of type :partial, meaning that it is still in a phase of gathering partial segments before being finalized into a full segment. There can only be a single such segment and it must be the last one.

Link to this function

add_segment(track, opts, attributes \\ [])

View Source

Add a segment of given duration to the track. It is recommended not to pass discontinuity attribute manually but use discontinue/1 function instead.

@spec all_segments(t()) :: [segment_name :: String.t()]

Returns all segments present in the track, including stale segments.

Link to this function

default_header_naming_fun(track, counter)

View Source
@spec default_header_naming_fun(t(), non_neg_integer()) :: String.t()
Link to this function

default_segment_naming_fun(track)

View Source
@spec default_segment_naming_fun(t()) :: String.t()
@spec discontinue(t()) :: {header_name :: String.t(), t()}

Discontinue the track, indicating that parameters of the stream have changed.

New header has to be stored under the returned filename. For details on discontinuity, please refer to RFC 8216.

Link to this function

finalize_current_segment(track)

View Source
@spec finalize_current_segment(t()) ::
  {Membrane.HTTPAdaptiveStream.Manifest.Track.Changeset.t(), t()}

Finalize current segment.

With low latency, a regular segments gets created gradually. Each partial segment gets appended to a regular one, if all parts are collected then the regular segment is said to be complete.

This function aims to finalize the current (latest) segment that is still incomplete so it can live on its own and so a new segment can get started.

@spec finish(t()) :: t()

Marks the track as finished. After this action, it won't be possible to add any new segments to the track.

@spec from_beginning(t()) :: t()

Return new track with all stale segments restored, resulting in playback of historic data. Only works with 'persist?' option enabled.

Link to this function

supports_partial_segments?(track)

View Source
@spec supports_partial_segments?(t()) :: boolean()

Tells whether the track is able to produce partial media segments.