From: Sangchul Lee Date: Thu, 30 Jul 2020 01:43:42 +0000 (+0900) Subject: Add callback for "on-new-transceiver" on webrtcbin X-Git-Tag: submit/tizen/20200812.043657~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8d29e47cfde60d9c01ca8e4f626f742f63233cbc;p=platform%2Fcore%2Fapi%2Fmediastreamer.git Add callback for "on-new-transceiver" on webrtcbin [Version] 0.1.105 [Issue Type] Improvement Change-Id: Ib58c047cb420b79cb8eea220210562fc39581bf7 Signed-off-by: Sangchul Lee --- diff --git a/include/media_streamer_gst_webrtc.h b/include/media_streamer_gst_webrtc.h index 79c7c9d..e20e676 100644 --- a/include/media_streamer_gst_webrtc.h +++ b/include/media_streamer_gst_webrtc.h @@ -18,6 +18,10 @@ #define __TIZEN_MEDIA_STREAMER_GST_WEBRTC_H__ #include +#ifndef GST_USE_UNSTABLE_API +#define GST_USE_UNSTABLE_API +#include +#endif #ifdef __cplusplus extern "C" { @@ -36,6 +40,8 @@ void ms_webrtcbin_notify_ice_gathering_state_cb(GstElement *webrtcbin, GParamSpe void ms_webrtcbin_on_ice_candidate_cb(GstElement *webrtcbin, guint mlineindex, gchar *candidate, gpointer user_data); +void ms_webrtcbin_on_new_transceiver_cb(GstElement *webrtcbin, GstWebRTCRTPTransceiver *transceiver, gpointer user_data); + void ms_webrtcbin_on_negotiation_needed_cb(GstElement *webrtcbin, gpointer user_data); void ms_webrtcbin_notify_ice_connection_state_cb(GstElement *webrtcbin, GParamSpec * pspec, gpointer user_data); diff --git a/packaging/capi-media-streamer.spec b/packaging/capi-media-streamer.spec index 93456c4..97bf112 100644 --- a/packaging/capi-media-streamer.spec +++ b/packaging/capi-media-streamer.spec @@ -1,6 +1,6 @@ Name: capi-media-streamer Summary: A Media Streamer API -Version: 0.1.104 +Version: 0.1.105 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/media_streamer_gst_webrtc.c b/src/media_streamer_gst_webrtc.c index 8509d4a..0e34ece 100644 --- a/src/media_streamer_gst_webrtc.c +++ b/src/media_streamer_gst_webrtc.c @@ -14,10 +14,6 @@ * limitations under the License. */ -#ifndef GST_USE_UNSTABLE_API -#define GST_USE_UNSTABLE_API -#include -#endif #include "media_streamer_util.h" #include "media_streamer_priv.h" #include "media_streamer_gst.h" @@ -354,6 +350,15 @@ void ms_webrtcbin_on_ice_candidate_cb(GstElement *webrtcbin, guint mlineindex, g g_free(ice_candidate_msg); } +void ms_webrtcbin_on_new_transceiver_cb(GstElement *webrtcbin, GstWebRTCRTPTransceiver *transceiver, gpointer user_data) +{ + ms_retm_if(webrtcbin == NULL, "webrtcbin is NULL"); + ms_retm_if(transceiver == NULL, "transceiver is NULL"); + + ms_info("new transceiver[%p, mline:%u, mid:%s, direction:%d] user_data[%p]", + transceiver, transceiver->mline, transceiver->mid, transceiver->direction, user_data); +} + void ms_webrtcbin_notify_ice_connection_state_cb(GstElement *webrtcbin, GParamSpec * pspec, gpointer user_data) { GstWebRTCICEConnectionState ice_connection_state; diff --git a/src/media_streamer_node.c b/src/media_streamer_node.c index d39fa70..ca938d9 100644 --- a/src/media_streamer_node.c +++ b/src/media_streamer_node.c @@ -1859,11 +1859,6 @@ int ms_webrtc_node_prepare(media_streamer_s *ms_streamer, media_streamer_node_s return MEDIA_STREAMER_ERROR_INVALID_OPERATION; } - if ((ret = __ms_webrtc_prepare_ghost_sink_pad(node->gst_element, webrtcbin, _WEBRTC_AUDIO_CAPSFILTER))) - return ret; - if ((ret = __ms_webrtc_prepare_ghost_sink_pad(node->gst_element, webrtcbin, _WEBRTC_VIDEO_CAPSFILTER))) - return ret; - if (ms_webrtc_node_is_offerer(node, &is_offerer) != MEDIA_STREAMER_ERROR_NONE) { ms_error("Failed to get peer type"); return MEDIA_STREAMER_ERROR_INVALID_OPERATION; @@ -1873,9 +1868,15 @@ int ms_webrtc_node_prepare(media_streamer_s *ms_streamer, media_streamer_node_s ms_signal_create(&node->sig_list, webrtcbin, "on-negotiation-needed", G_CALLBACK(ms_webrtcbin_on_negotiation_needed_cb), node); ms_signal_create(&node->sig_list, webrtcbin, "on-ice-candidate", G_CALLBACK(ms_webrtcbin_on_ice_candidate_cb), node); + ms_signal_create(&node->sig_list, webrtcbin, "on-new-transceiver", G_CALLBACK(ms_webrtcbin_on_new_transceiver_cb), NULL); ms_signal_create(&node->sig_list, webrtcbin, "notify::ice-gathering-state", G_CALLBACK(ms_webrtcbin_notify_ice_gathering_state_cb), NULL); ms_signal_create(&node->sig_list, webrtcbin, "notify::ice-connection-state", G_CALLBACK(ms_webrtcbin_notify_ice_connection_state_cb), node); + if ((ret = __ms_webrtc_prepare_ghost_sink_pad(node->gst_element, webrtcbin, _WEBRTC_AUDIO_CAPSFILTER))) + return ret; + if ((ret = __ms_webrtc_prepare_ghost_sink_pad(node->gst_element, webrtcbin, _WEBRTC_VIDEO_CAPSFILTER))) + return ret; + if (ms_element_set_state(webrtcbin, GST_STATE_READY)) { ms_error("Failed to set state to READY"); return MEDIA_STREAMER_ERROR_INVALID_OPERATION;