Add support for extension headers

Required by the spec
This commit is contained in:
Aaro Altonen 2019-08-14 08:38:21 +03:00
parent 0e2343f1a8
commit ac644ee90d
3 changed files with 17 additions and 1 deletions

View File

@ -41,6 +41,9 @@ rtp_error_t kvz_rtp::frame::dealloc_frame(kvz_rtp::frame::rtp_frame *frame)
if (frame->csrc)
delete[] frame->csrc;
if (frame->ext)
delete frame->ext;
if (frame->payload)
delete[] frame->payload;

View File

@ -41,9 +41,16 @@ namespace kvz_rtp {
uint32_t ssrc;
};
PACKED_STRUCT(ext_header) {
uint16_t type;
uint16_t len;
uint8_t *data;
};
struct rtp_frame {
struct rtp_header header;
uint32_t *csrc;
struct ext_header *ext;
size_t padding_len; /* non-zero if frame is padded */
size_t payload_len; /* payload_len: total_len - header_len - padding length (if padded) */

View File

@ -226,7 +226,13 @@ kvz_rtp::frame::rtp_frame *kvz_rtp::reader::validate_rtp_frame(uint8_t *buffer,
if (frame->header.ext) {
LOG_DEBUG("frame contains extension information");
/* TODO: handle extension */
frame->ext = new kvz_rtp::frame::ext_header;
frame->ext->type = ntohs(*(uint16_t *)ptr[0]);
frame->ext->len = ntohs(*(uint32_t *)ptr[1]);
frame->ext->data = (uint8_t *)ptr + 4;
ptr += 2 * sizeof(uint16_t) + frame->ext->len;
}
/* If padding is set to 1, the last byte of the payload indicates