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,
    accepted_format: RTP

  def_output_pad :output,
    accepted_format: _any

  @impl true
  def handle_init(_ctx, opts) do
    structure =
      bin_input()
      |> child(:jitter_buffer, %JitterBuffer{clock_rate: opts.clock_rate})
      |> child(:depayloader, opts.depayloader)
      |> bin_output()

    {[spec: structure], %{}}
  end
end