View Source Membrane.HTTPAdaptiveStream.SinkBin (Membrane HTTP Adaptive Stream plugin v0.9.0)

Bin responsible for receiving audio and video streams, performing payloading and CMAF muxing to eventually store them using provided storage configuration.

input-streams

Input streams

Parsed H264 or AAC video or audio streams are expected to be connected via the :input pad. The type of stream has to be specified via the pad's :encoding option.

output

Output

Specify one of Membrane.HTTPAdaptiveStream.Storages as :storage to configure the sink.

bin-options

Bin options

Passed via struct Membrane.HTTPAdaptiveStream.SinkBin.t/0

  • manifest_name

    String.t()

    Default value: "index"
    Name of the main manifest file

  • manifest_module

    module

    Required
    Implementation of the Membrane.HTTPAdaptiveStream.Manifest behaviour.

  • storage

    Storage.config_t()

    Required
    Storage configuration. May be one of Membrane.HTTPAdaptiveStream.Storages.*. See Membrane.HTTPAdaptiveStream.Storage behaviour.

  • target_window_duration

    pos_integer | :infinity

    Default value: 40000000000
    Manifest duration is kept above that time, while the oldest segments are removed whenever possible.

  • persist?

    boolean

    Default value: false
    If true, stale segments are removed from the manifest only. Once playback finishes, they are put back into the manifest.

  • mode

    :live | :vod

    Default value: :vod
    Tells if the session is live or a VOD type of broadcast. It can influence type of metadata inserted into the playlist's manifest.

  • hls_mode

    :muxed_av | :separate_av

    Default value: :separate_av
    Option defining how the incoming tracks will be handled and how CMAF will be muxed.

    • In :muxed_av audio will be added to each video rendition, creating CMAF segments that contain both audio and video.
    • In :separate_av audio and video tracks will be separate and synchronization will need to be sorted out by the player.
  • header_naming_fun

    (Manifest.Track.t(), counter :: non_neg_integer() -> String.t())

    Default value: &Membrane.HTTPAdaptiveStream.Manifest.Track.default_header_naming_fun/2
    A function that generates consequent media header names for a given track

  • segment_naming_fun

    (Manifest.Track.t() -> String.t())

    Default value: &Membrane.HTTPAdaptiveStream.Manifest.Track.default_segment_naming_fun/1
    A function that generates consequent segment names for a given track

  • mp4_parameters_in_band?

    boolean()

    Default value: false
    Determines whether the parameter type nalus will be removed from the stream. Inband parameters seem to be legal with MP4, but some players don't respond kindly to them, so use at your own risk. This parameter should be set to true when discontinuity can occur. For example when resolution can change.

pads

Pads

input

:input

Availability :on_request
Caps Membrane.H264, restrictions:
  profile: one_of([:constrained_baseline, :baseline]),
Membrane.AAC
Demand unit :buffers
Direction :input
Mode :pull
Name :input

Options:

  • encoding

    :H264 | :AAC

    Required
    Encoding type determining which payloader will be used for the given stream.

  • track_name

    String.t() | nil

    Default value: nil
    Name that will be used to name the media playlist for the given track, as well as its header and segments files. It must not contain any URI reserved characters

  • segment_duration

    Sink.SegmentDuration.t()

    Required
    The segment duration range of the regular segments.

  • partial_segment_duration

    Sink.SegmentDuration.t() | nil

    Default value: nil
    The segment duration range of the partial segments. If not set then the bin won't produce any partial segments.

Link to this section Summary

Types

Options for pad :input

t()

Struct containing options for Membrane.HTTPAdaptiveStream.SinkBin

Functions

Returns description of options available for this module

Link to this section Types

@type input_pad_opts_t() :: [
  encoding: :H264 | :AAC,
  track_name: String.t() | nil,
  segment_duration: Membrane.HTTPAdaptiveStream.Sink.SegmentDuration.t(),
  partial_segment_duration:
    Membrane.HTTPAdaptiveStream.Sink.SegmentDuration.t() | nil
]

Options for pad :input

@type t() :: %Membrane.HTTPAdaptiveStream.SinkBin{
  header_naming_fun:
    (Membrane.HTTPAdaptiveStream.Manifest.Track.t(),
     counter :: non_neg_integer() ->
       String.t()),
  hls_mode: :muxed_av | :separate_av,
  manifest_module: module(),
  manifest_name: String.t(),
  mode: :live | :vod,
  mp4_parameters_in_band?: boolean(),
  persist?: boolean(),
  segment_naming_fun:
    (Membrane.HTTPAdaptiveStream.Manifest.Track.t() -> String.t()),
  storage: Membrane.HTTPAdaptiveStream.Storage.config_t(),
  target_window_duration: pos_integer() | :infinity
}

Struct containing options for Membrane.HTTPAdaptiveStream.SinkBin

Link to this section Functions

@spec membrane_pads() :: [{Membrane.Pad.name_t(), Membrane.Pad.description_t()}]

Returns pads descriptions for Membrane.HTTPAdaptiveStream.SinkBin

@spec options() :: keyword()

Returns description of options available for this module