diff --git a/daemon/rtcp.c b/daemon/rtcp.c index ee64a09f5..f7b5f1104 100644 --- a/daemon/rtcp.c +++ b/daemon/rtcp.c @@ -54,6 +54,7 @@ #define SDES_TYPE_TOOL 6 #define SDES_TYPE_NOTE 7 #define SDES_TYPE_PRIV 8 +#define SDES_TYPE_MID 15 /* RTCP XR block types */ #define BT_LOSS_RLE 1 @@ -1412,7 +1413,7 @@ void rtcp_init(void) { static GString *rtcp_sender_report(struct ssrc_sender_report *ssr, uint32_t ssrc, uint32_t ssrc_out, uint32_t ts, uint32_t packets, uint32_t octets, ssrc_q *rrs, - ssrc_rr_q *srrs) + ssrc_rr_q *srrs, struct call_media *media) { GString *ret = g_string_sized_new(128); g_string_set_size(ret, sizeof(struct sender_report_packet)); @@ -1526,6 +1527,14 @@ static GString *rtcp_sender_report(struct ssrc_sender_report *ssr, }; g_string_append_len(ret, rtpe_instance_id.s, rtpe_instance_id.len); + // mid + if (media->bundle) { + // assume that we have a media ID and that the extension is available + g_string_append_c(ret, SDES_TYPE_MID); + g_string_append_c(ret, media->media_id.len); + g_string_append_len(ret, media->media_id.s, media->media_id.len); + } + // padding and set final length size_t sdes_end_len = ret->len; size_t padded_len = (sdes_end_len + 3L) & ~3L; @@ -1593,7 +1602,7 @@ void rtcp_send_report(struct call_media *media, struct ssrc_entry_call *ssrc_out atomic_get_na(&ssrc_out->stats->timestamp), atomic64_get_na(&ssrc_out->stats->packets), atomic64_get(&ssrc_out->stats->bytes), - &rrs, &srrs); + &rrs, &srrs, media); // handle crypto