lib/membrane/rtp/depayloader_bin.ex

defmodule Membrane.RTP.DepayloaderBin do
  @moduledoc """
  Modules responsible for reordering incoming RTP packets using a jitter buffer
  to later depayload packet's payload from RTP format.
  """

  use Membrane.Bin

  alias Membrane.RTP
  alias Membrane.RTP.JitterBuffer

  def_options depayloader: [
                spec: module(),
                description: "Depayloader module that should be used for incoming stream"
              ],
              clock_rate: [
                spec: RTP.clock_rate_t()
              ]

  def_input_pad :input,
    caps: RTP,
    demand_unit: :buffers

  def_output_pad :output,
    caps: RTP,
    demand_unit: :buffers

  @impl true
  def handle_init(opts) do
    links = [
      link_bin_input()
      |> to(:jitter_buffer, %JitterBuffer{clock_rate: opts.clock_rate})
      |> to(:depayloader, opts.depayloader)
      |> to_bin_output()
    ]

    {{:ok, spec: %ParentSpec{links: links}}, %{}}
  end
end