summaryrefslogtreecommitdiffstats
path: root/dom/media/webrtc/jsep
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/webrtc/jsep')
-rw-r--r--dom/media/webrtc/jsep/JsepSessionImpl.cpp12
-rw-r--r--dom/media/webrtc/jsep/JsepTrack.cpp4
-rw-r--r--dom/media/webrtc/jsep/JsepTrack.h10
3 files changed, 16 insertions, 10 deletions
diff --git a/dom/media/webrtc/jsep/JsepSessionImpl.cpp b/dom/media/webrtc/jsep/JsepSessionImpl.cpp
index 50def6eb6c..c091b6d618 100644
--- a/dom/media/webrtc/jsep/JsepSessionImpl.cpp
+++ b/dom/media/webrtc/jsep/JsepSessionImpl.cpp
@@ -1121,11 +1121,17 @@ nsresult JsepSessionImpl::HandleNegotiatedSession(
CopyBundleTransports();
- std::vector<JsepTrack*> remoteTracks;
+ std::vector<JsepTrack*> receiveTracks;
for (auto& transceiver : mTransceivers) {
- remoteTracks.push_back(&transceiver.mRecvTrack);
+ // Do not count payload types for non-active recv tracks as duplicates. If
+ // we receive an RTP packet with a payload type that is used by both a
+ // sendrecv and a sendonly m-section, there is no ambiguity; it is for the
+ // sendrecv m-section.
+ if (transceiver.mRecvTrack.GetActive()) {
+ receiveTracks.push_back(&transceiver.mRecvTrack);
+ }
}
- JsepTrack::SetUniquePayloadTypes(remoteTracks);
+ JsepTrack::SetUniqueReceivePayloadTypes(receiveTracks);
mNegotiations++;
diff --git a/dom/media/webrtc/jsep/JsepTrack.cpp b/dom/media/webrtc/jsep/JsepTrack.cpp
index 59c038cfc0..2498200ab2 100644
--- a/dom/media/webrtc/jsep/JsepTrack.cpp
+++ b/dom/media/webrtc/jsep/JsepTrack.cpp
@@ -662,7 +662,7 @@ nsresult JsepTrack::Negotiate(const SdpMediaSection& answer,
// works, however, if that payload type appeared in only one m-section.
// We figure that out here.
/* static */
-void JsepTrack::SetUniquePayloadTypes(std::vector<JsepTrack*>& tracks) {
+void JsepTrack::SetUniqueReceivePayloadTypes(std::vector<JsepTrack*>& tracks) {
// Maps to track details if no other track contains the payload type,
// otherwise maps to nullptr.
std::map<uint16_t, JsepTrackNegotiatedDetails*> payloadTypeToDetailsMap;
@@ -697,7 +697,7 @@ void JsepTrack::SetUniquePayloadTypes(std::vector<JsepTrack*>& tracks) {
auto trackDetails = ptAndDetails.second;
if (trackDetails) {
- trackDetails->mUniquePayloadTypes.push_back(
+ trackDetails->mUniqueReceivePayloadTypes.push_back(
static_cast<uint8_t>(uniquePt));
}
}
diff --git a/dom/media/webrtc/jsep/JsepTrack.h b/dom/media/webrtc/jsep/JsepTrack.h
index d11735f43a..74a0d2396c 100644
--- a/dom/media/webrtc/jsep/JsepTrack.h
+++ b/dom/media/webrtc/jsep/JsepTrack.h
@@ -31,7 +31,7 @@ class JsepTrackNegotiatedDetails {
JsepTrackNegotiatedDetails(const JsepTrackNegotiatedDetails& orig)
: mExtmap(orig.mExtmap),
- mUniquePayloadTypes(orig.mUniquePayloadTypes),
+ mUniqueReceivePayloadTypes(orig.mUniqueReceivePayloadTypes),
mTias(orig.mTias),
mRtpRtcpConf(orig.mRtpRtcpConf) {
for (const auto& encoding : orig.mEncodings) {
@@ -71,8 +71,8 @@ class JsepTrackNegotiatedDetails {
}
}
- std::vector<uint8_t> GetUniquePayloadTypes() const {
- return mUniquePayloadTypes;
+ std::vector<uint8_t> GetUniqueReceivePayloadTypes() const {
+ return mUniqueReceivePayloadTypes;
}
uint32_t GetTias() const { return mTias; }
@@ -83,7 +83,7 @@ class JsepTrackNegotiatedDetails {
friend class JsepTrack;
std::map<std::string, SdpExtmapAttributeList::Extmap> mExtmap;
- std::vector<uint8_t> mUniquePayloadTypes;
+ std::vector<uint8_t> mUniqueReceivePayloadTypes;
std::vector<UniquePtr<JsepTrackEncoding>> mEncodings;
uint32_t mTias; // bits per second
RtpRtcpConfig mRtpRtcpConf;
@@ -214,7 +214,7 @@ class JsepTrack {
virtual nsresult Negotiate(const SdpMediaSection& answer,
const SdpMediaSection& remote,
const SdpMediaSection& local);
- static void SetUniquePayloadTypes(std::vector<JsepTrack*>& tracks);
+ static void SetUniqueReceivePayloadTypes(std::vector<JsepTrack*>& tracks);
virtual void GetNegotiatedPayloadTypes(
std::vector<uint16_t>* payloadTypes) const;