Browse Source

MT#63317 associate SSRC with media

Change-Id: I0fba8f0a2c98c4b80b1688c85768efdf4410abe8
rfuchs/dtls-ice
Richard Fuchs 3 months ago
parent
commit
4c78949654
2 changed files with 17 additions and 2 deletions
  1. +15
    -2
      daemon/media_socket.c
  2. +2
    -0
      include/ssrc.h

+ 15
- 2
daemon/media_socket.c View File

@ -79,6 +79,7 @@ struct packet_handler_ctx {
bool unkernelize_subscriptions; // if our peer address changed
bool kernelize; // true if stream can be kernelized
bool rtcp_discard; // do not forward RTCP
bool media_set; // media explicitly know via MID header extension
// output:
struct media_packet mp; // passed to handlers
@ -2857,6 +2858,7 @@ static void rtp_ext_mid_parse(struct packet_handler_ctx *phc, const struct rtp_e
return; // XXX log error?
media_packet_reset_media(phc, media);
phc->media_set = true;
}
static ssize_t rtp_ext_mid_len(struct call_media *media) {
return media->media_id.len ?: -1;
@ -2955,9 +2957,13 @@ static void media_packet_rtp_in(struct packet_handler_ctx *phc) {
const char *unkern = NULL;
__auto_type ssrc_hash = &phc->mp.media->ssrc_hash_in;
if (phc->mp.media->bundle)
ssrc_hash = &phc->mp.media->bundle->ssrc_hash_in;
if (phc->mp.rtp) {
unkern = __stream_ssrc_in(phc->in_srtp, phc->mp.rtp->ssrc, &phc->mp.ssrc_in,
&phc->mp.media->ssrc_hash_in);
ssrc_hash);
if (G_LIKELY(phc->mp.ssrc_in))
payload_tracker_add(&phc->mp.ssrc_in->tracker, phc->payload_type);
@ -2986,11 +2992,18 @@ static void media_packet_rtp_in(struct packet_handler_ctx *phc) {
}
else if (phc->rtcp) {
unkern = __stream_ssrc_in(phc->in_srtp, phc->mp.rtcp->ssrc, &phc->mp.ssrc_in,
&phc->mp.media->ssrc_hash_in);
ssrc_hash);
}
if (unkern)
phc->unkernelize = unkern;
if (phc->mp.media->bundle) {
if (phc->media_set)
phc->mp.ssrc_in->media = phc->mp.media;
else if (phc->mp.ssrc_in->media)
media_packet_reset_media(phc, phc->mp.ssrc_in->media);
}
}
static void media_packet_rtp_out(struct packet_handler_ctx *phc, struct sink_handler *sh)
{


+ 2
- 0
include/ssrc.h View File

@ -59,6 +59,8 @@ struct ssrc_entry {
struct ssrc_entry_call {
struct ssrc_entry h; // must be first
struct call_media *media; // bundle receive media
struct payload_tracker tracker;
// XXX move entire crypto context in here?


Loading…
Cancel
Save