Allow updating track description

This commit is contained in:
Paul-Louis Ageneau
2020-11-02 08:52:04 +01:00
parent 5e876a4686
commit 476528b464
4 changed files with 21 additions and 14 deletions

View File

@ -94,8 +94,7 @@ public:
struct Application : public Entry {
public:
Application(string mid = "data");
Application(const Application &other) = default;
Application(Application &&other) = default;
virtual ~Application() = default;
string description() const override;
Application reciprocate() const;
@ -121,8 +120,6 @@ public:
public:
Media(const string &sdp);
Media(const string &mline, string mid, Direction dir = Direction::SendOnly);
Media(const Media &other) = default;
Media(Media &&other) = default;
virtual ~Media() = default;
string description() const override;

View File

@ -43,6 +43,8 @@ public:
string mid() const;
Description::Media description() const;
void setDescription(Description::Media description);
void close(void) override;
bool send(message_variant data) override;
bool send(const byte *data, size_t size);

View File

@ -368,19 +368,23 @@ void PeerConnection::onSignalingStateChange(std::function<void(SignalingState st
}
std::shared_ptr<Track> PeerConnection::addTrack(Description::Media description) {
if (auto it = mTracks.find(description.mid()); it != mTracks.end())
if (auto track = it->second.lock())
return track;
#if !RTC_ENABLE_MEDIA
if (mTracks.empty()) {
PLOG_WARNING << "Tracks will be inative (not compiled with SRTP support)";
}
#endif
auto track = std::make_shared<Track>(std::move(description));
mTracks.emplace(std::make_pair(track->mid(), track));
// Renegotiation is needed for the new track
std::shared_ptr<Track> track;
if (auto it = mTracks.find(description.mid()); it != mTracks.end())
if(track = it->second.lock(); track)
track->setDescription(std::move(description));
if(!track) {
track = std::make_shared<Track>(std::move(description));
mTracks.emplace(std::make_pair(track->mid(), track));
}
// Renegotiation is needed for the new or updated track
mNegotiationNeeded = true;
return track;

View File

@ -32,6 +32,10 @@ string Track::mid() const { return mMediaDescription.mid(); }
Description::Media Track::description() const { return mMediaDescription; }
void Track::setDescription(Description::Media description) {
mMediaDescription = std::move(description);
}
void Track::close() {
mIsClosed = true;
resetCallbacks();