webrtc_transceiver: Get mid from transceiver name 01/304101/1
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 9 Jan 2024 03:57:39 +0000 (12:57 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 10 Jan 2024 05:32:45 +0000 (05:32 +0000)
This mid value will be set later to rtp header extension
for simulcast preparation.

[Version] 0.4.31
[Issue Type] Improvement

Change-Id: Ie85ddca278eb6a179e1753e5618f010a140ef8e2
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_source.c
src/webrtc_transceiver.c

index 1b49dc96e4a76c1f147fe9896e85ea8cbe2c03fe..312990525f82c743371279836ea867419057552e 100644 (file)
@@ -572,6 +572,7 @@ typedef struct _webrtc_gst_slot_s {
        struct {
                GstWebRTCRTPTransceiver *transceiver;
                webrtc_transceiver_direction_e direction;
+               gchar *mid;
                const char *codec;
                GstPad *src_pad;
                gulong src_pad_probe_id;
index 11c130efcc6eb6b70f0239086ff95791b0fbea9a..40a9658b4bb2899dd3e2e1a59c1a67123e9bd0fd 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.4.30
+Version:    0.4.31
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index f6aafa79def71b3936fb51179c491f677f02f7e1..a6d6843bd71fb2b0d468834051cb22b96f02a0e2 100644 (file)
@@ -556,6 +556,7 @@ void _source_slot_destroy_cb(gpointer data)
 
                if (source->av[i].transceiver)
                        gst_object_unref(source->av[i].transceiver);
+               g_free(source->av[i].mid);
        }
 
        if (source->bin) {
index 35f904a194c887e8074670a354f2803840a1ecd2..afaf10c7bccb825912f824b2bf5e915dc0f974da 100644 (file)
@@ -75,6 +75,15 @@ static void __webrtcbin_transceiver_set_fec_percentage(webrtc_s *webrtc, GstWebR
        LOG_INFO("set fec-percentage[%u] to transceiver[%p]", fec_percentage, transceiver);
 }
 
+static gchar *__get_gst_mid_from_transceiver(bool is_audio, const char *transceiver_name)
+{
+       g_auto(GStrv) str_arr = NULL;
+
+       RET_VAL_IF(transceiver_name == NULL, NULL, "transceiver_name is NULL");
+
+       str_arr = g_strsplit(transceiver_name, "webrtctransceiver", 2);
+       return g_strdup_printf("%s%s", is_audio ? "audio" : "video", str_arr[1]);
+}
 
 void _webrtcbin_on_new_transceiver_cb(GstElement *webrtcbin, GstWebRTCRTPTransceiver *transceiver, gpointer user_data)
 {
@@ -124,10 +133,11 @@ void _webrtcbin_on_new_transceiver_cb(GstElement *webrtcbin, GstWebRTCRTPTransce
 
                        source->av[j].transceiver = gst_object_ref(transceiver);
                        g_object_set(G_OBJECT(transceiver), "direction", __convert_transceiver_direction(source->av[j].direction)->gst, NULL);
+                       source->av[j].mid = __get_gst_mid_from_transceiver(j == AV_IDX_AUDIO, GST_OBJECT_NAME(transceiver));
 
-                       LOG_INFO("source->id[%u] transceiver[%p for %s, direction:%s]",
-                               source->id, source->av[j].transceiver, j == AV_IDX_AUDIO ? "AUDIO" : "VIDEO",
-                               __convert_transceiver_direction(source->av[j].direction)->str);
+                       LOG_INFO("source->id[%u] source->av[%s][transceiver:%p, direction:%s, mid:%s]",
+                               source->id, j == AV_IDX_AUDIO ? "AUDIO" : "VIDEO", source->av[j].transceiver,
+                               __convert_transceiver_direction(source->av[j].direction)->str, source->av[j].mid);
                        return;
                }
        }