# NegotiatedCodec

<a id="negotiatedcodec"></a>

# NegotiatedCodec

```cpp
#include <icy/webrtc/codecnegotiator.h>

struct NegotiatedCodec
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:81](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L81)

Result of codec negotiation between a remote SDP offer and the local FFmpeg codec inventory.

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| `std::string` | [`rtpName`](#rtpname-1)  | RTP codec name (e.g. "H264", "VP8", "opus") |
| `std::string` | [`ffmpegName`](#ffmpegname-1)  | FFmpeg encoder name (e.g. "libx264", "libvpx", "libopus") |
| `int` | [`payloadType`](#payloadtype-1)  | RTP payload type from SDP. |
| `uint32_t` | [`clockRate`](#clockrate-1)  | RTP clock rate (90000 for video, 48000 for opus) |
| `std::string` | [`fmtp`](#fmtp-1)  | Format parameters (e.g. "profile-level-id=42e01f") |

---

<a id="rtpname-1"></a>

### rtpName

```cpp
std::string rtpName
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:83](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L83)

RTP codec name (e.g. "H264", "VP8", "opus")

---

<a id="ffmpegname-1"></a>

### ffmpegName

```cpp
std::string ffmpegName
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:84](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L84)

FFmpeg encoder name (e.g. "libx264", "libvpx", "libopus")

---

<a id="payloadtype-1"></a>

### payloadType

```cpp
int payloadType = 0
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:85](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L85)

RTP payload type from SDP.

---

<a id="clockrate-1"></a>

### clockRate

```cpp
uint32_t clockRate = 0
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:86](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L86)

RTP clock rate (90000 for video, 48000 for opus)

---

<a id="fmtp-1"></a>

### fmtp

```cpp
std::string fmtp
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:87](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L87)

Format parameters (e.g. "profile-level-id=42e01f")

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
| [`av::VideoCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec) | [`toVideoCodec`](#tovideocodec) `const` | Create an [av::VideoCodec](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec) from this negotiation result. Width, height, fps default to 0 (caller should set these). |
| [`av::VideoCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec) | [`toWebRtcVideoCodec`](#towebrtcvideocodec) `const` | Create an [av::VideoCodec](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec) configured for WebRTC browser playback. Sets low-latency options: ultrafast preset, zerolatency tune, constrained baseline profile for H.264, and appropriate defaults for VP8/VP9/AV1. |
| [`av::AudioCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec) | [`toAudioCodec`](#toaudiocodec) `const` | Create an [av::AudioCodec](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec) from this negotiation result. Channels default to 2, sampleRate to the RTP clock rate. |
| [`av::AudioCodec`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec) | [`toWebRtcAudioCodec`](#towebrtcaudiocodec) `const` | Create an [av::AudioCodec](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec) configured for WebRTC browser playback. Forces 48000 Hz for Opus, sets appropriate options. |

---

<a id="tovideocodec"></a>

### toVideoCodec

`const`

```cpp
av::VideoCodec toVideoCodec(int width = 0, int height = 0, double fps = 0.0) const
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:91](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L91)

Create an [av::VideoCodec](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec) from this negotiation result. Width, height, fps default to 0 (caller should set these).

---

<a id="towebrtcvideocodec"></a>

### toWebRtcVideoCodec

`const`

```cpp
av::VideoCodec toWebRtcVideoCodec(int width = 0, int height = 0, double fps = 0.0) const
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:98](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L98)

Create an [av::VideoCodec](https://auscaster.com/icey/docs/api-reference/icy-av-VideoCodec.md#videocodec) configured for WebRTC browser playback. Sets low-latency options: ultrafast preset, zerolatency tune, constrained baseline profile for H.264, and appropriate defaults for VP8/VP9/AV1.

---

<a id="toaudiocodec"></a>

### toAudioCodec

`const`

```cpp
av::AudioCodec toAudioCodec(int channels = 2, int sampleRate = 0) const
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:103](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L103)

Create an [av::AudioCodec](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec) from this negotiation result. Channels default to 2, sampleRate to the RTP clock rate.

---

<a id="towebrtcaudiocodec"></a>

### toWebRtcAudioCodec

`const`

```cpp
av::AudioCodec toWebRtcAudioCodec(int channels = 2) const
```

[Defined in src/webrtc/include/icy/webrtc/codecnegotiator.h:108](https://github.com/auscaster/icey/blob/main/src/webrtc/include/icy/webrtc/codecnegotiator.h#L108)

Create an [av::AudioCodec](https://auscaster.com/icey/docs/api-reference/icy-av-AudioCodec.md#audiocodec) configured for WebRTC browser playback. Forces 48000 Hz for Opus, sets appropriate options.
