mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
session: ignore RTCP packets for the BYE sources
When we are scheduling BYE packets, ignore all RTCP for the sources that are scheduling a BYE packet. Other sources that are not scheduling BYE should continue receiving RTCP packets as usual.
This commit is contained in:
parent
33b398e345
commit
bec9c04ea0
1 changed files with 23 additions and 8 deletions
|
@ -1992,6 +1992,10 @@ rtp_session_process_sr (RTPSession * sess, GstRTCPPacket * packet,
|
|||
if (!source)
|
||||
return;
|
||||
|
||||
/* skip non-bye packets for sources that are marked BYE */
|
||||
if (sess->scheduled_bye && RTP_SOURCE_IS_MARKED_BYE (source))
|
||||
goto out;
|
||||
|
||||
/* don't try to do lip-sync for sources that sent a BYE */
|
||||
if (RTP_SOURCE_IS_MARKED_BYE (source))
|
||||
*do_sync = FALSE;
|
||||
|
@ -2010,6 +2014,8 @@ rtp_session_process_sr (RTPSession * sess, GstRTCPPacket * packet,
|
|||
on_new_ssrc (sess, source);
|
||||
|
||||
rtp_session_process_rb (sess, source, packet, pinfo);
|
||||
|
||||
out:
|
||||
g_object_unref (source);
|
||||
}
|
||||
|
||||
|
@ -2035,10 +2041,16 @@ rtp_session_process_rr (RTPSession * sess, GstRTCPPacket * packet,
|
|||
if (!source)
|
||||
return;
|
||||
|
||||
/* skip non-bye packets for sources that are marked BYE */
|
||||
if (sess->scheduled_bye && RTP_SOURCE_IS_MARKED_BYE (source))
|
||||
goto out;
|
||||
|
||||
if (created)
|
||||
on_new_ssrc (sess, source);
|
||||
|
||||
rtp_session_process_rb (sess, source, packet, pinfo);
|
||||
|
||||
out:
|
||||
g_object_unref (source);
|
||||
}
|
||||
|
||||
|
@ -2072,6 +2084,10 @@ rtp_session_process_sdes (RTPSession * sess, GstRTCPPacket * packet,
|
|||
if (!source)
|
||||
return;
|
||||
|
||||
/* skip non-bye packets for sources that are marked BYE */
|
||||
if (sess->scheduled_bye && RTP_SOURCE_IS_MARKED_BYE (source))
|
||||
goto next;
|
||||
|
||||
sdes = gst_structure_new_empty ("application/x-rtp-source-sdes");
|
||||
|
||||
more_entries = gst_rtcp_packet_sdes_first_entry (packet);
|
||||
|
@ -2123,6 +2139,7 @@ rtp_session_process_sdes (RTPSession * sess, GstRTCPPacket * packet,
|
|||
if (changed)
|
||||
on_ssrc_sdes (sess, source);
|
||||
|
||||
next:
|
||||
g_object_unref (source);
|
||||
|
||||
more_items = gst_rtcp_packet_sdes_next_item (packet);
|
||||
|
@ -2370,6 +2387,12 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet,
|
|||
guint fci_length = 4 * gst_rtcp_packet_fb_get_fci_length (packet);
|
||||
RTPSource *src;
|
||||
|
||||
src = find_source (sess, media_ssrc);
|
||||
|
||||
/* skip non-bye packets for sources that are marked BYE */
|
||||
if (sess->scheduled_bye && src && RTP_SOURCE_IS_MARKED_BYE (src))
|
||||
return;
|
||||
|
||||
GST_DEBUG ("received feedback %d:%d from %08X about %08X with FCI of "
|
||||
"length %d", type, fbtype, sender_ssrc, media_ssrc, fci_length);
|
||||
|
||||
|
@ -2395,7 +2418,6 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet,
|
|||
gst_buffer_unref (fci_buffer);
|
||||
}
|
||||
|
||||
src = find_source (sess, media_ssrc);
|
||||
if (!src)
|
||||
return;
|
||||
|
||||
|
@ -2479,12 +2501,6 @@ rtp_session_process_rtcp (RTPSession * sess, GstBuffer * buffer,
|
|||
|
||||
type = gst_rtcp_packet_get_type (&packet);
|
||||
|
||||
/* when we are leaving the session, we should ignore all non-BYE messages */
|
||||
if (sess->scheduled_bye && type != GST_RTCP_TYPE_BYE) {
|
||||
GST_DEBUG ("ignoring non-BYE RTCP packet because we are leaving");
|
||||
goto next;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case GST_RTCP_TYPE_SR:
|
||||
rtp_session_process_sr (sess, &packet, &pinfo, &do_sync);
|
||||
|
@ -2512,7 +2528,6 @@ rtp_session_process_rtcp (RTPSession * sess, GstBuffer * buffer,
|
|||
GST_WARNING ("got unknown RTCP packet");
|
||||
break;
|
||||
}
|
||||
next:
|
||||
more = gst_rtcp_packet_move_to_next (&packet);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue