# RealtimePacketQueue

<a id="realtimepacketqueue"></a>

# RealtimePacketQueue

```cpp
#include <icy/av/realtimepacketqueue.h>

template<class PacketT>
class RealtimePacketQueue
```

[Defined in src/av/include/icy/av/realtimepacketqueue.h:30](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/realtimepacketqueue.h#L30)

> **Inherits:** [`AsyncPacketQueue< PacketT >`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue)

[Queue](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) that emits media packets in presentation-timestamp order relative to a realtime clock.

Packets are sorted by their `time` field on insertion. On each pop attempt the queue checks whether the wall-clock time since stream activation has reached the next packet's timestamp; if not, the packet is held back. This provides a soft realtime playback scheduler.

## List of all members

| Name | Kind | Owner |
|------|------|-------|
| [`RealtimePacketQueue`](#realtimepacketqueue-1) | `function` | Declared here |
| [`~RealtimePacketQueue`](#realtimepacketqueue-2) | `function` | Declared here |
| [`push`](#push-4) | `function` | Declared here |
| [`realTime`](#realtime) | `function` | Declared here |
| [`_startTime`](#_starttime) | `variable` | Declared here |
| [`popNext`](#popnext-1) | `function` | Declared here |
| [`onStreamStateChange`](#onstreamstatechange-9) | `function` | Declared here |
| [`BaseQueue`](#basequeue) | `typedef` | Declared here |
| [`emitter`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#emitter) | `variable` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue-1) | `function` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`~AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue-2) | `function` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`close`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#close) | `function` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`process`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#process) | `function` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`accepts`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#accepts) | `function` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`retention`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#retention) | `function` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`dispatch`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#dispatch) | `function` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#onstreamstatechange) | `function` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#queue) | `typedef` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`Processor`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#processor) | `typedef` | Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue) |
| [`AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue-1) | `function` | Inherited from [`AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue) |
| [`cancel`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#cancel) | `function` | Inherited from [`AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue) |
| [`_thread`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#_thread-2) | `variable` | Inherited from [`AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue) |
| [`~AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue-2) | `function` | Inherited from [`AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue) |
| [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#queue-1) | `typedef` | Inherited from [`AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue) |
| [`ondispatch`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#ondispatch) | `variable` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-1) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`~RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-2) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`push`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#push-2) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`flush`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#flush-1) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`clear`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#clear-4) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`run`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#run-4) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`runTimeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runtimeout) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`dispatch`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dispatch-1) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`timeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#timeout) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`setTimeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#settimeout) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`dropped`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dropped) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`_limit`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_limit-2) | `variable` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`_timeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_timeout) | `variable` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`_dropped`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_dropped) | `variable` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-3) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#operator-79) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-4) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#operator-80) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`popNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#popnext) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`dispatchNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dispatchnext) | `function` | Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue) |
| [`push`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#push) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`push`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#push-1) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`empty`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#empty-3) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`front`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#front) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`back`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#back) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`pop`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#pop) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`sort`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#sort) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`size`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#size-6) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-3) | `function` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`_queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#_queue) | `variable` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`_mutex`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#_mutex-4) | `variable` | Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2) |
| [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-1) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`~Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-2) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`run`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`cancel`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`cancelled`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancelled-3) | `function` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`exit`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#exit) | `variable` | Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable) |
| [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor-1) | `function` | Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) |
| [`process`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#process-1) | `function` | Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) |
| [`accepts`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#accepts-1) | `function` | Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) |
| [`operator<<`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#operator-69) | `function` | Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor) |
| [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-1) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`~PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-2) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-1) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-2) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-3) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-4) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-5) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`getEmitter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#getemitter) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`retention`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#retention-1) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#onstreamstatechange-1) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`_emitter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#_emitter) | `variable` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-3) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#operator-72) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-4) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |
| [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#operator-73) | `function` | Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter) |

## Inherited from [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue)

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`emitter`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#emitter)  |  |
| `function` | [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue-1) `inline` |  |
| `function` | [`~AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue-2) `virtual` `inline` |  |
| `function` | [`close`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#close) `virtual` `inline` | Flushes remaining packets, cancels the queue, and joins the dispatch thread. |
| `function` | [`process`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#process) `virtual` `inline` `override` | Clones the incoming packet and pushes it onto the async queue. This queue is therefore an explicit [PacketStream](https://auscaster.com/icey/docs/api-reference/icy-PacketStream.md#packetstream) ownership boundary. Drops the packet with a warning if the queue has been cancelled. |
| `function` | [`accepts`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#accepts) `virtual` `inline` `override` | Returns true if the packet can be cast to type `T`. |
| `function` | [`retention`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#retention) `virtual` `const` `inline` `override` | 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. |
| `function` | [`dispatch`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#dispatch) `virtual` `inline` `override` | Emits the packet to downstream processors from the async thread. |
| `function` | [`onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#onstreamstatechange) `virtual` `inline` `override` | Closes the queue on [`Error`](https://auscaster.com/icey/docs/api-reference/icy-Error.md#error) or `Closed` stream state transitions. |
| `typedef` | [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#queue)  |  |
| `typedef` | [`Processor`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#processor)  |  |

## Inherited from [`AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue-1) `inline` |  |
| `function` | [`cancel`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#cancel) `virtual` `inline` `override` | Cancels the queue and joins the dispatch thread. |
| `variable` | [`_thread`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#_thread-2)  |  |
| `function` | [`~AsyncQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#asyncqueue-2) `virtual` `inline` |  |
| `typedef` | [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncQueue.md#queue-1)  |  |

## Inherited from [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue)

| Kind | Name | Description |
|------|------|-------------|
| `variable` | [`ondispatch`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#ondispatch)  | The default dispatch function. Must be set before the queue is running. |
| `function` | [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-1) `inline` |  |
| `function` | [`~RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-2) `virtual` `inline` |  |
| `function` | [`push`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#push-2) `virtual` `inline` | Push an item onto the queue. The queue takes ownership of the item pointer. |
| `function` | [`flush`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#flush-1) `virtual` `inline` | Flush all outgoing items. |
| `function` | [`clear`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#clear-4) `inline` |  |
| `function` | [`run`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#run-4) `virtual` `inline` `override` | Called asynchronously to dispatch queued items. If not timeout is set this method blocks until [cancel()](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7) is called, otherwise [runTimeout()](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runtimeout) will be called. |
| `function` | [`runTimeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runtimeout) `virtual` `inline` | Called asynchronously to dispatch queued items until the queue is empty or the timeout expires. Pseudo protected for std::bind compatability. |
| `function` | [`dispatch`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dispatch-1) `virtual` `inline` | Dispatch a single item to listeners. |
| `function` | [`timeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#timeout) `inline` |  |
| `function` | [`setTimeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#settimeout) `inline` | Sets the dispatch timeout. Must only be called when the queue is empty. |
| `function` | [`dropped`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dropped) `const` `inline` |  |
| `variable` | [`_limit`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_limit-2)  |  |
| `variable` | [`_timeout`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_timeout)  |  |
| `variable` | [`_dropped`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#_dropped)  |  |
| `function` | [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-3)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#operator-79)  | Deleted assignment operator. |
| `function` | [`RunnableQueue`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#runnablequeue-4)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#operator-80)  | Deleted assignment operator. |
| `function` | [`popNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#popnext) `virtual` `inline` | Pops the next waiting item. |
| `function` | [`dispatchNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#dispatchnext) `virtual` `inline` | Pops and dispatches the next waiting item. |

## Inherited from [`Queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-2)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`push`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#push) `inline` | Appends an item to the back of the queue (thread-safe). |
| `function` | [`push`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#push-1) `inline` | Appends an item to the back of the queue by move (thread-safe). |
| `function` | [`empty`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#empty-3) `const` `inline` |  |
| `function` | [`front`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#front) `const` `inline` |  |
| `function` | [`back`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#back) `const` `inline` |  |
| `function` | [`pop`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#pop) `inline` | Removes the front item from the queue (thread-safe). |
| `function` | [`sort`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#sort) `inline` | Sorts all queued items using the given comparator (thread-safe). |
| `function` | [`size`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#size-6) `const` `inline` |  |
| `function` | [`queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#queue-3) `const` `inline` |  |
| `variable` | [`_queue`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#_queue)  |  |
| `variable` | [`_mutex`](https://auscaster.com/icey/docs/api-reference/icy-Queue.md#_mutex-4)  |  |

## Inherited from [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-1) `inline` |  |
| `function` | [`~Runnable`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#runnable-2) `virtual` | Defaulted destructor. |
| `function` | [`run`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) `virtual` | The run method will be called by the asynchronous context. |
| `function` | [`cancel`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancel-7) `virtual` `inline` | Cancel the current task. The [run()](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#run-11) method should return ASAP. |
| `function` | [`cancelled`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#cancelled-3) `virtual` `const` `inline` | Returns true when the task has been cancelled. |
| `variable` | [`exit`](https://auscaster.com/icey/docs/api-reference/icy-basic-Runnable.md#exit)  |  |

## Inherited from [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`PacketProcessor`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#packetprocessor-1) `inline` |  |
| `function` | [`process`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#process-1) `virtual` | This method performs processing on the given packet and emits the result. |
| `function` | [`accepts`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#accepts-1) `virtual` `inline` | This method ensures compatibility with the given packet type. Return false to reject the packet. |
| `function` | [`operator<<`](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#operator-69) `virtual` `inline` | [Stream](https://auscaster.com/icey/docs/api-reference/icy-Stream.md#stream) operator alias for [process()](https://auscaster.com/icey/docs/api-reference/icy-PacketProcessor.md#process-1) |

## Inherited from [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter)

| Kind | Name | Description |
|------|------|-------------|
| `function` | [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-1)  | Construct the adapter, binding it to the given packet signal. |
| `function` | [`~PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-2) `virtual` `inline` |  |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-1) `virtual` | Emit a mutable raw buffer as a packet. |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-2) `virtual` | Emit a read-only raw buffer as a packet (data is copied internally). |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-3) `virtual` | Emit a string as a packet (data is copied internally). |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-4) `virtual` | Emit a flag-only packet carrying no payload data. |
| `function` | [`emit`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#emit-5) `virtual` | Emit an existing packet directly onto the outgoing signal. |
| `function` | [`getEmitter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#getemitter)  | Returns a reference to the outgoing packet signal. |
| `function` | [`retention`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#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. |
| `function` | [`onStreamStateChange`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#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. |
| `variable` | [`_emitter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#_emitter)  |  |
| `function` | [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-3)  | NonCopyable and NonMovable. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#operator-72)  | Deleted assignment operator. |
| `function` | [`PacketStreamAdapter`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#packetstreamadapter-4)  | Deleted constructor. |
| `function` | [`operator=`](https://auscaster.com/icey/docs/api-reference/icy-PacketStreamAdapter.md#operator-73)  | Deleted assignment operator. |

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`RealtimePacketQueue`](#realtimepacketqueue-1) `inline` | Construct the queue with a maximum capacity. |
|  | [`~RealtimePacketQueue`](#realtimepacketqueue-2) `virtual` `inline` `noexcept` |  |
| `void` | [`push`](#push-4) `virtual` `inline` `override` | Insert a packet into the queue and re-sort by presentation timestamp. |
| `int64_t` | [`realTime`](#realtime) `inline` | Return the elapsed time since stream activation in microseconds. |

---

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

### RealtimePacketQueue

`inline`

```cpp
inline RealtimePacketQueue(int maxSize = 1024)
```

[Defined in src/av/include/icy/av/realtimepacketqueue.h:37](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/realtimepacketqueue.h#L37)

Construct the queue with a maximum capacity.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `maxSize` | `int` | The maximum number of packets the queue will hold. |

---

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

### ~RealtimePacketQueue

`virtual` `inline` `noexcept`

```cpp
virtual inline ~RealtimePacketQueue() noexcept
```

[Defined in src/av/include/icy/av/realtimepacketqueue.h:42](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/realtimepacketqueue.h#L42)

---

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

### push

`virtual` `inline` `override`

```cpp
virtual inline void push(PacketT * item) override
```

[Defined in src/av/include/icy/av/realtimepacketqueue.h:48](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/realtimepacketqueue.h#L48)

Insert a packet into the queue and re-sort by presentation timestamp.

#### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `item` | `PacketT *` | The packet to enqueue; ownership is transferred. |

---

<a id="realtime"></a>

### realTime

`inline`

```cpp
inline int64_t realTime()
```

[Defined in src/av/include/icy/av/realtimepacketqueue.h:55](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/realtimepacketqueue.h#L55)

Return the elapsed time since stream activation in microseconds.

## Protected Attributes

| Return | Name | Description |
|--------|------|-------------|
| `int64_t` | [`_startTime`](#_starttime)  |  |

---

<a id="_starttime"></a>

### _startTime

```cpp
int64_t _startTime
```

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

## Protected Methods

| Return | Name | Description |
|--------|------|-------------|
| `PacketT *` | [`popNext`](#popnext-1) `virtual` `inline` `override` | Return the next packet whose timestamp is <= [realTime()](#realtime), or nullptr if none is ready. |
| `void` | [`onStreamStateChange`](#onstreamstatechange-9) `virtual` `inline` `override` | Record the stream start time when the stream becomes active. |

---

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

### popNext

`virtual` `inline` `override`

```cpp
virtual inline PacketT * popNext() override
```

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

Return the next packet whose timestamp is <= [realTime()](#realtime), or nullptr if none is ready.

#### Reimplements

- [`RunnableQueue::popNext`](https://auscaster.com/icey/docs/api-reference/icy-RunnableQueue.md#popnext)

---

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

### onStreamStateChange

`virtual` `inline` `override`

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

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

Record the stream start time when the stream becomes active.

#### Reimplements

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

## Public Types

| Name | Description |
|------|-------------|
| [`BaseQueue`](#basequeue)  |  |

---

<a id="basequeue"></a>

### BaseQueue

```cpp
using BaseQueue = AsyncPacketQueue< PacketT >
```

Type: [`AsyncPacketQueue`](https://auscaster.com/icey/docs/api-reference/icy-AsyncPacketQueue.md#asyncpacketqueue)< PacketT >

[Defined in src/av/include/icy/av/realtimepacketqueue.h:33](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/realtimepacketqueue.h#L33)
