rtpsource: add RTP and RTCP source address

Add the RTP and RTCP sender addresses in the stats structure.
This commit is contained in:
Wim Taymans 2009-05-22 13:47:30 +02:00 committed by Tim-Philipp Müller
parent 62727e8fab
commit 0ae6e3603b

View file

@ -188,12 +188,50 @@ rtp_source_finalize (GObject * object)
G_OBJECT_CLASS (rtp_source_parent_class)->finalize (object);
}
#define MAX_ADDRESS 64
static void
make_address_string (GstNetAddress * addr, gchar * dest, gulong n)
{
switch (gst_netaddress_get_net_type (addr)) {
case GST_NET_TYPE_IP4:
{
guint32 address;
guint16 port;
gst_netaddress_get_ip4_address (addr, &address, &port);
g_snprintf (dest, n, "%d.%d.%d.%d:%d", (address >> 24) & 0xff,
(address >> 16) & 0xff, (address >> 8) & 0xff, address & 0xff, port);
break;
}
case GST_NET_TYPE_IP6:
{
guint8 address[16];
guint16 port;
gst_netaddress_get_ip6_address (addr, address, &port);
g_snprintf (dest, n, "[%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x]:%d",
(address[0] << 8) | address[1], (address[2] << 8) | address[3],
(address[4] << 8) | address[5], (address[6] << 8) | address[7],
(address[8] << 8) | address[9], (address[10] << 8) | address[11],
(address[12] << 8) | address[13], (address[14] << 8) | address[15],
port);
break;
}
default:
dest[0] = 0;
break;
}
}
static GstStructure *
rtp_source_create_stats (RTPSource * src)
{
GstStructure *s;
gboolean is_sender = src->is_sender;
gboolean internal = src->internal;
gchar address_str[MAX_ADDRESS];
/* common data for all types of sources */
s = gst_structure_new ("application/x-rtp-source-stats",
@ -204,6 +242,16 @@ rtp_source_create_stats (RTPSource * src)
"is-csrc", G_TYPE_BOOLEAN, src->is_csrc,
"is-sender", G_TYPE_BOOLEAN, is_sender, NULL);
/* add address and port */
if (src->have_rtp_from) {
make_address_string (&src->rtp_from, address_str, sizeof (address_str));
gst_structure_set (s, "rtp-from", G_TYPE_STRING, address_str, NULL);
}
if (src->have_rtcp_from) {
make_address_string (&src->rtcp_from, address_str, sizeof (address_str));
gst_structure_set (s, "rtcp-from", G_TYPE_STRING, address_str, NULL);
}
if (internal) {
/* our internal source */
if (is_sender) {