Add callback for "on-new-transceiver" on webrtcbin 92/239792/2
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 30 Jul 2020 01:43:42 +0000 (10:43 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 30 Jul 2020 02:16:44 +0000 (11:16 +0900)
[Version] 0.1.105
[Issue Type] Improvement

Change-Id: Ib58c047cb420b79cb8eea220210562fc39581bf7
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/media_streamer_gst_webrtc.h
packaging/capi-media-streamer.spec
src/media_streamer_gst_webrtc.c
src/media_streamer_node.c

index 79c7c9d..e20e676 100644 (file)
 #define __TIZEN_MEDIA_STREAMER_GST_WEBRTC_H__
 
 #include <gst/gst.h>
+#ifndef GST_USE_UNSTABLE_API
+#define GST_USE_UNSTABLE_API
+#include <gst/webrtc/webrtc.h>
+#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);
index 93456c4..97bf112 100644 (file)
@@ -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
index 8509d4a..0e34ece 100644 (file)
  * limitations under the License.
  */
 
-#ifndef GST_USE_UNSTABLE_API
-#define GST_USE_UNSTABLE_API
-#include <gst/webrtc/webrtc.h>
-#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;
index d39fa70..ca938d9 100644 (file)
@@ -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;