Browse Source

MT#63317 set media from RTP ext

Change-Id: Id71e219a57decd409f4e8a7620c9809c9b577ae7
rfuchs/dtls-ice
Richard Fuchs 5 months ago
parent
commit
774834d0c7
3 changed files with 47 additions and 0 deletions
  1. +2
    -0
      daemon/call.c
  2. +22
    -0
      daemon/media_socket.c
  3. +23
    -0
      include/media_socket.h

+ 2
- 0
daemon/call.c View File

@ -2937,6 +2937,8 @@ static void media_init_extmap(struct call_media *media, struct rtp_extension *ex
t_hash_table_insert(media->ext_name_ht, &ext->name, ext);
t_hash_table_insert(media->extmap_ht, GUINT_TO_POINTER(ext->id), ext);
ext->handler = rtp_extension_get_handler(&ext->name);
if (ext->id > 0 && ext->id <= 14)
media->extmap_a[ext->id - 1] = ext;
else


+ 22
- 0
daemon/media_socket.c View File

@ -2668,6 +2668,25 @@ static void media_packet_rtcp_mux(struct packet_handler_ctx *phc, struct sink_ha
}
static void rtp_ext_mid_parse(struct packet_handler_ctx *phc, const struct rtp_extension_data *data) {
__auto_type media = t_hash_table_lookup(phc->mp.media->monologue->media_ids, &data->content);
if (!media)
return; // XXX log error?
media_packet_reset_media(phc, media);
}
static const rtp_ext_handler rtp_ext_mid = {
.parse = rtp_ext_mid_parse,
.id = RTP_EXT_MID,
};
rtp_ext_handler rtp_extension_get_handler(const str *name) {
if (!str_cmp(name, "urn:ietf:params:rtp-hdrext:sdes:mid"))
return rtp_ext_mid;
return (rtp_ext_handler) { .id = RTP_EXT_UNKNOWN };
}
static void media_packet_rtp_extension(struct packet_handler_ctx *phc, unsigned int id, const str *data) {
__auto_type ext = phc->mp.media->extmap_ops->lookup(phc->mp.media, id);
if (!ext)
@ -2679,6 +2698,9 @@ static void media_packet_rtp_extension(struct packet_handler_ctx *phc, unsigned
edata->content = *data;
t_queue_push_tail_link(&phc->mp.extmap, &edata->link);
if (ext->handler.parse)
ext->handler.parse(phc, edata);
}
static void media_packet_rtp_extensions(struct packet_handler_ctx *phc) {


+ 23
- 0
include/media_socket.h View File

@ -305,9 +305,30 @@ struct media_packet {
int ptime; // returned from decoding
};
struct packet_handler_ctx;
struct rtp_extension;
typedef struct {
void (*parse)(struct packet_handler_ctx *, const struct rtp_extension_data *);
ssize_t (*len)(struct call_media *);
ssize_t (*print)(void *dst, struct rtp_extension *, struct call_media *);
enum {
RTP_EXT_MID = 0,
RTP_EXT_NUM,
RTP_EXT_UNKNOWN,
} id;
} rtp_ext_handler;
struct rtp_extension {
unsigned int id;
str name; // urn:ietf:params:rtp- hdrext:... or URI
rtp_ext_handler handler;
bool accepted:1;
};
@ -337,6 +358,8 @@ void extmap_header_long(void *);
size_t extmap_print_long(void *, const struct rtp_extension_data *);
rtp_ext_handler rtp_extension_get_handler(const str *);
extern local_intf_q all_local_interfaces; // read-only during runtime


Loading…
Cancel
Save