lib/membrane/rtcp/app_packet.ex

defmodule Membrane.RTCP.AppPacket do
  @moduledoc """
  Parses RTCP Application-defined (APP) packets
  defined in [RFC3550](https://tools.ietf.org/html/rfc3550#section-6.7)
  """

  @behaviour Membrane.RTCP.Packet

  defstruct [:subtype, :ssrc, :name, :data]

  @type t :: %__MODULE__{
          subtype: non_neg_integer(),
          ssrc: non_neg_integer(),
          name: String.t(),
          data: binary()
        }

  @impl true
  def decode(<<ssrc::32, name::bitstring-size(32), data::binary>>, subtype) do
    {:ok,
     %__MODULE__{
       subtype: subtype,
       ssrc: ssrc,
       name: name,
       data: data
     }}
  end

  @impl true
  def encode(%__MODULE__{
        subtype: subtype,
        ssrc: ssrc,
        name: name,
        data: data
      }) do
    {<<ssrc::32, name::bitstring-size(32), data::binary>>, subtype}
  end
end