# `Membrane.RTP.PayloadFormat`
[🔗](https://github.com/membraneframework/membrane_rtp_format/blob/v0.11.1/lib/rtp/payload_format.ex#L1)

This module contains utilities for resolving RTP default payload types,
encoding names, clock rates and (de)payloaders.

# `payload_type_mapping`

```elixir
@type payload_type_mapping() :: %{
  required(Membrane.RTP.payload_type()) =&gt; %{
    encoding_name: Membrane.RTP.encoding_name(),
    clock_rate: Membrane.RTP.clock_rate()
  }
}
```

# `t`

```elixir
@type t() :: %Membrane.RTP.PayloadFormat{
  depayloader: module() | nil,
  encoding_name: Membrane.RTP.encoding_name(),
  frame_detector: (binary() -&gt; boolean()) | nil,
  keyframe_detector: (binary() -&gt; boolean()) | nil,
  payload_type: Membrane.RTP.payload_type() | nil,
  payloader: module() | nil
}
```

# `get`

```elixir
@spec get(Membrane.RTP.encoding_name()) :: t()
```

Returns payload format registered for given encoding name.

# `get_payload_type_mapping`

```elixir
@spec get_payload_type_mapping(Membrane.RTP.payload_type()) :: %{
  optional(:encoding_name) =&gt; Membrane.RTP.encoding_name(),
  optional(:clock_rate) =&gt; Membrane.RTP.clock_rate()
}
```

Returns encoding name and clock rate for given payload type, if registered.

# `register`

```elixir
@spec register(t()) :: :ok | no_return()
```

Registers payload format.

Raises if some payload format field was already registered and set to different value.

# `register_payload_type_mapping`

```elixir
@spec register_payload_type_mapping(
  Membrane.RTP.dynamic_payload_type(),
  Membrane.RTP.encoding_name(),
  Membrane.RTP.clock_rate()
) :: :ok | no_return()
```

Registers default encoding name and clock rate for a dynamic payload_type

# `resolve`

```elixir
@spec resolve(
  encoding_name: Membrane.RTP.encoding_name() | nil,
  payload_type: Membrane.RTP.payload_type() | nil,
  clock_rate: Membrane.RTP.clock_rate() | nil,
  payload_type_mapping: payload_type_mapping() | nil
) :: %{
  payload_format: t() | nil,
  payload_type: Membrane.RTP.payload_type() | nil,
  clock_rate: Membrane.RTP.clock_rate() | nil
}
```

Quality of life function that makes best effort resolution of `PayloadFormat`, payload type and clock rate based
on provided arguments. Prefers provided values over registered defaults.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
