TT#14008 support SRTCP with generate-RTCP

Change-Id: I279d26745278b12bc818e36589324828d7883a3f
pull/1421/head
Richard Fuchs 4 years ago
parent aea33b77fe
commit 9c0d233a46

@ -1562,17 +1562,19 @@ void rtcp_receiver_reports(GQueue *out, struct ssrc_hash *hash, struct call_mono
void rtcp_send_report(struct call_media *media, struct ssrc_ctx *ssrc_out) {
// figure out where to send it
struct packet_stream *ps = media->streams.head->data;
// crypto context is held separately
struct packet_stream *rtcp_ps = media->streams.head->next ? media->streams.head->next->data : ps;
if (MEDIA_ISSET(media, RTCP_MUX))
;
else if (!media->streams.head->next)
;
else {
struct packet_stream *next_ps = media->streams.head->next->data;
if (PS_ISSET(next_ps, RTCP))
ps = next_ps;
if (PS_ISSET(rtcp_ps, RTCP))
ps = rtcp_ps;
else
rtcp_ps = ps;
}
if (!ps->selected_sfd)
if (!ps->selected_sfd || !rtcp_ps->selected_sfd)
return;
media_update_stats(media);
@ -1595,7 +1597,20 @@ void rtcp_send_report(struct call_media *media, struct ssrc_ctx *ssrc_out) {
atomic64_get(&ssrc_out->octets),
&rrs, &srrs);
socket_sendto(&ps->selected_sfd->socket, sr->str, sr->len, &ps->endpoint);
// handle crypto
str rtcp_packet = STR_CONST_INIT_LEN(sr->str, sr->len);
const struct streamhandler *crypt_handler = determine_handler(&transport_protocols[PROTO_RTP_AVP],
media, true);
if (crypt_handler && crypt_handler->out->rtcp_crypt) {
g_string_set_size(sr, sr->len + RTP_BUFFER_TAIL_ROOM);
rtcp_packet = STR_CONST_INIT_LEN(sr->str, sr->len - RTP_BUFFER_TAIL_ROOM);
crypt_handler->out->rtcp_crypt(&rtcp_packet, ps, NULL, NULL, NULL, ssrc_out);
}
socket_sendto(&ps->selected_sfd->socket, rtcp_packet.s, rtcp_packet.len, &ps->endpoint);
g_string_free(sr, TRUE);
GQueue *sinks = ps->rtp_sinks.length ? &ps->rtp_sinks : &ps->rtcp_sinks;

Loading…
Cancel
Save