#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" {
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);
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
* 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"
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;
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;
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;