summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorYouness Alaoui <kakaroto@kakaroto.homelinux.net>2014-07-31 17:03:02 -0400
committerNicolas Dufresne <nicolas.dufresne@collabora.co.uk>2014-09-18 13:38:01 -0400
commitb344a73c10cb1a57bbacf55292c0a376f7e43c97 (patch)
treefea894c0d7d601fa2a396f0decbf841c1de00a8b /gst
parentc8a6bf9f4b72dd3264cc6a80290ee8ef71c7b695 (diff)
downloadfarstream-b344a73c10cb1a57bbacf55292c0a376f7e43c97.tar.gz
rtpsession: Fix discovery of RTCP ssrc.
SRTCP packets will have SDES encrypted, so we need to check for RR and SR reports. Also, the code was checking if rtcp_map failed, instead of succeeded. This also allows us to mix rtp and rtcp on the same component.
Diffstat (limited to 'gst')
-rw-r--r--gst/fsrtpconference/fs-rtp-session.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/gst/fsrtpconference/fs-rtp-session.c b/gst/fsrtpconference/fs-rtp-session.c
index f45c93ee..d766ff8d 100644
--- a/gst/fsrtpconference/fs-rtp-session.c
+++ b/gst/fsrtpconference/fs-rtp-session.c
@@ -1868,24 +1868,20 @@ _stream_known_source_packet_received (FsRtpStream *stream, guint component,
guint32 ssrc;
FsRtpSession *self = FS_RTP_SESSION_CAST (user_data);
gboolean valid = FALSE;
+ GstRTPBuffer rtpbuffer = GST_RTP_BUFFER_INIT;
if (fs_rtp_session_has_disposed_enter (self, NULL))
return;
-
- if (component == 1)
+ if (gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtpbuffer))
{
- GstRTPBuffer rtpbuffer = GST_RTP_BUFFER_INIT;
- if (gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtpbuffer))
- {
- ssrc = gst_rtp_buffer_get_ssrc (&rtpbuffer);
- gst_rtp_buffer_unmap (&rtpbuffer);
+ ssrc = gst_rtp_buffer_get_ssrc (&rtpbuffer);
+ gst_rtp_buffer_unmap (&rtpbuffer);
- valid = TRUE;
- }
+ valid = TRUE;
}
- else if (component == 2)
+ else
{
GstRTCPPacket rtcppacket;
GstRTCPBuffer rtcpbuffer = GST_RTCP_BUFFER_INIT;
@@ -1894,14 +1890,29 @@ _stream_known_source_packet_received (FsRtpStream *stream, guint component,
{
if (gst_rtcp_buffer_get_first_packet (&rtcpbuffer, &rtcppacket))
{
+ GstRTCPType type;
+
do {
- if (gst_rtcp_packet_get_type (&rtcppacket) == GST_RTCP_TYPE_SDES)
- {
- ssrc = gst_rtcp_packet_sdes_get_ssrc (&rtcppacket);
- valid = TRUE;
- break;
+ type = gst_rtcp_packet_get_type (&rtcppacket);
+ switch (type) {
+ case GST_RTCP_TYPE_RR:
+ ssrc = gst_rtcp_packet_rr_get_ssrc (&rtcppacket);
+ valid = TRUE;
+ break;
+ case GST_RTCP_TYPE_SR:
+ gst_rtcp_packet_sr_get_sender_info (&rtcppacket, &ssrc, NULL,
+ NULL, NULL, NULL);
+ valid = TRUE;
+ break;
+ case GST_RTCP_TYPE_SDES:
+ ssrc = gst_rtcp_packet_sdes_get_ssrc (&rtcppacket);
+ valid = TRUE;
+ break;
+ default:
+ break;
}
- } while (gst_rtcp_packet_move_to_next (&rtcppacket));
+ } while (valid == FALSE && type != GST_RTCP_TYPE_INVALID &&
+ gst_rtcp_packet_move_to_next (&rtcppacket));
}
gst_rtcp_buffer_unmap (&rtcpbuffer);
}