Browse Source

Added inactive as media direction

Paul-Louis Ageneau 4 years ago
parent
commit
cc954cc74c
4 changed files with 29 additions and 11 deletions
  1. 1 1
      examples/media/main.cpp
  2. 2 1
      include/rtc/description.hpp
  3. 14 7
      src/description.cpp
  4. 12 2
      src/peerconnection.cpp

+ 1 - 1
examples/media/main.cpp

@@ -59,7 +59,7 @@ int main() {
 	addr.sin_port = htons(5000);
 	addr.sin_port = htons(5000);
 	addr.sin_family = AF_INET;
 	addr.sin_family = AF_INET;
 
 
-	rtc::Description::Video media("video", rtc::Description::RecvOnly);
+	rtc::Description::Video media("video", rtc::Description::Direction::RecvOnly);
 	media.addH264Codec(96);
 	media.addH264Codec(96);
 	media.setBitrate(
 	media.setBitrate(
 	    3000); // Request 3Mbps (Browsers do not encode more than 2.5MBps from a webcam)
 	    3000); // Request 3Mbps (Browsers do not encode more than 2.5MBps from a webcam)

+ 2 - 1
include/rtc/description.hpp

@@ -36,7 +36,7 @@ class Description {
 public:
 public:
 	enum class Type { Unspec = 0, Offer = 1, Answer = 2 };
 	enum class Type { Unspec = 0, Offer = 1, Answer = 2 };
 	enum class Role { ActPass = 0, Passive = 1, Active = 2 };
 	enum class Role { ActPass = 0, Passive = 1, Active = 2 };
-	enum Direction { SendOnly, RecvOnly, SendRecv, Unknown };
+	enum class Direction { SendOnly, RecvOnly, SendRecv, Inactive, Unknown };
 
 
 	Description(const string &sdp, const string &typeString = "");
 	Description(const string &sdp, const string &typeString = "");
 	Description(const string &sdp, Type type);
 	Description(const string &sdp, Type type);
@@ -119,6 +119,7 @@ public:
 		string description() const override;
 		string description() const override;
 		Media reciprocate() const;
 		Media reciprocate() const;
 
 
+		void setDirection(Direction dir);
 		void removeFormat(const string &fmt);
 		void removeFormat(const string &fmt);
 
 
 		void addVideoCodec(int payloadType, const string &codec);
 		void addVideoCodec(int payloadType, const string &codec);

+ 14 - 7
src/description.cpp

@@ -383,15 +383,18 @@ string Description::Entry::generateSdp(string_view eol) const {
 	sdp << "a=mid:" << mMid << eol;
 	sdp << "a=mid:" << mMid << eol;
 
 
 	switch (mDirection) {
 	switch (mDirection) {
-	case Direction::RecvOnly:
-		sdp << "a=recvonly" << eol;
-		break;
 	case Direction::SendOnly:
 	case Direction::SendOnly:
 		sdp << "a=sendonly" << eol;
 		sdp << "a=sendonly" << eol;
 		break;
 		break;
+	case Direction::RecvOnly:
+		sdp << "a=recvonly" << eol;
+		break;
 	case Direction::SendRecv:
 	case Direction::SendRecv:
 		sdp << "a=sendrecv" << eol;
 		sdp << "a=sendrecv" << eol;
 		break;
 		break;
+	case Direction::Inactive:
+		sdp << "a=inactive" << eol;
+		break;
 	default:
 	default:
 		// Ignore
 		// Ignore
 		break;
 		break;
@@ -410,12 +413,14 @@ void Description::Entry::parseSdpLine(string_view line) {
 
 
 		if (key == "mid")
 		if (key == "mid")
 			mMid = value;
 			mMid = value;
-		else if (key == "sendrecv")
-			mDirection = Direction::SendRecv;
-		else if (attr == "recvonly")
-			mDirection = Direction::RecvOnly;
 		else if (attr == "sendonly")
 		else if (attr == "sendonly")
 			mDirection = Direction::SendOnly;
 			mDirection = Direction::SendOnly;
+		else if (attr == "recvonly")
+			mDirection = Direction::RecvOnly;
+		else if (key == "sendrecv")
+			mDirection = Direction::SendRecv;
+		else if (key == "inactive")
+			mDirection = Direction::Inactive;
 		else
 		else
 			mAttributes.emplace_back(line.substr(2));
 			mAttributes.emplace_back(line.substr(2));
 	}
 	}
@@ -516,6 +521,8 @@ Description::Media::RTPMap &Description::Media::getFormat(const string &fmt) {
 	throw std::invalid_argument("format was not found");
 	throw std::invalid_argument("format was not found");
 }
 }
 
 
+void Description::Media::setDirection(Direction dir) { mDirection = dir; }
+
 void Description::Media::removeFormat(const string &fmt) {
 void Description::Media::removeFormat(const string &fmt) {
 	auto it = mRtpMap.begin();
 	auto it = mRtpMap.begin();
 	std::vector<int> remed;
 	std::vector<int> remed;

+ 12 - 2
src/peerconnection.cpp

@@ -679,7 +679,12 @@ void PeerConnection::processLocalDescription(Description description) {
 				        PLOG_DEBUG << "Reciprocating media in local description, mid=\""
 				        PLOG_DEBUG << "Reciprocating media in local description, mid=\""
 				                   << media->mid() << "\"";
 				                   << media->mid() << "\"";
 
 
-				        description.addMedia(media->reciprocate());
+				        auto reciprocated = media->reciprocate();
+#if !RTC_ENABLE_MEDIA
+				        // No media support, mark as inactive
+				        reciprocated.setDirection(Description::Direction::Inactive);
+#endif
+				        description.addMedia(std::move(reciprocated));
 			        },
 			        },
 			    },
 			    },
 			    remote->media(i));
 			    remote->media(i));
@@ -704,7 +709,12 @@ void PeerConnection::processLocalDescription(Description description) {
 				if (auto track = it->second.lock()) {
 				if (auto track = it->second.lock()) {
 					PLOG_DEBUG << "Adding media to local description, mid=\"" << track->mid()
 					PLOG_DEBUG << "Adding media to local description, mid=\"" << track->mid()
 					           << "\"";
 					           << "\"";
-					description.addMedia(track->description());
+					auto media = track->description();
+#if !RTC_ENABLE_MEDIA
+					// No media support, mark as inactive
+					media.setDirection(Description::Direction::Inactive);
+#endif
+					description.addMedia(std::move(media));
 				}
 				}
 			}
 			}
 		}
 		}