Added decodebin usage. Corrected autoplug mode. 68/47468/1
authorVyacheslav Valkovoy <v.valkovoy@samsung.com>
Thu, 3 Sep 2015 13:39:18 +0000 (16:39 +0300)
committerVyacheslav Valkovoy <v.valkovoy@samsung.com>
Thu, 3 Sep 2015 13:39:18 +0000 (16:39 +0300)
Change-Id: I6641034e514ed97faf1ee786d41855d0fa43969c

include/media_streamer_gst.h
include/media_streamer_util.h
packaging/capi-media-streamer.spec
src/media_streamer_gst.c
src/media_streamer_node.c
src/media_streamer_util.c
test/media_streamer_test.c

index 5a1297c..5fbeef5 100755 (executable)
 #define MEDIA_STREAMER_AUDIO_SINK_BIN_NAME "streamer_audio_sink"
 #define MEDIA_STREAMER_TOPOLOGY_BIN_NAME "streamer_topology"
 
+#define MEDIA_STREAMER_DEPAYLOADER_KLASS "Depayloader/Network/RTP"
+#define MEDIA_STREAMER_DECODEBIN_KLASS "Generic/Bin"
+#define MEDIA_STREAMER_PARSER_KLASS "Parser/Converter"
+#define MEDIA_STREAMER_DECODER_KLASS "Codec/Decoder"
+#define MEDIA_STREAMER_SINK_KLASS "Sink"
+
 /**
  * @brief Generates dot files for GStreamer pipeline.
  *
@@ -104,6 +110,13 @@ gboolean __ms_element_set_property(GstElement *src_element,
 gboolean __ms_element_unlink(GstElement *src_element);
 
 /**
+ * @brief Callback function to link decodebin with the sink element.
+ *
+ * @since_tizen 3.0
+ */
+void __decodebin_newpad_cb(GstElement *decodebin, GstPad *pad, gpointer user_data);
+
+/**
  * @brief Creates pipeline, bus and src/sink/topology bins.
  *
  * @since_tizen 3.0
index 84abd2d..066c409 100755 (executable)
@@ -94,6 +94,7 @@ extern "C" {
 typedef struct __media_streamer_ini {
        /* general */
        gboolean generate_dot;
+       gboolean use_decodebin;
 
 } media_streamer_ini_t;
 
@@ -106,6 +107,7 @@ typedef struct __media_streamer_ini {
 /* setting default values if each value is not specified in .ini file */
 /* general */
 #define DEFAULT_GENERATE_DOT                FALSE
+#define DEFAULT_USE_DECODEBIN                          FALSE
 #define DEFAULT_AUDIO_SOURCE                "alsasrc"
 #define DEFAULT_CAMERA_SOURCE               "v4l2src"
 #define DEFAULT_VIDEO_SOURCE                "ximagesrc"
@@ -148,6 +150,7 @@ typedef struct __media_streamer_ini {
 [general] \n\
 ; generating dot file representing pipeline state \n\
 generate dot = no \n\
+use decodebin = yes \n\
 dot dir = /tmp \n\
 \n\
 \n\
index 74010b8..020d2a0 100755 (executable)
@@ -1,12 +1,12 @@
 Name:       capi-media-streamer
 Summary:    A Media Streamer library in Tizen Native API
-Version:    0.1.1
+Version:    0.1.2
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
 URL:        http://source.tizen.org
 Source0:    %{name}-%{version}.tar.gz
-Source1001:    capi-media-streamer.manifest
+Source1001:     capi-media-streamer.manifest
 BuildRequires:  cmake
 BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(glib-2.0)
index aa2fb9c..ed5993f 100755 (executable)
@@ -375,67 +375,306 @@ static GstElement *__ms_bin_find_element_by_klass(GstElement *sink_bin, const gc
        return found ? found_element : NULL;
 }
 
-static gboolean __ms_sink_bin_prepare(GstElement *sink_bin, GstPad *source_pad)
+gboolean __ms_feature_filter(GstPluginFeature *feature, gpointer data)
 {
-       gboolean ret = FALSE;
-       GstPad *src_pad = NULL; //pad of unlinked inner element
+       if (!GST_IS_ELEMENT_FACTORY(feature))
+               return FALSE;
+
+       return TRUE;
+}
+
+static GstElement *__ms_create_element_by_registry(GstPad *src_pad, const gchar *klass_name)
+{
+       GList *factories;
+       const GList *pads;
+       GstElement *next_element = NULL;
+       GstCaps *new_pad_caps = NULL;
+
+       new_pad_caps = gst_pad_query_caps(src_pad, NULL);
+
+       factories = gst_registry_feature_filter(gst_registry_get(),
+                                               (GstPluginFeatureFilter)__ms_feature_filter, FALSE, NULL);
+
+       for(; factories != NULL ; factories = factories->next) {
+               GstElementFactory *factory = GST_ELEMENT_FACTORY(factories->data);
+
+               if (g_strrstr(gst_element_factory_get_klass(GST_ELEMENT_FACTORY(factory)), klass_name))
+               {
+                       for(pads = gst_element_factory_get_static_pad_templates(factory); pads != NULL; pads = pads->next) {
+
+                               GstCaps *intersect_caps = NULL;
+                               GstCaps *static_caps = NULL;
+                               GstStaticPadTemplate *pad_temp = pads->data;
+
+                               if (pad_temp->presence != GST_PAD_ALWAYS || pad_temp->direction != GST_PAD_SINK) {
+                                       continue;
+                               }
+
+                               if (GST_IS_CAPS(&pad_temp->static_caps.caps)) {
+                                       static_caps = gst_caps_ref(&pad_temp->static_caps.caps);
+                               } else {
+                                       static_caps = gst_caps_from_string(pad_temp->static_caps.string);
+                               }
+
+                               intersect_caps = gst_caps_intersect_full(new_pad_caps, static_caps, GST_CAPS_INTERSECT_FIRST);
+
+                               if (!gst_caps_is_empty(intersect_caps)) {
+                                       if (!next_element) {
+                                               next_element = __ms_element_create(GST_OBJECT_NAME(factory), NULL);
+                                       }
+                               }
+                               gst_caps_unref(intersect_caps);
+                               gst_caps_unref(static_caps);
+                       }
+               }
+       }
+
+       return next_element;
+}
+
+static GstElement *__ms_link_with_new_element (GstElement *previous_element, GstElement *new_element)
+{
+       gboolean ret = gst_element_link_pads_filtered(previous_element, NULL, new_element, NULL, NULL);
+
+       if (!ret) {
+               ms_error("Failed to link [%s] and [%s] \n", GST_ELEMENT_NAME(previous_element),
+                                GST_ELEMENT_NAME(new_element));
+               new_element = NULL;
+       } else {
+               ms_info("Succeeded to link [%s] -> [%s]\n", GST_ELEMENT_NAME(previous_element),
+                                GST_ELEMENT_NAME(new_element));
+       }
+
+       return new_element;
+}
+
+void __decodebin_newpad_cb(GstElement *decodebin, GstPad *new_pad, gpointer user_data)
+{
+       GstElement *previous_element = NULL;
+       GstElement *found_element = NULL;
+       GstElement *parent = NULL;
+
+       GstCaps *new_pad_caps = NULL;
+       GstStructure *new_pad_struct = NULL;
+       const gchar *new_pad_type = NULL;
+
+       ms_info("Received new pad '%s' from [%s]", GST_PAD_NAME(new_pad), GST_ELEMENT_NAME(decodebin));
+       parent = (GstElement *)gst_element_get_parent(GST_OBJECT_CAST(decodebin));
+
+       /* Check the new pad's type */
+       new_pad_caps = gst_pad_query_caps(new_pad,0);
+       new_pad_struct = gst_caps_get_structure(new_pad_caps, 0);
+       new_pad_type = gst_structure_get_name(new_pad_struct);
+
+       if (g_str_has_prefix(new_pad_type, "video")) {
+               found_element = __ms_element_create("videoconvert", NULL);
+       } else if (g_str_has_prefix(new_pad_type, "audio")) {
+               found_element = __ms_element_create("audioconvert", NULL);
+       } else {
+               ms_error("Could not create converting element according to media pad type");
+       }
+
+       if (!gst_bin_add(GST_BIN(parent), found_element)) {
+               ms_error("Failed to add element [%s] into bin [%s]", GST_ELEMENT_NAME(found_element),
+                               GST_ELEMENT_NAME(parent));
+       }
+       gst_element_sync_state_with_parent(found_element);
+
+       previous_element = __ms_link_with_new_element(decodebin, found_element);
+       if (!previous_element) {
+               gst_bin_remove(GST_BIN(parent), found_element);
+       }
 
-       gchar *source_pad_name = gst_pad_get_name(source_pad);
 
-       GstElement *found_element = __ms_bin_find_element_by_klass(sink_bin, "Depayloader/Network/RTP");
+       /* Getting Sink */
+       found_element = __ms_bin_find_element_by_klass(parent, MEDIA_STREAMER_SINK_KLASS);
        if (!found_element) {
-               if (MS_ELEMENT_IS_AUDIO(source_pad_name)) {
-                       found_element = __ms_element_create(DEFAULT_AUDIO_RTPDEPAY, NULL);
-               } else {
-                       found_element = __ms_element_create(DEFAULT_VIDEO_RTPDEPAY, NULL);
+               ms_error("There are no any SINK elements created by user");
+       }
+       gst_element_sync_state_with_parent(found_element);
+
+       previous_element = __ms_link_with_new_element(previous_element, found_element);
+       if (!previous_element) {
+               gst_bin_remove(GST_BIN(parent), found_element);
+       }
+
+       __ms_element_set_state(parent, GST_STATE_PLAYING);
+}
+
+static gboolean __ms_sink_bin_prepare(media_streamer_node_s *ms_node, GstElement *sink_bin, GstPad *source_pad)
+{
+       GstPad *src_pad = NULL;
+       gboolean decodebin_usage = FALSE;
+       GstElement *found_element = NULL;
+       GstElement *previous_element = NULL;
+
+       GstCaps *new_pad_caps = NULL;
+       GstStructure *new_pad_struct = NULL;
+       const gchar *new_pad_type = NULL;
+
+
+       /* Getting Depayloader */
+       found_element = __ms_bin_find_element_by_klass(sink_bin, MEDIA_STREAMER_DEPAYLOADER_KLASS);
+
+       if (!found_element) {
+               found_element = __ms_create_element_by_registry(source_pad, MEDIA_STREAMER_DEPAYLOADER_KLASS);
+               if (!gst_bin_add(GST_BIN(sink_bin), found_element)) {
+                       ms_error("Failed to add element [%s] into bin [%s]", GST_ELEMENT_NAME(found_element),
+                     GST_ELEMENT_NAME(sink_bin));
                }
-               gst_bin_add(GST_BIN(sink_bin), found_element);
        }
-       __ms_add_ghostpad(found_element, "sink", sink_bin, "sink");
+       previous_element = found_element;
        src_pad = gst_element_get_static_pad(found_element, "src");
 
-       if (MS_ELEMENT_IS_AUDIO(source_pad_name)) {
-               found_element = __ms_bin_find_element_by_klass(sink_bin, "Converter/Audio");
+       __ms_add_ghostpad(found_element, "sink", sink_bin, "sink");
+
+
+       /* Getting Decodebin */
+       decodebin_usage = ms_node->parent_streamer->ini.use_decodebin;
+
+       found_element = __ms_bin_find_element_by_klass(sink_bin, MEDIA_STREAMER_DECODEBIN_KLASS);
+
+       if (!found_element) {
+               if (decodebin_usage) {
+                       found_element = __ms_create_element_by_registry(src_pad, MEDIA_STREAMER_DECODEBIN_KLASS);
+                       if (!found_element) {
+                               ms_error("Could not create element of MEDIA_STREAMER_DECODER_KLASS");
+                       }
+                       if (!gst_bin_add(GST_BIN(sink_bin), found_element)) {
+                               ms_error("Failed to add element [%s] into bin [%s]", GST_ELEMENT_NAME(found_element),
+                                                GST_ELEMENT_NAME(sink_bin));
+                       }
+                       if (ms_node->parent_streamer->ini.use_decodebin) {
+                               g_signal_connect(found_element, "pad-added", G_CALLBACK(__decodebin_newpad_cb), (gpointer)ms_node);
+                       }
+
+                       previous_element = __ms_link_with_new_element(previous_element, found_element);
+                       if (!previous_element) {
+                               gst_bin_remove(sink_bin, found_element);
+                               return FALSE;
+                       }
+               } else {
+
+                       src_pad = gst_element_get_static_pad(previous_element, "src");
+                       new_pad_caps = gst_pad_query_caps(src_pad, 0);
+                       new_pad_struct = gst_caps_get_structure(new_pad_caps, 0);
+                       new_pad_type = gst_structure_get_name(new_pad_struct);
+
+                       if (g_str_has_prefix(new_pad_type, "video")) {
+
+                               /* Getting Parser */
+                               found_element = __ms_bin_find_element_by_klass(sink_bin, MEDIA_STREAMER_PARSER_KLASS);
+                               if (!found_element) {
+                                       found_element = __ms_create_element_by_registry(src_pad, MEDIA_STREAMER_PARSER_KLASS);
+                                       if (!found_element) {
+                                               ms_error("Could not create element of MEDIA_STREAMER_PARSER_KLASS");
+                                       }
+                                       if (!gst_bin_add(GST_BIN(sink_bin), found_element)) {
+                                               ms_error("Failed to add element [%s] into bin [%s]", GST_ELEMENT_NAME(found_element),
+                                                                GST_ELEMENT_NAME(sink_bin));
+                                       }
+                               }
+                               previous_element = __ms_link_with_new_element(previous_element, found_element);
+                               if (!previous_element) {
+                                       gst_bin_remove(GST_BIN(sink_bin), found_element);
+                                       return FALSE;
+                               }
+                               src_pad = gst_element_get_static_pad(found_element, "src");
+
+
+                               /* Getting Decoder */
+                               found_element = __ms_bin_find_element_by_klass(sink_bin, MEDIA_STREAMER_DECODER_KLASS);
+                               if (!found_element) {
+                                       found_element = __ms_create_element_by_registry(src_pad, MEDIA_STREAMER_DECODER_KLASS);
+                                       if (!found_element) {
+                                               ms_error("Could not create element of MEDIA_STREAMER_DECODER_KLASS");
+                                       }
+                                       if (!gst_bin_add(GST_BIN(sink_bin), found_element)) {
+                                               ms_error("Failed to add element [%s] into bin [%s]", GST_ELEMENT_NAME(found_element),
+                                                                GST_ELEMENT_NAME(sink_bin));
+                                       }
+                               }
+                               previous_element = __ms_link_with_new_element(previous_element, found_element);
+                               if (!previous_element) {
+                                       gst_bin_remove(GST_BIN(sink_bin), found_element);
+                                       return FALSE;
+                               }
+                               src_pad = gst_element_get_static_pad(found_element, "src");
+
+
+                               /* Getting Convertor */
+                               found_element = __ms_element_create("videoconvert", NULL);
+
+                       } else if (g_str_has_prefix(new_pad_type, "audio")) {
+                               found_element = __ms_element_create("audioconvert", NULL);
+                       } else {
+                               ms_error("Could not create converting element according to media pad type");
+                       }
+
+                       if (!found_element) {
+                               ms_error("Could not create element of MEDIA_STREAMER_CONVERTER_KLASS");
+                       }
+                       if (!gst_bin_add(GST_BIN(sink_bin), found_element)) {
+                               ms_error("Failed to add element [%s] into bin [%s]", GST_ELEMENT_NAME(found_element),
+                                                GST_ELEMENT_NAME(sink_bin));
+                       }
+                       previous_element = __ms_link_with_new_element(previous_element, found_element);
+                       if (!previous_element) {
+                               gst_bin_remove(GST_BIN(sink_bin), found_element);
+                               return FALSE;
+                       }
+
+
+               /* Getting Sink */
+               found_element = __ms_bin_find_element_by_klass(sink_bin, MEDIA_STREAMER_SINK_KLASS);
                if (!found_element) {
-                       found_element = __ms_element_create(DEFAULT_AUDIO_CONVERT, NULL);
-                       gst_bin_add(GST_BIN(sink_bin), found_element);
+                       ms_error("There are no any SINK elements created by user");
                }
-//                     GstElement *resample = __ms_element_create(DEFAULT_AUDIO_RESAMPLE, NULL);
-//                     gst_bin_add(GST_BIN(sink_bin), resample);
-//                     g_assert(gst_element_link(found_element, resample));
-       } else if (MS_ELEMENT_IS_VIDEO(source_pad_name)) {
-               found_element = __ms_bin_find_element_by_klass(sink_bin, "Generic/Bin");
-               if (!found_element) {
-                       dictionary *dict = NULL;
-                       __ms_load_ini_dictionary(&dict);
-                       found_element = __ms_video_decoder_element_create(dict, MEDIA_FORMAT_H263);
-                       gst_bin_add(GST_BIN(sink_bin), found_element);
-                       __ms_destroy_ini_dictionary(dict);
+               previous_element = __ms_link_with_new_element(previous_element, found_element);
+               if (!previous_element) {
+                       gst_bin_remove(GST_BIN(sink_bin), found_element);
+                       return FALSE;
                }
+
+               __ms_generate_dots(ms_node->parent_streamer->pipeline, "pipeline_linked");
+               __ms_element_set_state(ms_node->parent_streamer->pipeline, GST_STATE_PLAYING);
+               }
+
        } else {
-               return FALSE;
-       }
+               if(!gst_pad_is_linked(src_pad)) {
+                       previous_element = __ms_link_with_new_element(previous_element, found_element);
+                       if (!previous_element) {
+                               gst_bin_remove(GST_BIN(sink_bin), found_element);
+                               return FALSE;
+                       }
+               } else {
+                       previous_element = found_element;
+               }
 
-       if (!gst_pad_is_linked(src_pad))
-       {
-               GstPad *sink_pad = gst_element_get_static_pad(found_element, "sink");
-               g_assert(!gst_pad_link(src_pad, sink_pad));
-               MS_SAFE_UNREF(sink_pad);
-       }
-       MS_SAFE_UNREF(src_pad);
+               if (!decodebin_usage) {
 
-       src_pad = gst_element_get_static_pad(found_element, "src");
-       found_element = __ms_bin_find_element_by_klass(sink_bin, "Sink/");
-       if (!gst_pad_is_linked(src_pad))
-       {
-               GstPad *sink_pad = gst_element_get_static_pad(found_element, "sink");
-               g_assert(!gst_pad_link(src_pad, sink_pad));
-               MS_SAFE_UNREF(sink_pad);
+                       /* Getting Sink */
+                       found_element = __ms_bin_find_element_by_klass(sink_bin, MEDIA_STREAMER_SINK_KLASS);
+                       if (!found_element) {
+                               ms_error("There are no any SINK elements created by user");
+                       }
+
+                       if(!gst_pad_is_linked(src_pad)) {
+                               previous_element = __ms_link_with_new_element(previous_element, found_element);
+                               if (!previous_element) {
+                                       gst_bin_remove(GST_BIN(sink_bin), found_element);
+                                       return FALSE;
+                               }
+                       }
+
+                       __ms_generate_dots(ms_node->parent_streamer->pipeline, "pipeline_linked");
+                       __ms_element_set_state(ms_node->parent_streamer->pipeline, GST_STATE_PLAYING);
+               }
        }
+
        MS_SAFE_UNREF(src_pad);
-       ret = TRUE;
 
-       return ret;
+       return TRUE;
 }
 
 static void __ms_rtpbin_pad_added_cb(GstElement *src, GstPad *new_pad, gpointer user_data)
@@ -479,7 +718,7 @@ static void __ms_rtpbin_pad_added_cb(GstElement *src, GstPad *new_pad, gpointer
                        gst_pad_set_active(source_pad, TRUE);
 
                        g_mutex_lock(&ms_node->parent_streamer->mutex_lock);
-                       if (__ms_sink_bin_prepare(sink_bin, source_pad)) {
+                       if (__ms_sink_bin_prepare(ms_node, sink_bin, source_pad)) {
 
                                if (gst_object_get_parent(GST_OBJECT(sink_bin)) == NULL) {
                                        gst_bin_add(GST_BIN(ms_node->parent_streamer->pipeline), sink_bin);
@@ -506,7 +745,6 @@ static void __ms_rtpbin_pad_added_cb(GstElement *src, GstPad *new_pad, gpointer
                ms_debug("Node doesn`t have parent streamer or caps media type\n");
        }
 
-       gst_caps_unref(src_pad_caps);
        MS_SAFE_UNREF(target_pad);
        MS_SAFE_GFREE(new_pad_name);
        MS_SAFE_GFREE(src_element_name);
index 03d077c..224b44f 100755 (executable)
@@ -139,6 +139,7 @@ int __ms_node_create(media_streamer_node_s *node,
        dictionary *dict = NULL;
        char *plugin_name = NULL;
        media_format_mimetype_e mime;
+       gboolean dec_use;
 
        if (MEDIA_FORMAT_ERROR_NONE != media_format_get_video_info(out_fmt, &mime, NULL, NULL, NULL, NULL)) {
                media_format_get_audio_info(out_fmt, &mime, NULL, NULL, NULL, NULL);
@@ -157,10 +158,16 @@ int __ms_node_create(media_streamer_node_s *node,
                        node->gst_element = __ms_video_encoder_element_create(dict, mime);
                        break;
                case MEDIA_STREAMER_NODE_TYPE_VIDEO_DECODER:
-                       format_prefix = g_strdup_printf("%s:decoder", __ms_convert_mime_to_string(mime));
-                       plugin_name = __ms_ini_get_string(dict,
-                                                         format_prefix, DEFAULT_VIDEO_DECODER);
-                       node->gst_element = __ms_video_decoder_element_create(dict, mime);
+                       dec_use = iniparser_getboolean(dict, "general:use decodebin", DEFAULT_USE_DECODEBIN);
+                       if (dec_use) {
+                               node->gst_element = __ms_element_create("decodebin", NULL);
+                               g_signal_connect(node->gst_element, "pad-added", G_CALLBACK (__decodebin_newpad_cb), (gpointer)node);
+                       } else {
+                               format_prefix = g_strdup_printf("%s:decoder", __ms_convert_mime_to_string(mime));
+                               plugin_name = __ms_ini_get_string(dict,
+                                                                     format_prefix, DEFAULT_VIDEO_DECODER);
+                               node->gst_element = __ms_video_decoder_element_create(dict, mime);
+                       }
                        break;
                case MEDIA_STREAMER_NODE_TYPE_PARSER:
                        format_prefix = g_strdup_printf("%s:parser", __ms_convert_mime_to_string(mime));
@@ -190,7 +197,7 @@ int __ms_node_create(media_streamer_node_s *node,
                        break;
                case MEDIA_STREAMER_NODE_TYPE_AUDIO_DEPAY:
                        plugin_name = __ms_ini_get_string(dict,
-                                                         "audio-raw:rtpdepay", DEFAULT_AUDIO_RTPPAY);
+                                                         "audio-raw:rtpdepay", DEFAULT_AUDIO_RTPDEPAY);
                        node->gst_element = __ms_element_create(plugin_name, NULL);
                        break;
                case MEDIA_STREAMER_NODE_TYPE_RTP:
index 1cde4fc..201a92f 100755 (executable)
@@ -108,7 +108,10 @@ int __ms_load_ini_settings(media_streamer_ini_t *ini)
                        g_setenv("GST_DEBUG_DUMP_DOT_DIR", dot_path, FALSE);
                }
 
-       } else { /* if dict is not available just fill the structure with default value */
+               ini->use_decodebin = iniparser_getboolean(dict, "general:use decodebin", DEFAULT_USE_DECODEBIN);
+       }
+
+        else { /* if dict is not available just fill the structure with default value */
                ms_debug("failed to load ini. using hardcoded default");
 
                /* general settings*/
@@ -119,6 +122,7 @@ int __ms_load_ini_settings(media_streamer_ini_t *ini)
 
        /* general */
        ms_debug("generate_dot : %d\n", ini->generate_dot);
+       ms_debug("Use_decodebin : %d\n", ini->use_decodebin);
 
        return MEDIA_STREAMER_ERROR_NONE;
 }
index c2131e3..3223ecd 100755 (executable)
@@ -479,14 +479,14 @@ static gboolean _create_rtp_client(media_streamer_node_h rtp_bin)
                media_streamer_node_add(current_media_streamer, audio_depay);
 
                /*********************** audioconvert *********************************** */
-               media_streamer_node_h audio_converter = NULL;
-               media_streamer_node_create(MEDIA_STREAMER_NODE_TYPE_AUDIO_CONVERTER, NULL, NULL, &audio_converter);
-               media_streamer_node_add(current_media_streamer, audio_converter);
+               /*media_streamer_node_h audio_converter = NULL;*/
+               /*media_streamer_node_create(MEDIA_STREAMER_NODE_TYPE_AUDIO_CONVERTER, NULL, NULL, &audio_converter);*/
+               /*media_streamer_node_add(current_media_streamer, audio_converter);*/
 
                /*********************** audioresample *********************************** */
-               media_streamer_node_h audio_res = NULL;
-               media_streamer_node_create(MEDIA_STREAMER_NODE_TYPE_AUDIO_RESAMPLE, NULL, NULL, &audio_res);
-               media_streamer_node_add(current_media_streamer, audio_res);
+               /*media_streamer_node_h audio_res = NULL;*/
+               /*media_streamer_node_create(MEDIA_STREAMER_NODE_TYPE_AUDIO_RESAMPLE, NULL, NULL, &audio_res);*/
+               /*media_streamer_node_add(current_media_streamer, audio_res);*/
 
                /*********************** audiosink *********************************** */
                media_streamer_node_h audio_sink = NULL;
@@ -494,9 +494,9 @@ static gboolean _create_rtp_client(media_streamer_node_h rtp_bin)
                media_streamer_node_add(current_media_streamer, audio_sink);
 
                /*====================Linking Audio Client=========================== */
-               media_streamer_node_link(audio_depay, "src", audio_converter, "sink");
-               media_streamer_node_link(audio_converter, "src", audio_res, "sink");
-               media_streamer_node_link(audio_res, "src", audio_sink, "sink");
+               /*media_streamer_node_link(audio_depay, "src", audio_converter, "sink");*/
+               /*media_streamer_node_link(audio_converter, "src", audio_res, "sink");*/
+               /*media_streamer_node_link(audio_res, "src", audio_sink, "sink");*/
                /*media_streamer_node_link(rtp_bin, "audio_out", audio_depay,"sink"); */
                /*====================================================================== */