Name: capi-media-streamer
Summary: A Media Streamer API
-Version: 0.1.124
+Version: 0.1.125
Release: 0
Group: Multimedia/API
License: Apache-2.0
{
GstPromise *promise;
media_streamer_node_s *webrtc_node = (media_streamer_node_s *)user_data;
+ gboolean is_offerer = FALSE;
ms_retm_if(webrtcbin == NULL, "webrtcbin is NULL");
- ms_retm_if(user_data == NULL, "user_data is NULL");
+ ms_retm_if(webrtc_node == NULL, "webrtc_node is NULL");
ms_retm_if(webrtc_node->parent_streamer == NULL, "parent_streamer is NULL");
ms_debug_fenter();
webrtc_node->parent_streamer->need_paused_by_live_source = FALSE;
}
- promise = gst_promise_new_with_change_func(__on_offer_created_cb, user_data, NULL);
- g_signal_emit_by_name(G_OBJECT(webrtcbin), "create-offer", NULL, promise);
+ if (ms_webrtc_node_is_offerer(webrtc_node, &is_offerer) != MEDIA_STREAMER_ERROR_NONE) {
+ ms_error("Failed to get peer type");
+ return;
+ }
+ if (is_offerer) {
+ promise = gst_promise_new_with_change_func(__on_offer_created_cb, user_data, NULL);
+ g_signal_emit_by_name(G_OBJECT(webrtcbin), "create-offer", NULL, promise);
+ }
ms_debug_fleave();
}
GstElement *webrtcbin = NULL;
GstElement *rtpbin = NULL;
GObject *send_channel = NULL;
- gboolean is_offerer = FALSE;
gint latency = DEFAULT_MEDIA_STREAMER_RTP_LATENCY;
media_streamer_webrtc_callbacks_s *_callbacks = NULL;
return MEDIA_STREAMER_ERROR_INVALID_OPERATION;
}
- 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;
- }
-
- if (is_offerer)
- 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-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);
ret = ms_element_set_state(ms_streamer->pipeline, GST_STATE_PAUSED);
if (ret == MEDIA_STREAMER_ERROR_NONE) {
- /* Note that in case of WebRTC offer mode, 'on-negotiation-needed' callback depends on
+ /* Note that in case of OFFER mode, 'on-negotiation-needed' callback depends on
* the first input buffer. GST_STATE_PAUSED with no prerolled buffer can not meet the condition above.
- * Therefore, we set the state to PLAYING for a short time. */
+ * In the case of ANSWER mode with the max bundle policy, the first input buffer is also required to
+ * set SSRC information to SDP properly inside of webrtcbin. Therefore, we set the state to PLAYING
+ * for a short time as below.
+ */
media_streamer_node_s *webrtc = (media_streamer_node_s *)g_hash_table_lookup(ms_streamer->nodes_table, "webrtc_container");
- gboolean is_offerer = FALSE;
if (webrtc) {
- ret = ms_webrtc_node_is_offerer(webrtc, &is_offerer);
- if (ret != MEDIA_STREAMER_ERROR_NONE)
- break;
- if (is_offerer && ms_pipeline_is_get_state_with_no_preroll(ms_streamer)) {
+ if (ms_pipeline_is_get_state_with_no_preroll(ms_streamer)) {
ms_info("No preroll, we make the GST state to PLAYING here");
ms_streamer->need_paused_by_live_source = TRUE;
ret = ms_element_set_state(ms_streamer->pipeline, GST_STATE_PLAYING);