summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct4
-rw-r--r--src/WebRTCLibDataChannel.hpp4
-rw-r--r--src/WebRTCLibObservers.cpp4
-rw-r--r--src/WebRTCLibPeerConnection.cpp34
-rw-r--r--src/WebRTCLibPeerConnection.hpp14
-rw-r--r--src/init.cpp2
6 files changed, 38 insertions, 24 deletions
diff --git a/SConstruct b/SConstruct
index 95ce705..c35bb85 100644
--- a/SConstruct
+++ b/SConstruct
@@ -115,7 +115,7 @@ if target_platform == 'linux':
else:
env.Prepend(CCFLAGS=['-O3'])
- env.Append(CCFLAGS=['-fPIC', '-std=c++11'])
+ env.Append(CCFLAGS=['-fPIC', '-std=c++14'])
if target_arch == '32':
env.Append(CCFLAGS = [ '-m32' ])
@@ -276,7 +276,7 @@ if target == 'debug':
else:
lib_path += '/Release'
-env.Append(CPPPATH=[webrtc_dir + "/include"])
+env.Append(CPPPATH=[webrtc_dir + "/include", webrtc_dir + "/include/third_party/abseil-cpp"])
if target_platform == "linux":
env.Append(LIBS=[lib_name, "atomic"])
diff --git a/src/WebRTCLibDataChannel.hpp b/src/WebRTCLibDataChannel.hpp
index 557d1da..decba98 100644
--- a/src/WebRTCLibDataChannel.hpp
+++ b/src/WebRTCLibDataChannel.hpp
@@ -3,8 +3,8 @@
#include <Godot.hpp> // Godot.hpp must go first, or windows builds breaks
-#include "api/peerconnectioninterface.h" // interface for all things needed from WebRTC
-#include "media/base/mediaengine.h" // needed for CreateModularPeerConnectionFactory
+#include "api/peer_connection_interface.h" // interface for all things needed from WebRTC
+#include "media/base/media_engine.h" // needed for CreateModularPeerConnectionFactory
#include "net/WebRTCDataChannelNative.hpp"
#include "PoolArrays.hpp"
diff --git a/src/WebRTCLibObservers.cpp b/src/WebRTCLibObservers.cpp
index 4564195..6d8f15f 100644
--- a/src/WebRTCLibObservers.cpp
+++ b/src/WebRTCLibObservers.cpp
@@ -15,7 +15,7 @@ void WebRTCLibPeerConnection::GodotCSDO::OnSuccess(webrtc::SessionDescriptionInt
parent->queue_signal("session_description_created", 2, desc->type().c_str(), sdp.c_str());
};
-void WebRTCLibPeerConnection::GodotCSDO::OnFailure(const std::string &error){};
+void WebRTCLibPeerConnection::GodotCSDO::OnFailure(webrtc::RTCError error){};
// SetSessionObseerver
WebRTCLibPeerConnection::GodotSSDO::GodotSSDO(WebRTCLibPeerConnection *parent) {
@@ -23,7 +23,7 @@ WebRTCLibPeerConnection::GodotSSDO::GodotSSDO(WebRTCLibPeerConnection *parent) {
}
void WebRTCLibPeerConnection::GodotSSDO::OnSuccess(){};
-void WebRTCLibPeerConnection::GodotSSDO::OnFailure(const std::string &error){};
+void WebRTCLibPeerConnection::GodotSSDO::OnFailure(webrtc::RTCError error){};
// PeerConnectionObserver
WebRTCLibPeerConnection::GodotPCO::GodotPCO(WebRTCLibPeerConnection *parent) {
diff --git a/src/WebRTCLibPeerConnection.cpp b/src/WebRTCLibPeerConnection.cpp
index 6e81a7c..d95b1e6 100644
--- a/src/WebRTCLibPeerConnection.cpp
+++ b/src/WebRTCLibPeerConnection.cpp
@@ -5,6 +5,21 @@
using namespace godot_webrtc;
+std::unique_ptr<rtc::Thread> WebRTCLibPeerConnection::signaling_thread = nullptr;
+
+void WebRTCLibPeerConnection::initialize_signaling() {
+ if (signaling_thread.get() == nullptr) {
+ signaling_thread = rtc::Thread::Create();
+ }
+ signaling_thread->Start();
+}
+
+void WebRTCLibPeerConnection::deinitialize_signaling() {
+ if (signaling_thread.get() != nullptr) {
+ signaling_thread->Stop();
+ }
+}
+
godot_error _parse_ice_server(webrtc::PeerConnectionInterface::RTCConfiguration &r_config, godot::Dictionary p_server) {
godot::Variant v;
webrtc::PeerConnectionInterface::IceServer ice_server;
@@ -57,7 +72,7 @@ godot_error _parse_channel_config(webrtc::DataChannelInit &r_config, godot::Dict
// ID makes sense only when negotiated is true (and must be set in that case)
ERR_FAIL_COND_V(r_config.negotiated ? r_config.id == -1 : r_config.id != -1, GODOT_ERR_INVALID_PARAMETER);
// Only one of maxRetransmits and maxRetransmitTime can be set on a channel.
- ERR_FAIL_COND_V(r_config.maxRetransmits != -1 && r_config.maxRetransmitTime != -1, GODOT_ERR_INVALID_PARAMETER);
+ ERR_FAIL_COND_V(r_config.maxRetransmits && r_config.maxRetransmitTime, GODOT_ERR_INVALID_PARAMETER);
return GODOT_OK;
}
@@ -119,7 +134,7 @@ godot_object *WebRTCLibPeerConnection::create_data_channel(const char *p_channel
godot_error WebRTCLibPeerConnection::create_offer() {
ERR_FAIL_COND_V(peer_connection.get() == nullptr, GODOT_ERR_UNCONFIGURED);
- peer_connection->CreateOffer(ptr_csdo, nullptr);
+ peer_connection->CreateOffer(ptr_csdo, webrtc::PeerConnectionInterface::RTCOfferAnswerOptions());
return GODOT_OK;
}
@@ -191,16 +206,11 @@ void WebRTCLibPeerConnection::_init() {
mutex_signal_queue = new std::mutex;
// create a PeerConnectionFactoryInterface:
- signaling_thread = new rtc::Thread;
- signaling_thread->Start();
- pc_factory = webrtc::CreateModularPeerConnectionFactory(
- nullptr, // rtc::Thread* network_thread,
- nullptr, // rtc::Thread* worker_thread,
- signaling_thread,
- nullptr, // std::unique_ptr<cricket::MediaEngineInterface> media_engine,
- nullptr, // std::unique_ptr<CallFactoryInterface> call_factory,
- nullptr // std::unique_ptr<RtcEventLogFactoryInterface> event_log_factory
- );
+ webrtc::PeerConnectionFactoryDependencies deps;
+
+ ERR_FAIL_COND(signaling_thread.get() == nullptr);
+ deps.signaling_thread = signaling_thread.get();
+ pc_factory = webrtc::CreateModularPeerConnectionFactory(std::move(deps));
// Create peer connection with default configuration.
webrtc::PeerConnectionInterface::RTCConfiguration config;
diff --git a/src/WebRTCLibPeerConnection.hpp b/src/WebRTCLibPeerConnection.hpp
index b46d606..8c5d9b8 100644
--- a/src/WebRTCLibPeerConnection.hpp
+++ b/src/WebRTCLibPeerConnection.hpp
@@ -3,8 +3,8 @@
#include <Godot.hpp> // Godot.hpp must go first, or windows builds breaks
-#include "api/peerconnectioninterface.h" // interface for all things needed from WebRTC
-#include "media/base/mediaengine.h" // needed for CreateModularPeerConnectionFactory
+#include "api/peer_connection_interface.h" // interface for all things needed from WebRTC
+#include "media/base/media_engine.h" // needed for CreateModularPeerConnectionFactory
#include <functional> // std::function
#include <mutex> // mutex @TODO replace std::mutex with Godot mutex
@@ -18,8 +18,11 @@ class WebRTCLibPeerConnection : public WebRTCPeerConnectionNative {
private:
godot_error _create_pc(webrtc::PeerConnectionInterface::RTCConfiguration &config);
+ static std::unique_ptr<rtc::Thread> signaling_thread;
public:
static void _register_methods();
+ static void initialize_signaling();
+ static void deinitialize_signaling();
void _init();
@@ -66,7 +69,7 @@ public:
GodotCSDO(WebRTCLibPeerConnection *parent);
void OnSuccess(webrtc::SessionDescriptionInterface *desc) override;
- void OnFailure(const std::string &error) override;
+ void OnFailure(webrtc::RTCError error) override;
};
/** SetSessionDescriptionObserver callback functions **/
@@ -76,17 +79,16 @@ public:
GodotSSDO(WebRTCLibPeerConnection *parent);
void OnSuccess() override;
- void OnFailure(const std::string &error) override;
+ void OnFailure(webrtc::RTCError error) override;
};
GodotPCO pco;
rtc::scoped_refptr<GodotSSDO> ptr_ssdo;
rtc::scoped_refptr<GodotCSDO> ptr_csdo;
- std::mutex *mutex_signal_queue;
+ std::mutex *mutex_signal_queue = nullptr;
std::queue<std::function<void()> > signal_queue;
- rtc::Thread *signaling_thread;
rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory;
rtc::scoped_refptr<webrtc::PeerConnectionInterface> peer_connection;
};
diff --git a/src/init.cpp b/src/init.cpp
index 2b73cf1..a9a64ad 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -86,6 +86,7 @@ extern "C" void GDN_EXPORT godot_gdnative_init(godot_gdnative_init_options *o) {
}
}
+ godot_webrtc::WebRTCLibPeerConnection::initialize_signaling();
godot::Godot::gdnative_init(o);
}
@@ -93,6 +94,7 @@ extern "C" void GDN_EXPORT godot_gdnative_terminate(godot_gdnative_terminate_opt
if (_singleton) { // If we are the active singleton, unregister
WebRTCPeerConnectionNative::_net_api->godot_net_set_webrtc_library(NULL);
}
+ godot_webrtc::WebRTCLibPeerConnection::deinitialize_signaling();
godot::Godot::gdnative_terminate(o);
}