# PacketStreamAdapter

<a id="packetstreamadapter"></a>

# PacketStreamAdapter

```cpp
#include <icy/packetstream.h>

class PacketStreamAdapter
```

[Defined in src/base/include/icy/packetstream.h:44](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L44)

> **Subclassed by:** [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor), [`ThreadedStreamReader`](https://auscaster.com/icey/docs/api-reference/icy-ThreadedStreamReader.md#threadedstreamreader), [`ICapture`](https://auscaster.com/icey/docs/api-reference/icy-av-ICapture.md#icapture), [`FormWriter`](https://auscaster.com/icey/docs/api-reference/icy-http-FormWriter.md#formwriter), [`WebRtcTrackReceiver`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-WebRtcTrackReceiver.md#webrtctrackreceiver)

This class is a wrapper for integrating external classes with the a [PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream)'s data flow and state machine.

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`PacketStreamAdapter`](#packetstreamadapter-1)  | Construct the adapter, binding it to the given packet signal. |
|  | [`~PacketStreamAdapter`](#packetstreamadapter-2) `virtual` `inline` |  |
| `void` | [`emit`](#emit-1) `virtual` | Emit a mutable raw buffer as a packet. |
| `void` | [`emit`](#emit-2) `virtual` | Emit a read-only raw buffer as a packet (data is copied internally). |
| `void` | [`emit`](#emit-3) `virtual` | Emit a string as a packet (data is copied internally). |
| `void` | [`emit`](#emit-4) `virtual` | Emit a flag-only packet carrying no payload data. |
| `void` | [`emit`](#emit-5) `virtual` | Emit an existing packet directly onto the outgoing signal. |
| [`PacketSignal`](https://auscaster.com/icey/docs/api-reference/base.md#packetsignal) & | [`getEmitter`](#getemitter)  | Returns a reference to the outgoing packet signal. |
| [`PacketRetention`](https://auscaster.com/icey/docs/api-reference/base.md#packetretention) | [`retention`](#retention-1) `virtual` `const` | Returns how this adapter treats incoming packet lifetime. Most adapters are synchronous and therefore only borrow the packet for the current call chain. Queue-style adapters override this to advertise that they clone before deferred use. Callers may treat the first adapter reporting Cloned or Retained as the explicit ownership boundary in the stream graph. |
| `void` | [`onStreamStateChange`](#onstreamstatechange-1) `virtual` `inline` | Called by the [PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) to notify when the internal [Stream](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) state changes. On receiving the Stopped state, it is the responsibility of the adapter to have ceased all outgoing packet transmission, especially in multi-thread scenarios. |

---

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

### PacketStreamAdapter

```cpp
PacketStreamAdapter(PacketSignal & emitter)
```

[Defined in src/base/include/icy/packetstream.h:49](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L49)

Construct the adapter, binding it to the given packet signal.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `emitter` | [`PacketSignal`](https://auscaster.com/icey/docs/api-reference/base.md#packetsignal) & | The outgoing packet signal owned by the subclass. |

---

<a id="packetstreamadapter-2"></a>

### ~PacketStreamAdapter

`virtual` `inline`

```cpp
virtual inline ~PacketStreamAdapter()
```

[Defined in src/base/include/icy/packetstream.h:50](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L50)

---

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

### emit

`virtual`

```cpp
virtual void emit(char * data, size_t len, unsigned flags = 0)
```

[Defined in src/base/include/icy/packetstream.h:56](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L56)

Emit a mutable raw buffer as a packet.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `data` | `char *` | Pointer to the buffer (not copied; caller retains ownership). |
| `len` | `size_t` | Number of bytes in the buffer. |
| `flags` | `unsigned` | Optional packet flags (see PacketFlags). |

---

<a id="emit-2"></a>

### emit

`virtual`

```cpp
virtual void emit(const char * data, size_t len, unsigned flags = 0)
```

[Defined in src/base/include/icy/packetstream.h:62](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L62)

Emit a read-only raw buffer as a packet (data is copied internally).

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `data` | `const char *` | Pointer to the buffer. |
| `len` | `size_t` | Number of bytes in the buffer. |
| `flags` | `unsigned` | Optional packet flags (see PacketFlags). |

---

<a id="emit-3"></a>

### emit

`virtual`

```cpp
virtual void emit(const std::string & str, unsigned flags = 0)
```

[Defined in src/base/include/icy/packetstream.h:67](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L67)

Emit a string as a packet (data is copied internally).

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `str` | `const std::string &` | String payload. |
| `flags` | `unsigned` | Optional packet flags (see PacketFlags). |

---

<a id="emit-4"></a>

### emit

`virtual`

```cpp
virtual void emit(unsigned flags = 0)
```

[Defined in src/base/include/icy/packetstream.h:71](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L71)

Emit a flag-only packet carrying no payload data.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `flags` | `unsigned` | Packet flags to embed in the emitted [FlagPacket](https://auscaster.com/icey/docs/api-reference/icy-FlagPacket.md#flagpacket). |

---

<a id="emit-5"></a>

### emit

`virtual`

```cpp
virtual void emit(IPacket & packet)
```

[Defined in src/base/include/icy/packetstream.h:75](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L75)

Emit an existing packet directly onto the outgoing signal.

#### Reimplemented by

- [`MediaCapture::emit`](https://auscaster.com/icey/docs/api-reference/icy-av-MediaCapture.md#emit-7)

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `packet` | [`IPacket`](https://auscaster.com/icey/docs/api-reference/icy-IPacket.md#ipacket) & | The packet to forward; must remain valid for the duration of the call. |

---

<a id="getemitter"></a>

### getEmitter

```cpp
PacketSignal & getEmitter()
```

[Defined in src/base/include/icy/packetstream.h:78](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L78)

Returns a reference to the outgoing packet signal.

---

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

### retention

`virtual` `const`

```cpp
virtual PacketRetention retention() const
```

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

Returns how this adapter treats incoming packet lifetime. Most adapters are synchronous and therefore only borrow the packet for the current call chain. Queue-style adapters override this to advertise that they clone before deferred use. Callers may treat the first adapter reporting Cloned or Retained as the explicit ownership boundary in the stream graph.

#### Reimplemented by

- [`SyncPacketQueue::retention`](https://auscaster.com/icey/docs/api-reference/icy-SyncPacketQueue.md#retention-2)
- [`AsyncPacketQueue::retention`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#retention)
- [`AsyncPacketQueue::retention`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#retention)
- [`AsyncPacketQueue::retention`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#retention)
- [`AsyncPacketQueue::retention`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#retention)

---

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

### onStreamStateChange

`virtual` `inline`

```cpp
virtual inline void onStreamStateChange(const PacketStreamState &)
```

[Defined in src/base/include/icy/packetstream.h:93](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L93)

Called by the [PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) to notify when the internal [Stream](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) state changes. On receiving the Stopped state, it is the responsibility of the adapter to have ceased all outgoing packet transmission, especially in multi-thread scenarios.

#### Reimplemented by

- [`FPSLimiter::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-av-FPSLimiter.md#onstreamstatechange-6)
- [`SyncPacketQueue::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-SyncPacketQueue.md#onstreamstatechange-4)
- [`AsyncPacketQueue::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#onstreamstatechange)
- [`AsyncPacketQueue::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#onstreamstatechange)
- [`AsyncPacketQueue::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#onstreamstatechange)
- [`AsyncPacketQueue::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#onstreamstatechange)
- [`AudioPacketEncoder::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-av-AudioPacketEncoder.md#onstreamstatechange-7)
- [`ICapture::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-av-ICapture.md#onstreamstatechange-5)
- [`MultiplexPacketEncoder::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-av-MultiplexPacketEncoder.md#onstreamstatechange-10)
- [`RealtimePacketQueue::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-av-RealtimePacketQueue.md#onstreamstatechange-9)
- [`VideoPacketEncoder::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-av-VideoPacketEncoder.md#onstreamstatechange-8)
- [`StreamWriter::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-StreamWriter.md#onstreamstatechange-3)
- [`WebRtcTrackSender::onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-wrtc-WebRtcTrackSender.md#onstreamstatechange-11)

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| [`PacketSignal`](https://auscaster.com/icey/docs/api-reference/base.md#packetsignal) & | [`_emitter`](#_emitter)  |  |

---

<a id="_emitter"></a>

### _emitter

```cpp
PacketSignal & _emitter
```

Type: [`PacketSignal`](https://auscaster.com/icey/docs/api-reference/base.md#packetsignal) &

[Defined in src/base/include/icy/packetstream.h:102](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L102)

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`PacketStreamAdapter`](#packetstreamadapter-3)  | NonCopyable and NonMovable. |
| [`PacketStreamAdapter`](#packetstreamadapter) & | [`operator=`](#operator-72)  | Deleted assignment operator. |
|  | [`PacketStreamAdapter`](#packetstreamadapter-4)  | Deleted constructor. |
| [`PacketStreamAdapter`](#packetstreamadapter) & | [`operator=`](#operator-73)  | Deleted assignment operator. |

---

<a id="packetstreamadapter-3"></a>

### PacketStreamAdapter

```cpp
PacketStreamAdapter(const PacketStreamAdapter &) = delete
```

[Defined in src/base/include/icy/packetstream.h:97](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L97)

NonCopyable and NonMovable.

---

<a id="operator-72"></a>

### operator=

```cpp
PacketStreamAdapter & operator=(const PacketStreamAdapter &) = delete
```

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

Deleted assignment operator.

---

<a id="packetstreamadapter-4"></a>

### PacketStreamAdapter

```cpp
PacketStreamAdapter(PacketStreamAdapter &&) = delete
```

[Defined in src/base/include/icy/packetstream.h:99](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L99)

Deleted constructor.

---

<a id="operator-73"></a>

### operator=

```cpp
PacketStreamAdapter & operator=(PacketStreamAdapter &&) = delete
```

[Defined in src/base/include/icy/packetstream.h:100](https://github.com/auscaster/icey/blob/main/src/base/include/icy/packetstream.h#L100)

Deleted assignment operator.
