Browse Source

Merge pull request #733 from JonasVautherin/fix-dynamic-track

Add a configuration option to force track allocation
Paul-Louis Ageneau 2 years ago
parent
commit
c4f7a9c670
2 changed files with 14 additions and 4 deletions
  1. 1 0
      include/rtc/configuration.hpp
  2. 13 4
      src/impl/peerconnection.cpp

+ 1 - 0
include/rtc/configuration.hpp

@@ -85,6 +85,7 @@ struct RTC_CPP_EXPORT Configuration {
 	bool enableIceTcp = false;    // libnice only
 	bool enableIceTcp = false;    // libnice only
 	bool enableIceUdpMux = false; // libjuice only
 	bool enableIceUdpMux = false; // libjuice only
 	bool disableAutoNegotiation = false;
 	bool disableAutoNegotiation = false;
+	bool forceMediaTransport = false;
 
 
 	// Port range
 	// Port range
 	uint16_t portRangeBegin = 1024;
 	uint16_t portRangeBegin = 1024;

+ 13 - 4
src/impl/peerconnection.cpp

@@ -239,7 +239,8 @@ shared_ptr<DtlsTransport> PeerConnection::initDtlsTransport() {
 		    };
 		    };
 
 
 		shared_ptr<DtlsTransport> transport;
 		shared_ptr<DtlsTransport> transport;
-		if (auto local = localDescription(); local && local->hasAudioOrVideo()) {
+		auto local = localDescription();
+		if (config.forceMediaTransport || (local && local->hasAudioOrVideo())) {
 #if RTC_ENABLE_MEDIA
 #if RTC_ENABLE_MEDIA
 			PLOG_INFO << "This connection requires media support";
 			PLOG_INFO << "This connection requires media support";
 
 
@@ -757,9 +758,17 @@ void PeerConnection::openTracks() {
 #if RTC_ENABLE_MEDIA
 #if RTC_ENABLE_MEDIA
 	if (auto transport = std::atomic_load(&mDtlsTransport)) {
 	if (auto transport = std::atomic_load(&mDtlsTransport)) {
 		auto srtpTransport = std::dynamic_pointer_cast<DtlsSrtpTransport>(transport);
 		auto srtpTransport = std::dynamic_pointer_cast<DtlsSrtpTransport>(transport);
-		iterateTracks([&](shared_ptr<Track> track) {
-			if (!track->isOpen())
-				track->open(srtpTransport);
+
+		iterateTracks([&](const shared_ptr<Track>& track) {
+			if (!track->isOpen()) {
+				if (srtpTransport) {
+					track->open(srtpTransport);
+				} else {
+					auto errorMsg = "addTrack() was called, but srtp transport was not initialized. This is an optimization for use of the library with data channels only. Set config.forceMediaTransport to 'true' to get the transport initialized before dynamically adding tracks.";
+					PLOG_ERROR << errorMsg;
+					track->triggerError(errorMsg);
+				}
+			}
 		});
 		});
 	}
 	}
 #endif
 #endif