#include "webrtc.h"
#include "webrtc_private.h"
-#define WEBRTC_INI_PATH "/etc/multimedia/mmfw_webrtc.ini"
-#define DEFAULT_GENERATE_DOT true
-#define DEFAULT_DOT_PATH "/tmp"
+#define WEBRTC_INI_PATH "/etc/multimedia/mmfw_webrtc.ini"
+#define DEFAULT_GENERATE_DOT true
+#define DEFAULT_DOT_PATH "/tmp"
+#define DEFAULT_JITTERBUFFER_LATENCY 200 /* ms */
/* categories */
#define INI_CATEGORY_GENERAL "general"
#define INI_ITEM_GST_ARGS "gstreamer arguments"
#define INI_ITEM_GST_EXCLUDED_ELEMENTS "gstreamer excluded elements"
#define INI_ITEM_STUN_SERVER "stun server"
+#define INI_ITEM_RTP_JITTERBUFFER_LATENCY "rtp jitterbuffer latency"
/* items for media source */
#define INI_ITEM_VIDEO_RAW_FORMAT "video raw format"
__dump_item(INI_ITEM_GST_ARGS, INI_ITEM_TYPE_STRINGS, ini->general.gst_args);
__dump_item(INI_ITEM_GST_EXCLUDED_ELEMENTS, INI_ITEM_TYPE_STRINGS, ini->general.gst_excluded_elements);
__dump_item(INI_ITEM_STUN_SERVER, INI_ITEM_TYPE_STRING, (void *)ini->general.stun_server);
+ __dump_item(INI_ITEM_RTP_JITTERBUFFER_LATENCY, INI_ITEM_TYPE_INT, &ini->general.jitterbuffer_latency);
LOG_INFO("[%s]", INI_CATEGORY_MEDIA_SOURCE);
__dump_items_of_source(&ini->media_source);
__ini_read_list(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_GST_ARGS, &ini->general.gst_args);
__ini_read_list(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_GST_EXCLUDED_ELEMENTS, &ini->general.gst_excluded_elements);
ini->general.stun_server = __ini_get_string(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_STUN_SERVER, NULL);
+ ini->general.jitterbuffer_latency = __ini_get_int(ini->dict, INI_CATEGORY_GENERAL, INI_ITEM_RTP_JITTERBUFFER_LATENCY, DEFAULT_JITTERBUFFER_LATENCY);
/* default setting for a media source */
__apply_media_source_setting(ini, &ini->media_source, INI_CATEGORY_MEDIA_SOURCE);
int _gst_build_pipeline(webrtc_s *webrtc)
{
+ GstElement *rtpbin;
+
RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
webrtc->gst.pipeline = gst_pipeline_new("webrtc-pipeline");
LOG_INFO("stun_server[%s]", webrtc->stun_server_url);
}
+ if (!(rtpbin = gst_bin_get_by_name(GST_BIN(webrtc->gst.webrtcbin), "rtpbin"))) {
+ LOG_ERROR("failed to get rtpbin");
+ goto error;
+ }
+ g_object_set(G_OBJECT(rtpbin), "latency", webrtc->ini.general.jitterbuffer_latency, NULL);
+ gst_object_unref(rtpbin);
+
_connect_and_append_signal(&webrtc->signals, (GObject *)webrtc->gst.webrtcbin, "on-negotiation-needed", G_CALLBACK(__webrtcbin_on_negotiation_needed_cb), webrtc);
_connect_and_append_signal(&webrtc->signals, (GObject *)webrtc->gst.webrtcbin, "on-ice-candidate", G_CALLBACK(__webrtcbin_on_ice_candidate_cb), webrtc);
_connect_and_append_signal(&webrtc->signals, (GObject *)webrtc->gst.webrtcbin, "notify::connection-state", G_CALLBACK(__webrtcbin_peer_connection_state_cb), webrtc);