mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-02 14:36:41 +00:00
webrtc/dc: move some code from webrtcbin into the datachannel
This commit is contained in:
parent
a51db86ac4
commit
be011d2086
2 changed files with 55 additions and 52 deletions
|
@ -1639,29 +1639,6 @@ _on_data_channel_ready_state (GstWebRTCDataChannel * channel,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
_link_data_channel_to_sctp (GstWebRTCBin * webrtc,
|
|
||||||
GstWebRTCDataChannel * channel)
|
|
||||||
{
|
|
||||||
if (webrtc->priv->sctp_transport && !channel->sctp_transport) {
|
|
||||||
gint id;
|
|
||||||
|
|
||||||
g_object_get (channel, "id", &id, NULL);
|
|
||||||
|
|
||||||
if (webrtc->priv->sctp_transport->association_established && id != -1) {
|
|
||||||
gchar *pad_name;
|
|
||||||
|
|
||||||
gst_webrtc_data_channel_set_sctp_transport (channel,
|
|
||||||
webrtc->priv->sctp_transport);
|
|
||||||
pad_name = g_strdup_printf ("sink_%u", id);
|
|
||||||
if (!gst_element_link_pads (channel->appsrc, "src",
|
|
||||||
channel->sctp_transport->sctpenc, pad_name))
|
|
||||||
g_warn_if_reached ();
|
|
||||||
g_free (pad_name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_on_sctpdec_pad_added (GstElement * sctpdec, GstPad * pad,
|
_on_sctpdec_pad_added (GstElement * sctpdec, GstPad * pad,
|
||||||
GstWebRTCBin * webrtc)
|
GstWebRTCBin * webrtc)
|
||||||
|
@ -1686,7 +1663,8 @@ _on_sctpdec_pad_added (GstElement * sctpdec, GstPad * pad,
|
||||||
gst_element_sync_state_with_parent (channel->appsrc);
|
gst_element_sync_state_with_parent (channel->appsrc);
|
||||||
gst_element_sync_state_with_parent (channel->appsink);
|
gst_element_sync_state_with_parent (channel->appsink);
|
||||||
|
|
||||||
_link_data_channel_to_sctp (webrtc, channel);
|
gst_webrtc_data_channel_link_to_sctp (channel,
|
||||||
|
webrtc->priv->sctp_transport);
|
||||||
|
|
||||||
g_array_append_val (webrtc->priv->pending_data_channels, channel);
|
g_array_append_val (webrtc->priv->pending_data_channels, channel);
|
||||||
}
|
}
|
||||||
|
@ -1723,7 +1701,8 @@ _on_sctp_state_notify (GstWebRTCSCTPTransport * sctp, GParamSpec * pspec,
|
||||||
g_array_index (webrtc->priv->data_channels, GstWebRTCDataChannel *,
|
g_array_index (webrtc->priv->data_channels, GstWebRTCDataChannel *,
|
||||||
i);
|
i);
|
||||||
|
|
||||||
_link_data_channel_to_sctp (webrtc, channel);
|
gst_webrtc_data_channel_link_to_sctp (channel,
|
||||||
|
webrtc->priv->sctp_transport);
|
||||||
|
|
||||||
if (!channel->negotiated && !channel->opened)
|
if (!channel->negotiated && !channel->opened)
|
||||||
gst_webrtc_data_channel_start_negotiation (channel);
|
gst_webrtc_data_channel_start_negotiation (channel);
|
||||||
|
@ -1783,7 +1762,8 @@ _get_or_create_data_channel_transports (GstWebRTCBin * webrtc, guint session_id)
|
||||||
g_array_index (webrtc->priv->data_channels, GstWebRTCDataChannel *,
|
g_array_index (webrtc->priv->data_channels, GstWebRTCDataChannel *,
|
||||||
i);
|
i);
|
||||||
|
|
||||||
_link_data_channel_to_sctp (webrtc, channel);
|
gst_webrtc_data_channel_link_to_sctp (channel,
|
||||||
|
webrtc->priv->sctp_transport);
|
||||||
}
|
}
|
||||||
|
|
||||||
gst_element_sync_state_with_parent (GST_ELEMENT (stream->send_bin));
|
gst_element_sync_state_with_parent (GST_ELEMENT (stream->send_bin));
|
||||||
|
@ -3741,7 +3721,8 @@ _update_data_channel_from_sdp_media (GstWebRTCBin * webrtc,
|
||||||
|
|
||||||
if (webrtc->priv->sctp_transport->association_established
|
if (webrtc->priv->sctp_transport->association_established
|
||||||
&& !channel->negotiated && !channel->opened) {
|
&& !channel->negotiated && !channel->opened) {
|
||||||
_link_data_channel_to_sctp (webrtc, channel);
|
gst_webrtc_data_channel_link_to_sctp (channel,
|
||||||
|
webrtc->priv->sctp_transport);
|
||||||
gst_webrtc_data_channel_start_negotiation (channel);
|
gst_webrtc_data_channel_start_negotiation (channel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4607,7 +4588,7 @@ gst_webrtc_bin_create_data_channel (GstWebRTCBin * webrtc, const gchar * label,
|
||||||
ret = gst_object_ref (ret);
|
ret = gst_object_ref (ret);
|
||||||
ret->webrtcbin = webrtc;
|
ret->webrtcbin = webrtc;
|
||||||
g_array_append_val (webrtc->priv->data_channels, ret);
|
g_array_append_val (webrtc->priv->data_channels, ret);
|
||||||
_link_data_channel_to_sctp (webrtc, ret);
|
gst_webrtc_data_channel_link_to_sctp (ret, webrtc->priv->sctp_transport);
|
||||||
if (webrtc->priv->sctp_transport &&
|
if (webrtc->priv->sctp_transport &&
|
||||||
webrtc->priv->sctp_transport->association_established
|
webrtc->priv->sctp_transport->association_established
|
||||||
&& !ret->negotiated) {
|
&& !ret->negotiated) {
|
||||||
|
|
|
@ -916,30 +916,6 @@ _on_sctp_notify_state (GObject * sctp_transport, GParamSpec * pspec,
|
||||||
GST_OBJECT_UNLOCK (channel);
|
GST_OBJECT_UNLOCK (channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gst_webrtc_data_channel_set_sctp_transport (GstWebRTCDataChannel * channel,
|
|
||||||
GstWebRTCSCTPTransport * sctp)
|
|
||||||
{
|
|
||||||
g_return_if_fail (GST_IS_WEBRTC_DATA_CHANNEL (channel));
|
|
||||||
g_return_if_fail (GST_IS_WEBRTC_SCTP_TRANSPORT (sctp));
|
|
||||||
|
|
||||||
GST_OBJECT_LOCK (channel);
|
|
||||||
if (channel->sctp_transport)
|
|
||||||
g_signal_handlers_disconnect_by_data (channel->sctp_transport, channel);
|
|
||||||
|
|
||||||
gst_object_replace ((GstObject **) & channel->sctp_transport,
|
|
||||||
GST_OBJECT (sctp));
|
|
||||||
|
|
||||||
if (sctp) {
|
|
||||||
g_signal_connect (sctp, "stream-reset", G_CALLBACK (_on_sctp_reset_stream),
|
|
||||||
channel);
|
|
||||||
g_signal_connect (sctp, "notify::state", G_CALLBACK (_on_sctp_notify_state),
|
|
||||||
channel);
|
|
||||||
_on_sctp_notify_state_unlocked (G_OBJECT (sctp), channel);
|
|
||||||
}
|
|
||||||
GST_OBJECT_UNLOCK (channel);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_webrtc_data_channel_set_property (GObject * object, guint prop_id,
|
gst_webrtc_data_channel_set_property (GObject * object, guint prop_id,
|
||||||
const GValue * value, GParamSpec * pspec)
|
const GValue * value, GParamSpec * pspec)
|
||||||
|
@ -1321,3 +1297,49 @@ static void
|
||||||
gst_webrtc_data_channel_init (GstWebRTCDataChannel * channel)
|
gst_webrtc_data_channel_init (GstWebRTCDataChannel * channel)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_data_channel_set_sctp_transport (GstWebRTCDataChannel * channel,
|
||||||
|
GstWebRTCSCTPTransport * sctp)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GST_IS_WEBRTC_DATA_CHANNEL (channel));
|
||||||
|
g_return_if_fail (GST_IS_WEBRTC_SCTP_TRANSPORT (sctp));
|
||||||
|
|
||||||
|
GST_OBJECT_LOCK (channel);
|
||||||
|
if (channel->sctp_transport)
|
||||||
|
g_signal_handlers_disconnect_by_data (channel->sctp_transport, channel);
|
||||||
|
|
||||||
|
gst_object_replace ((GstObject **) & channel->sctp_transport,
|
||||||
|
GST_OBJECT (sctp));
|
||||||
|
|
||||||
|
if (sctp) {
|
||||||
|
g_signal_connect (sctp, "stream-reset", G_CALLBACK (_on_sctp_reset_stream),
|
||||||
|
channel);
|
||||||
|
g_signal_connect (sctp, "notify::state", G_CALLBACK (_on_sctp_notify_state),
|
||||||
|
channel);
|
||||||
|
_on_sctp_notify_state_unlocked (G_OBJECT (sctp), channel);
|
||||||
|
}
|
||||||
|
GST_OBJECT_UNLOCK (channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_webrtc_data_channel_link_to_sctp (GstWebRTCDataChannel * channel,
|
||||||
|
GstWebRTCSCTPTransport * sctp_transport)
|
||||||
|
{
|
||||||
|
if (sctp_transport && !channel->sctp_transport) {
|
||||||
|
gint id;
|
||||||
|
|
||||||
|
g_object_get (channel, "id", &id, NULL);
|
||||||
|
|
||||||
|
if (sctp_transport->association_established && id != -1) {
|
||||||
|
gchar *pad_name;
|
||||||
|
|
||||||
|
_data_channel_set_sctp_transport (channel, sctp_transport);
|
||||||
|
pad_name = g_strdup_printf ("sink_%u", id);
|
||||||
|
if (!gst_element_link_pads (channel->appsrc, "src",
|
||||||
|
channel->sctp_transport->sctpenc, pad_name))
|
||||||
|
g_warn_if_reached ();
|
||||||
|
g_free (pad_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue