mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2025-01-08 04:45:31 +00:00
sip: media-pipeline: Let the OS allocate sockets for udpsrc
First of we get rid of the bindings between from "lport-rtp" and "lport-rtcp" to the "port" property of the udpsrc elements. The properties themselves will get removed a little later as the required changes are rather intrusive and we need some more infrastructure in place before we can do the switch.
This commit is contained in:
parent
f3a6c15e6a
commit
53d6082d64
2 changed files with 40 additions and 19 deletions
|
@ -295,7 +295,7 @@ send_pipeline_setup_codecs (CallsSipMediaPipeline *self,
|
||||||
return send_pipeline_link_elements (self, error);
|
return send_pipeline_link_elements (self, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** TODO: we're describing the desired state (not the current state)
|
/**
|
||||||
* Prepare a skeleton send pipeline where we can later
|
* Prepare a skeleton send pipeline where we can later
|
||||||
* plug the codec specific elements into.
|
* plug the codec specific elements into.
|
||||||
*
|
*
|
||||||
|
@ -363,10 +363,6 @@ send_pipeline_init (CallsSipMediaPipeline *self,
|
||||||
self->rtp_sink, "host",
|
self->rtp_sink, "host",
|
||||||
G_BINDING_BIDIRECTIONAL);
|
G_BINDING_BIDIRECTIONAL);
|
||||||
|
|
||||||
g_object_bind_property (self, "lport-rtcp",
|
|
||||||
self->rtcp_send_src, "port",
|
|
||||||
G_BINDING_BIDIRECTIONAL);
|
|
||||||
|
|
||||||
g_object_bind_property (self, "rport-rtcp",
|
g_object_bind_property (self, "rport-rtcp",
|
||||||
self->rtcp_send_sink, "port",
|
self->rtcp_send_sink, "port",
|
||||||
G_BINDING_BIDIRECTIONAL);
|
G_BINDING_BIDIRECTIONAL);
|
||||||
|
@ -375,6 +371,8 @@ send_pipeline_init (CallsSipMediaPipeline *self,
|
||||||
self->rtcp_send_sink, "host",
|
self->rtcp_send_sink, "host",
|
||||||
G_BINDING_BIDIRECTIONAL);
|
G_BINDING_BIDIRECTIONAL);
|
||||||
|
|
||||||
|
/* TODO bind sockets */
|
||||||
|
|
||||||
gst_bin_add (GST_BIN (self->send_pipeline), self->send_rtpbin);
|
gst_bin_add (GST_BIN (self->send_pipeline), self->send_rtpbin);
|
||||||
gst_bin_add_many (GST_BIN (self->send_pipeline), self->rtp_sink,
|
gst_bin_add_many (GST_BIN (self->send_pipeline), self->rtp_sink,
|
||||||
self->rtcp_send_src, self->rtcp_send_sink, NULL);
|
self->rtcp_send_src, self->rtcp_send_sink, NULL);
|
||||||
|
@ -485,17 +483,16 @@ recv_pipeline_setup_codecs (CallsSipMediaPipeline *self,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** TODO: we're describing the desired state (not the current state)
|
/**
|
||||||
* Prepares a skeleton receiver pipeline which can later be
|
* Prepares a skeleton receiver pipeline which can later be
|
||||||
* used to plug codec specific element in.
|
* used to plug codec specific element in.
|
||||||
* This pipeline just consists of (minimally linked) rtpbin
|
* This pipeline just consists of (minimally linked) rtpbin
|
||||||
* audio sink and two udpsrc elements, one for RTP and one for RTCP.
|
* audio sink and two udpsrc elements, one for RTP and one for RTCP.
|
||||||
*
|
*
|
||||||
* The pipeline will be started and stopped to let the OS allocate
|
* The pipeline will be set ready to let the OS allocate sockets
|
||||||
* sockets for us instead of building and providing GSockets ourselves
|
* for us instead of building and providing GSockets ourselves
|
||||||
* by hand. These GSockets will later be reused for any outgoing
|
* by hand. These GSockets are reused for any outgoing traffic in our
|
||||||
* traffic for of our hole punching scheme as a simple NAT traversal
|
* hole punching scheme as a simple NAT traversal technique.
|
||||||
* technique.
|
|
||||||
*/
|
*/
|
||||||
static gboolean
|
static gboolean
|
||||||
recv_pipeline_init (CallsSipMediaPipeline *self,
|
recv_pipeline_init (CallsSipMediaPipeline *self,
|
||||||
|
@ -550,13 +547,9 @@ recv_pipeline_init (CallsSipMediaPipeline *self,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
|
||||||
g_object_bind_property (self, "lport-rtp",
|
/* port 0 means allocate */
|
||||||
self->rtp_src, "port",
|
g_object_set (self->rtp_src, "port", 0, NULL);
|
||||||
G_BINDING_BIDIRECTIONAL);
|
g_object_set (self->rtcp_recv_src, "port", 0, NULL);
|
||||||
|
|
||||||
g_object_bind_property (self, "lport-rtcp",
|
|
||||||
self->rtcp_recv_src, "port",
|
|
||||||
G_BINDING_BIDIRECTIONAL);
|
|
||||||
|
|
||||||
g_object_bind_property (self, "rport-rtcp",
|
g_object_bind_property (self, "rport-rtcp",
|
||||||
self->rtcp_recv_sink, "port",
|
self->rtcp_recv_sink, "port",
|
||||||
|
@ -570,10 +563,11 @@ recv_pipeline_init (CallsSipMediaPipeline *self,
|
||||||
gst_bin_add_many (GST_BIN (self->recv_pipeline), self->rtp_src,
|
gst_bin_add_many (GST_BIN (self->recv_pipeline), self->rtp_src,
|
||||||
self->rtcp_recv_src, self->rtcp_recv_sink, NULL);
|
self->rtcp_recv_src, self->rtcp_recv_sink, NULL);
|
||||||
|
|
||||||
/* TODO use temporary bus watch for the initial pipeline start/stop */
|
|
||||||
self->bus_recv = gst_pipeline_get_bus (GST_PIPELINE (self->recv_pipeline));
|
self->bus_recv = gst_pipeline_get_bus (GST_PIPELINE (self->recv_pipeline));
|
||||||
self->bus_watch_recv = gst_bus_add_watch (self->bus_recv, on_bus_message, self);
|
self->bus_watch_recv = gst_bus_add_watch (self->bus_recv, on_bus_message, self);
|
||||||
|
|
||||||
|
/* Set pipeline to ready to get ports allocated */
|
||||||
|
gst_element_set_state (self->recv_pipeline, GST_STATE_READY);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -973,4 +967,29 @@ calls_sip_media_pipeline_pause (CallsSipMediaPipeline *self,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
calls_sip_media_pipeline_get_rtp_port (CallsSipMediaPipeline *self)
|
||||||
|
{
|
||||||
|
int port;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CALLS_IS_SIP_MEDIA_PIPELINE (self), 0);
|
||||||
|
|
||||||
|
g_object_get (self->rtp_src, "port", &port, NULL);
|
||||||
|
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
calls_sip_media_pipeline_get_rtcp_port (CallsSipMediaPipeline *self)
|
||||||
|
{
|
||||||
|
int port;
|
||||||
|
|
||||||
|
g_return_val_if_fail (CALLS_IS_SIP_MEDIA_PIPELINE (self), 0);
|
||||||
|
|
||||||
|
g_object_get (self->rtcp_recv_src, "port", &port, NULL);
|
||||||
|
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
#undef MAKE_ELEMENT
|
#undef MAKE_ELEMENT
|
||||||
|
|
|
@ -42,5 +42,7 @@ void calls_sip_media_pipeline_start (CallsSip
|
||||||
void calls_sip_media_pipeline_stop (CallsSipMediaPipeline *self);
|
void calls_sip_media_pipeline_stop (CallsSipMediaPipeline *self);
|
||||||
void calls_sip_media_pipeline_pause (CallsSipMediaPipeline *self,
|
void calls_sip_media_pipeline_pause (CallsSipMediaPipeline *self,
|
||||||
gboolean pause);
|
gboolean pause);
|
||||||
|
int calls_sip_media_pipeline_get_rtp_port (CallsSipMediaPipeline *self);
|
||||||
|
int calls_sip_media_pipeline_get_rtcp_port (CallsSipMediaPipeline *self);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
Loading…
Reference in a new issue