Преглед на файлове

Merge pull request #749 from paullouisageneau/various-fixes

Various small fixes
Paul-Louis Ageneau преди 2 години
родител
ревизия
6395512cc5
променени са 4 файла, в които са добавени 33 реда и са изтрити 50 реда
  1. 1 0
      include/rtc/description.hpp
  2. 20 41
      src/description.cpp
  3. 6 2
      src/impl/peerconnection.cpp
  4. 6 7
      test/track.cpp

+ 1 - 0
include/rtc/description.hpp

@@ -105,6 +105,7 @@ public:
 		struct RTC_CPP_EXPORT ExtMap {
 			static int parseId(string_view description);
 
+			ExtMap(int id, string uri, Direction direction = Direction::Unknown);
 			ExtMap(string_view description);
 
 			void setDescription(string_view description);

+ 20 - 41
src/description.cpp

@@ -599,46 +599,18 @@ string Description::Entry::generateSdpLines(string_view eol) const {
 		auto &map = it->second;
 
 		sdp << "a=extmap:" << map.id;
-		switch (map.direction) {
-		case Direction::SendOnly:
-			sdp << "/sendonly";
-			break;
-		case Direction::RecvOnly:
-			sdp << "/recvonly";
-			break;
-		case Direction::SendRecv:
-			sdp << "/sendrecv";
-			break;
-		case Direction::Inactive:
-			sdp << "/inactive";
-			break;
-		default:
-			// Ignore
-			break;
-		}
+		if (map.direction != Direction::Unknown)
+			sdp << '/' << map.direction;
+
 		sdp << ' ' << map.uri;
 		if (!map.attributes.empty())
 			sdp << ' ' << map.attributes;
+
 		sdp << eol;
 	}
 
-	switch (mDirection) {
-	case Direction::SendOnly:
-		sdp << "a=sendonly" << eol;
-		break;
-	case Direction::RecvOnly:
-		sdp << "a=recvonly" << eol;
-		break;
-	case Direction::SendRecv:
-		sdp << "a=sendrecv" << eol;
-		break;
-	case Direction::Inactive:
-		sdp << "a=inactive" << eol;
-		break;
-	default:
-		// Ignore
-		break;
-	}
+	if (mDirection != Direction::Unknown)
+		sdp << "a=" << mDirection << eol;
 
 	for (const auto &attr : mAttributes)
 		sdp << "a=" << attr << eol;
@@ -702,13 +674,19 @@ Description::Entry::removeExtMap(std::map<int, Description::Entry::ExtMap>::iter
 	return mExtMaps.erase(iterator);
 }
 
-Description::Entry::ExtMap::ExtMap(string_view description) { setDescription(description); }
-
 int Description::Entry::ExtMap::parseId(string_view description) {
 	size_t p = description.find(' ');
 	return to_integer<int>(description.substr(0, p));
 }
 
+Description::Entry::ExtMap::ExtMap(int id, string uri, Direction direction) {
+	this->id = id;
+	this->uri = std::move(uri);
+	this->direction = direction;
+}
+
+Description::Entry::ExtMap::ExtMap(string_view description) { setDescription(description); }
+
 void Description::Entry::ExtMap::setDescription(string_view description) {
 	const size_t uriStart = description.find(' ');
 	if (uriStart == string::npos)
@@ -1261,22 +1239,23 @@ std::ostream &operator<<(std::ostream &out, rtc::Description::Role role) {
 }
 
 std::ostream &operator<<(std::ostream &out, const rtc::Description::Direction &direction) {
+	// Used for SDP generation, do not change
 	switch (direction) {
 	case rtc::Description::Direction::RecvOnly:
-		out << "RecvOnly";
+		out << "recvonly";
 		break;
 	case rtc::Description::Direction::SendOnly:
-		out << "SendOnly";
+		out << "sendonly";
 		break;
 	case rtc::Description::Direction::SendRecv:
-		out << "SendRecv";
+		out << "sendrecv";
 		break;
 	case rtc::Description::Direction::Inactive:
-		out << "Inactive";
+		out << "inactive";
 		break;
 	case rtc::Description::Direction::Unknown:
 	default:
-		out << "Unknown";
+		out << "unknown";
 		break;
 	}
 	return out;

+ 6 - 2
src/impl/peerconnection.cpp

@@ -751,12 +751,16 @@ void PeerConnection::openTracks() {
 	if (auto transport = std::atomic_load(&mDtlsTransport)) {
 		auto srtpTransport = std::dynamic_pointer_cast<DtlsSrtpTransport>(transport);
 
-		iterateTracks([&](const shared_ptr<Track>& track) {
+		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.";
+					// A track was added during a latter renegotiation, whereas SRTP transport was
+					// not initialized. This is an optimization to use the library with data
+					// channels only. Set forceMediaTransport to true to initialize the transport
+					// before dynamically adding tracks.
+					auto errorMsg = "The connection has no media transport";
 					PLOG_ERROR << errorMsg;
 					track->triggerError(errorMsg);
 				}

+ 6 - 7
test/track.cpp

@@ -81,7 +81,6 @@ void test_track() {
 
 	shared_ptr<Track> t2;
 	string newTrackMid;
-	Description::Video media;
 	pc2.onTrack([&t2, &newTrackMid](shared_ptr<Track> t) {
 		string mid = t->mid();
 		cout << "Track 2: Received track with mid \"" << mid << "\"" << endl;
@@ -101,7 +100,7 @@ void test_track() {
 	// Test opening a track
 	newTrackMid = "test";
 
-	media = Description::Video(newTrackMid, Description::Direction::SendOnly);
+	Description::Video media(newTrackMid, Description::Direction::SendOnly);
 	media.addH264Codec(96);
 	media.setBitrate(3000);
 	media.addSSRC(1234, "video-send");
@@ -125,14 +124,14 @@ void test_track() {
 	// Test renegotiation
 	newTrackMid = "added";
 
-	media = Description::Video(newTrackMid, Description::Direction::SendOnly);
-	media.addH264Codec(96);
-	media.setBitrate(3000);
-	media.addSSRC(2468, "video-send");
+	Description::Video media2(newTrackMid, Description::Direction::SendOnly);
+	media2.addH264Codec(96);
+	media2.setBitrate(3000);
+	media2.addSSRC(2468, "video-send");
 
 	// NOTE: Overwriting the old shared_ptr for t1 will cause it's respective
 	//       track to be dropped (so it's SSRCs won't be on the description next time)
-	t1 = pc1.addTrack(media);
+	t1 = pc1.addTrack(media2);
 
 	pc1.setLocalDescription();