RTP Over QUIC (RoQ) stack. More...
Data Structures | |
struct | imquic_roq_packet |
Typedefs | |
typedef struct imquic_roq_packet | imquic_roq_packet |
Functions | |
void | imquic_roq_init (void) |
Initialize the native RoQ stack at startup. | |
void | imquic_roq_deinit (void) |
Uninitialize the native RoQ stack. | |
void | imquic_roq_new_connection (imquic_connection *conn, void *user_data) |
Callback the core invokes when a new QUIC connection using RoQ is available. | |
void | imquic_roq_stream_incoming (imquic_connection *conn, uint64_t stream_id, uint8_t *bytes, uint64_t offset, uint64_t length, gboolean complete) |
Callback the core invokes when there's new incoming data on a STREAM . | |
void | imquic_roq_datagram_incoming (imquic_connection *conn, uint8_t *bytes, uint64_t length) |
Callback the core invokes when there's new incoming data on a DATAGRAM . | |
void | imquic_roq_connection_gone (imquic_connection *conn) |
Callback the core invokes when an existing RoQ connection is not available anymore. | |
size_t | imquic_roq_send_rtp (imquic_connection *conn, imquic_roq_multiplexing multiplexing, uint64_t flow_id, uint8_t *bytes, size_t blen, gboolean close_stream) |
Helper to send RTP packets over QUIC, using one of the supported imquic_roq_multiplexing modes. The method only requires the flow ID (to allow the recipient to identify the RTP session) and the RTP packet to send (buffer and size). The stack will then internally frame the packet as needed, using the right multiplexing mode and optionally creating a new STREAM for the purpose. | |
void | imquic_roq_qlog_add_rtp_packet (json_t *data, uint64_t flow_id, uint64_t length) |
Helper to add fields for RtpPacket to an event. | |
void | imquic_roq_qlog_stream_opened (imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id) |
Add a stream_opened event. | |
void | imquic_roq_qlog_stream_packet_created (imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id, uint64_t length) |
Add a stream_packet_created event. | |
void | imquic_roq_qlog_stream_packet_parsed (imquic_qlog *qlog, uint64_t stream_id, uint64_t flow_id, uint64_t length) |
Add a stream_packet_parsed event. | |
void | imquic_roq_qlog_datagram_packet_created (imquic_qlog *qlog, uint64_t flow_id, uint64_t length) |
Add a datagram_packet_created event. | |
void | imquic_roq_qlog_datagram_packet_parsed (imquic_qlog *qlog, uint64_t flow_id, uint64_t length) |
Add a datagram_packet_parsed event. | |
RTP Over QUIC (RoQ) stack.
Implementation of the RTP Over QUIC (RoQ) stack as part of the library itself. At the time of writing, this implements (most of) version -10 of the protocol.
typedef struct imquic_roq_packet imquic_roq_packet |
void imquic_roq_connection_gone | ( | imquic_connection * | conn | ) |
Callback the core invokes when an existing RoQ connection is not available anymore.
conn | The imquic_connection instance that is now gone |
void imquic_roq_datagram_incoming | ( | imquic_connection * | conn, |
uint8_t * | bytes, | ||
uint64_t | length ) |
Callback the core invokes when there's new incoming data on a DATAGRAM
.
conn | The imquic_connection instance for which new DATAGRAM data is available |
bytes | The new data that is available |
length | Size of the new data |
void imquic_roq_deinit | ( | void | ) |
Uninitialize the native RoQ stack.
void imquic_roq_init | ( | void | ) |
Initialize the native RoQ stack at startup.
void imquic_roq_new_connection | ( | imquic_connection * | conn, |
void * | user_data ) |
Callback the core invokes when a new QUIC connection using RoQ is available.
conn | The imquic_connection instance that is now available |
user_data | Optional user data the user/application may have associated to the endpoint this connection belongs to |
void imquic_roq_qlog_add_rtp_packet | ( | json_t * | data, |
uint64_t | flow_id, | ||
uint64_t | length ) |
Helper to add fields for RtpPacket to an event.
data | The data object to add the properties to |
flow_id | The RoQ flow ID to add |
length | The length of the RTP packet |
void imquic_roq_qlog_datagram_packet_created | ( | imquic_qlog * | qlog, |
uint64_t | flow_id, | ||
uint64_t | length ) |
Add a datagram_packet_created
event.
qlog | The imquic_qlog instance to add the event to |
flow_id | The RoQ flow ID used in the datagram |
length | The length of the RTP packet |
void imquic_roq_qlog_datagram_packet_parsed | ( | imquic_qlog * | qlog, |
uint64_t | flow_id, | ||
uint64_t | length ) |
Add a datagram_packet_parsed
event.
qlog | The imquic_qlog instance to add the event to |
flow_id | The RoQ flow ID used in the datagram |
length | The length of the RTP packet |
void imquic_roq_qlog_stream_opened | ( | imquic_qlog * | qlog, |
uint64_t | stream_id, | ||
uint64_t | flow_id ) |
Add a stream_opened
event.
qlog | The imquic_qlog instance to add the event to |
stream_id | The Stream ID that was opened |
flow_id | The RoQ flow ID used in the stream |
void imquic_roq_qlog_stream_packet_created | ( | imquic_qlog * | qlog, |
uint64_t | stream_id, | ||
uint64_t | flow_id, | ||
uint64_t | length ) |
Add a stream_packet_created
event.
qlog | The imquic_qlog instance to add the event to |
stream_id | The Stream ID used for the packet |
flow_id | The RoQ flow ID used in the stream |
length | The length of the RTP packet |
void imquic_roq_qlog_stream_packet_parsed | ( | imquic_qlog * | qlog, |
uint64_t | stream_id, | ||
uint64_t | flow_id, | ||
uint64_t | length ) |
Add a stream_packet_parsed
event.
qlog | The imquic_qlog instance to add the event to |
stream_id | The Stream ID used for the packet |
flow_id | The RoQ flow ID used in the stream |
length | The length of the RTP packet |
size_t imquic_roq_send_rtp | ( | imquic_connection * | conn, |
imquic_roq_multiplexing | multiplexing, | ||
uint64_t | flow_id, | ||
uint8_t * | bytes, | ||
size_t | blen, | ||
gboolean | close_stream ) |
Helper to send RTP packets over QUIC, using one of the supported imquic_roq_multiplexing modes. The method only requires the flow ID (to allow the recipient to identify the RTP session) and the RTP packet to send (buffer and size). The stack will then internally frame the packet as needed, using the right multiplexing mode and optionally creating a new STREAM
for the purpose.
[in] | conn | The RoQ connection to send the RTP packet on |
[in] | multiplexing | The imquic_roq_multiplexing mode to use for sending this packet |
[in] | flow_id | The RoQ flow ID |
[in] | bytes | The buffer containing the RTP packet |
[in] | blen | The size of the buffer to send |
[in] | close_stream | Whether the STREAM should be closed after sending this packet (ignored when using DATAGRAM as a multiplexing mode) |
void imquic_roq_stream_incoming | ( | imquic_connection * | conn, |
uint64_t | stream_id, | ||
uint8_t * | bytes, | ||
uint64_t | offset, | ||
uint64_t | length, | ||
gboolean | complete ) |
Callback the core invokes when there's new incoming data on a STREAM
.
conn | The imquic_connection instance for which new STREAM data is available |
stream_id | The QUIC Stream ID for which new data is available |
bytes | The new data that is available |
offset | The offset in the stream this new data should be put in |
length | Size of the new data |
complete | Whether this data marks the end of this STREAM |