Browse Source

MT#63317 support extensions in codec_output_rtp

Change-Id: Ibefde005041bc6d715d42d089e6277ee2804917c
pull/2008/head
Richard Fuchs 4 months ago
parent
commit
d3d1a55830
2 changed files with 15 additions and 8 deletions
  1. +11
    -4
      daemon/codec.c
  2. +4
    -4
      t/auto-daemon-tests-rtp-ext.pl

+ 11
- 4
daemon/codec.c View File

@ -2438,7 +2438,7 @@ out_ch:
void codec_output_rtp(struct media_packet *mp, struct codec_scheduler *csch,
struct codec_handler *handler,
char *buf, // bufferpool_alloc'd, room for rtp_header + filled-in payload
char *buf, // bufferpool_alloc'd, room for rtp_header + extensions + filled-in payload
size_t payload_len,
unsigned long payload_ts,
struct rtp_markers marks, int seq, int seq_inc, int payload_type,
@ -2460,11 +2460,17 @@ void codec_output_rtp(struct media_packet *mp, struct codec_scheduler *csch,
rh->timestamp = htonl(ts);
rh->ssrc = htonl(ssrc_out->h.ssrc);
if (mp->extensions.len) {
rh->v_p_x_cc |= 0x10;
char *exts = buf + sizeof(*rh);
memcpy(exts, mp->extensions.s, mp->extensions.len);
}
// add to output queue
struct codec_packet *p = g_new0(__typeof(*p), 1);
p->link.data = p;
p->s.s = buf;
p->s.len = payload_len + sizeof(struct rtp_header);
p->s.len = payload_len + sizeof(struct rtp_header) + mp->extensions.len;
payload_tracker_add(&ssrc_out->tracker, handler->dest_pt.payload_type);
p->free_func = bufferpool_unref;
p->ttq_entry.source = handler;
@ -4535,10 +4541,11 @@ void packet_encoded_packetize(AVPacket *pkt, struct codec_ssrc_handler *ch, stru
// figure out how big of a buffer we need
size_t payload_len = MAX(MAX(pkt->size, ch->bytes_per_packet),
sizeof(struct telephone_event_payload));
size_t pkt_len = sizeof(struct rtp_header) + payload_len + RTP_BUFFER_TAIL_ROOM;
size_t payload_ext_len = payload_len + mp->extensions.len;
size_t pkt_len = sizeof(struct rtp_header) + payload_ext_len + RTP_BUFFER_TAIL_ROOM;
// prepare our buffers
char *buf = bufferpool_alloc(media_bufferpool, pkt_len);
char *payload = buf + sizeof(struct rtp_header);
char *payload = buf + sizeof(struct rtp_header) + mp->extensions.len;
// tell our packetizer how much we want
str inout = STR_LEN(payload, payload_len);
// and request a packet


+ 4
- 4
t/auto-daemon-tests-rtp-ext.pl View File

@ -306,9 +306,9 @@ a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp( 8, 1000, 3000+160*0, 0x1234, "\x10" . ("\x00" x 158) . "\x50", [[1, "foo"]]));
rcv($sock_b, $port_a, rtpm(0, 1000, 3000+160*0, 0x1234, "\x39" . ("\x29" x 158) . "\x74"));
rcv($sock_b, $port_a, rtpm(0, 1000, 3000+160*0, 0x1234, "\x39" . ("\x29" x 158) . "\x74", [[1, "foo"]]));
snd($sock_b, $port_a, rtp( 0, 8000, 7000+160*0, 0x6543, "\x39" . ("\x29" x 158) . "\x74", [[2, "blah"]]));
rcv($sock_a, $port_b, rtpm(8, 8000, 7000+160*0, 0x6543, "\x10" . ("\x00" x 158) . "\x50"));
rcv($sock_a, $port_b, rtpm(8, 8000, 7000+160*0, 0x6543, "\x10" . ("\x00" x 158) . "\x50", [[2, "blah"]]));
@ -370,9 +370,9 @@ a=rtcp:PORT
SDP
snd($sock_a, $port_b, rtp( 8, 1000, 3000+160*0, 0x1234, "\x10" . ("\x00" x 158) . "\x50", [[1, "foo"]]));
rcv($sock_b, $port_a, rtpm(0, 1000, 3000+160*0, 0x1234, "\x39" . ("\x29" x 158) . "\x74"));
rcv($sock_b, $port_a, rtpm(0, 1000, 3000+160*0, 0x1234, "\x39" . ("\x29" x 158) . "\x74", [[1, "foo"]]));
snd($sock_b, $port_a, rtp( 0, 8000, 7000+160*0, 0x6543, "\x39" . ("\x29" x 158) . "\x74", [[2, "blah"]]));
rcv($sock_a, $port_b, rtpm(8, 8000, 7000+160*0, 0x6543, "\x10" . ("\x00" x 158) . "\x50"));
rcv($sock_a, $port_b, rtpm(8, 8000, 7000+160*0, 0x6543, "\x10" . ("\x00" x 158) . "\x50", [[2, "blah"]]));


Loading…
Cancel
Save