[asterisk-commits] oej: branch oej/chocolate-video-congestion-11 r433391 - /team/oej/chocolate-v...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Wed Mar 25 09:48:27 CDT 2015
Author: oej
Date: Wed Mar 25 09:48:25 2015
New Revision: 433391
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=433391
Log:
Adding some code template for sending RTCP FB message. Not done.
Modified:
team/oej/chocolate-video-congestion-11/res/res_rtp_asterisk.c
Modified: team/oej/chocolate-video-congestion-11/res/res_rtp_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/chocolate-video-congestion-11/res/res_rtp_asterisk.c?view=diff&rev=433391&r1=433390&r2=433391
==============================================================================
--- team/oej/chocolate-video-congestion-11/res/res_rtp_asterisk.c (original)
+++ team/oej/chocolate-video-congestion-11/res/res_rtp_asterisk.c Wed Mar 25 09:48:25 2015
@@ -2861,6 +2861,81 @@
frac = (usec << 12) + (usec << 8) - ((usec * 3650) >> 6);
*msw = sec;
*lsw = frac;
+}
+
+
+/*! \brief Send RTCP Feedback message (RTP payload specific feedback / AVPF profile)
+ *
+ */
+static int ast_rtcp_write_fb(struct ast_rtp_instance *instance, int type)
+{
+ struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
+ int res;
+ int len = 0;
+ unsigned int now_lsw;
+ unsigned int now_msw;
+ unsigned int *rtcpheader;
+ char bdata[512];
+ int rate = rtp_get_rate(&rtp->f.subclass.format);
+ int ice;
+ char brexp;
+ int brmantissa;
+ struct ast_sockaddr remote_address = { {0,} };
+
+ if (!rtp || !rtp->rtcp)
+ return 0;
+
+ if (ast_sockaddr_isnull(&rtp->rtcp->them)) { /* This'll stop rtcp for this rtp session */
+ /*
+ * RTCP was stopped.
+ */
+ return 0;
+ }
+/*
+ 0 1 2 3
+ 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ 1 |V=2|P| FMT | PT | length |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ 2| SSRC of packet sender |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ 3| SSRC of media source |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ 4| Unique identifier 'R' 'E' 'M' 'B' |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ 5| Num SSRC | BR Exp | BR Mantissa |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ 6| SSRC feedback |
+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ | ... |
+
+ REMB is hex 52 45 4d 42
+*/
+
+ rtcpheader = (unsigned int *)bdata;
+ rtcpheader[1] = htonl(rtp->ssrc); /* Our SSRC */
+ rtcpheader[2] = htonl(rtp->themssrc);
+ rtcpheader[3] = htonl(0x52 << 24 | 0x45 << 16 | 0x4d << 8 | 0x42); /* R E M B */
+ rtcpheader[4] = htonl(1 << 24 ); /* BR exp and mantissa goes here as well */
+ len += 40;
+ /* Add the header and paylod data - including the length */
+ rtcpheader[0] = htonl((2 << 30) | (1 << 24) | (RTCP_PT_PSFB << 16) | ((len/4)-1));
+ /* Generic RTCP header done. Now add FCI */
+
+ ast_sockaddr_copy(&remote_address, &rtp->rtcp->them);
+
+ res = rtcp_sendto(instance, (unsigned int *)rtcpheader, len, 0, &remote_address, &ice);
+ if (res < 0) {
+ ast_log(LOG_ERROR, "RTCP FB transmission error to %s: %s\n",
+ ast_sockaddr_stringify(&rtp->rtcp->them),
+ strerror(errno));
+ return 0;
+ }
+ if (rtcp_debug_test_addr(&rtp->rtcp->them)) {
+ ast_verbose("* Sent RTCP FB REMB to %s%s\n", ast_sockaddr_stringify(&remote_address), ice ? " (via ICE)" : "");
+ ast_verbose(" Our SSRC: %u\n", rtp->ssrc);
+ }
+ return res;
}
/*! \brief Send RTCP recipient's report */
@@ -4081,6 +4156,8 @@
ast_sockaddr_stringify(&rtp->rtcp->them), fmt, length);
}
+ /* At this point we do nothing with this information. */
+ /* We should propably propagate it over the bridge */
break;
case RTCP_PT_PSFB: /* Payload specific data */
More information about the asterisk-commits
mailing list