Browse Source

Added media description to track

Paul-Louis Ageneau 5 years ago
parent
commit
24e502712f
5 changed files with 21 additions and 16 deletions
  1. 8 8
      include/rtc/description.hpp
  2. 1 1
      include/rtc/peerconnection.hpp
  3. 4 2
      include/rtc/track.hpp
  4. 3 3
      src/peerconnection.cpp
  5. 5 2
      src/track.cpp

+ 8 - 8
include/rtc/description.hpp

@@ -66,20 +66,12 @@ public:
 	string generateSdp(const string &eol) const;
 	string generateDataSdp(const string &eol) const;
 
-private:
-	Type mType;
-	Role mRole;
-	string mSessionId;
-	string mIceUfrag, mIcePwd;
-	std::optional<string> mFingerprint;
-
 	// Data
 	struct Data {
 		string mid;
 		std::optional<uint16_t> sctpPort;
 		std::optional<size_t> maxMessageSize;
 	};
-	Data mData;
 
 	// Media (non-data)
 	struct Media {
@@ -89,6 +81,14 @@ private:
 		string mid;
 		std::vector<string> attributes;
 	};
+
+private:
+	Type mType;
+	Role mRole;
+	string mSessionId;
+	string mIceUfrag, mIcePwd;
+	std::optional<string> mFingerprint;
+	Data mData;
 	std::map<int, Media> mMedia; // by m-line index
 
 	// Candidates

+ 1 - 1
include/rtc/peerconnection.hpp

@@ -103,7 +103,7 @@ public:
 
 	// Media support requires compilation with SRTP
 	bool hasMedia() const;
-	std::shared_ptr<Track> createTrack(string mid);
+	std::shared_ptr<Track> createTrack(Description::Media description);
 	void onTrack(std::function<void(std::shared_ptr<Track> track)> callback);
 
 	// libnice only

+ 4 - 2
include/rtc/track.hpp

@@ -20,6 +20,7 @@
 #define RTC_TRACK_H
 
 #include "channel.hpp"
+#include "description.hpp"
 #include "include.hpp"
 #include "message.hpp"
 #include "queue.hpp"
@@ -35,10 +36,11 @@ class DtlsSrtpTransport;
 
 class Track final : public std::enable_shared_from_this<Track>, public Channel {
 public:
-	Track(string mid);
+	Track(Description::Media description);
 	~Track() = default;
 
 	string mid() const;
+	Description::Media description() const;
 
 	void close(void) override;
 	bool send(message_variant data) override;
@@ -61,7 +63,7 @@ private:
 	bool outgoing(message_ptr message);
 	void incoming(message_ptr message);
 
-	const string mMid;
+	Description::Media mMediaDescription;
 	std::atomic<bool> mIsClosed = false;
 
 	Queue<message_ptr> mRecvQueue;

+ 3 - 3
src/peerconnection.cpp

@@ -239,12 +239,12 @@ bool PeerConnection::hasMedia() const {
 	return (local && local->hasMedia()) || (remote && remote->hasMedia());
 }
 
-std::shared_ptr<Track> PeerConnection::createTrack(string mid) {
+std::shared_ptr<Track> PeerConnection::createTrack(Description::Media description) {
 	if (localDescription())
 		throw std::logic_error("Tracks must be created before local description");
 
-	auto track = std::make_shared<Track>(mid);
-	mTracks.emplace(std::make_pair(mid, track));
+	auto track = std::make_shared<Track>(std::move(description));
+	mTracks.emplace(std::make_pair(track->mid(), track));
 	return track;
 }
 

+ 5 - 2
src/track.cpp

@@ -25,9 +25,12 @@ namespace rtc {
 using std::shared_ptr;
 using std::weak_ptr;
 
-Track::Track(string mid) : mMid(std::move(mid)), mRecvQueue(RECV_QUEUE_LIMIT, message_size_func) {}
+Track::Track(Description::Media description)
+    : mMediaDescription(std::move(description)), mRecvQueue(RECV_QUEUE_LIMIT, message_size_func) {}
 
-string Track::mid() const { return mMid; }
+string Track::mid() const { return mMediaDescription.mid; }
+
+Description::Media Track::description() const { return mMediaDescription; }
 
 void Track::close() {
 	mIsClosed = true;