# `ExSDP.Attribute`
[🔗](https://github.com/membraneframework/ex_sdp/blob/v1.2.0/lib/ex_sdp/attribute.ex#L1)

This module represents Attributes fields of SDP.

# `cat`

```elixir
@type cat() :: {:cat, binary()}
```

# `charset`

```elixir
@type charset() :: {:charset, binary()}
```

# `fingerprint`

```elixir
@type fingerprint() :: {:fingerprint, {hash_function(), binary()}}
```

# `flag_attributes`

```elixir
@type flag_attributes() ::
  :recvonly
  | :sendrecv
  | :sendonly
  | :inactive
  | :extmap_allow_mixed
  | :rtcp_mux
  | :rtcp_rsize
```

# `framerate`

```elixir
@type framerate() :: {:framerate, framerate_value()}
```

# `framerate_value`

```elixir
@type framerate_value() :: float() | {integer(), integer()}
```

# `hash_function`

```elixir
@type hash_function() :: :sha1 | :sha224 | :sha256 | :sha384 | :sha512
```

# `ice_options`

```elixir
@type ice_options() :: {:ice_options, binary() | [binary()]}
```

# `ice_pwd`

```elixir
@type ice_pwd() :: {:ice_pwd, binary()}
```

# `ice_ufrag`

```elixir
@type ice_ufrag() :: {:ice_ufrag, binary()}
```

# `key`

```elixir
@type key() :: module() | binary() | atom()
```

# `keywds`

```elixir
@type keywds() :: {:keywds, binary()}
```

# `lang`

```elixir
@type lang() :: {:lang, binary()}
```

# `maxptime`

```elixir
@type maxptime() :: {:maxptime, non_neg_integer()}
```

# `mid`

```elixir
@type mid() :: {:mid, binary()}
```

# `orient`

```elixir
@type orient() :: {:orient, orient_value()}
```

# `orient_value`

```elixir
@type orient_value() :: :portrait | :landscape | :seascape
```

# `ptime`

```elixir
@type ptime() :: {:ptime, non_neg_integer()}
```

# `quality`

```elixir
@type quality() :: {:quality, non_neg_integer()}
```

# `sdplang`

```elixir
@type sdplang() :: {:sdplang, binary()}
```

# `setup`

```elixir
@type setup() :: {:setup, setup_value()}
```

# `setup_value`

```elixir
@type setup_value() :: :active | :passive | :actpass | :holdconn
```

# `t`

```elixir
@type t() ::
  ExSDP.Attribute.Extmap.t()
  | ExSDP.Attribute.FMTP.t()
  | ExSDP.Attribute.Group.t()
  | ExSDP.Attribute.MSID.t()
  | ExSDP.Attribute.RTCPFeedback.t()
  | ExSDP.Attribute.RTPMapping.t()
  | ExSDP.Attribute.SSRC.t()
  | ExSDP.Attribute.SSRCGroup.t()
  | ExSDP.Attribute.RID.t()
  | ExSDP.Attribute.Simulcast.t()
  | cat()
  | charset()
  | keywds()
  | orient()
  | lang()
  | sdplang()
  | tool()
  | type()
  | framerate()
  | maxptime()
  | ptime()
  | quality()
  | ice_ufrag()
  | ice_pwd()
  | ice_options()
  | fingerprint()
  | setup()
  | mid()
  | flag_attributes()
  | {String.t(), String.t()}
  | String.t()
```

# `tool`

```elixir
@type tool() :: {:tool, binary()}
```

# `type`

```elixir
@type type() :: {:type, type_value()}
```

# `type_value`

```elixir
@type type_value() :: :broadcast | :meeting | :moderated | :test | :H332
```

# `parse`

```elixir
@spec parse(binary(), opts :: Keyword.t()) :: {:ok, t()} | {:error, atom()}
```

Parses SDP Attribute line.

`line` is a string in form of `a=attribute` or `a=attribute:value`.
`opts` is a keyword list that can contain some information for parsers.

Unknown attributes keys are returned as strings, known ones as atoms.
For known attributes please refer to `t()`.

---

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