Name change from stream label to stream id for spec compliance.
Bug: webrtc:7932 Change-Id: I66f33597342394083256f050cac2a00a68042302 Reviewed-on: https://webrtc-review.googlesource.com/59280 Commit-Queue: Seth Hampson <shampson@webrtc.org> Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org> Reviewed-by: Steve Anton <steveanton@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22276}
This commit is contained in:
parent
1d287b5e96
commit
845e87877e
@ -58,4 +58,15 @@ AudioTrackInterface::GetAudioProcessor() {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// TODO(shampson): Remove this once downstreams are using id().
|
||||
std::string MediaStreamInterface::label() const {
|
||||
return id();
|
||||
}
|
||||
|
||||
// TODO(shampson): Remove this default implementation once downstreams have
|
||||
// implemented.
|
||||
std::string MediaStreamInterface::id() const {
|
||||
return std::string();
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
@ -313,8 +313,10 @@ typedef std::vector<rtc::scoped_refptr<VideoTrackInterface> >
|
||||
class MediaStreamInterface : public rtc::RefCountInterface,
|
||||
public NotifierInterface {
|
||||
public:
|
||||
// TODO(steveanton): This could be renamed to id() to match the spec.
|
||||
virtual std::string label() const = 0;
|
||||
// TODO(shampson): Remove once downstreams are updated to use id().
|
||||
virtual std::string label() const;
|
||||
// TODO(shampson): Make pure virtual once downstreams have implemented.
|
||||
virtual std::string id() const;
|
||||
|
||||
virtual AudioTrackVector GetAudioTracks() = 0;
|
||||
virtual VideoTrackVector GetVideoTracks() = 0;
|
||||
|
||||
@ -23,6 +23,7 @@ namespace webrtc {
|
||||
BEGIN_SIGNALING_PROXY_MAP(MediaStream)
|
||||
PROXY_SIGNALING_THREAD_DESTRUCTOR()
|
||||
PROXY_CONSTMETHOD0(std::string, label)
|
||||
PROXY_CONSTMETHOD0(std::string, id)
|
||||
PROXY_METHOD0(AudioTrackVector, GetAudioTracks)
|
||||
PROXY_METHOD0(VideoTrackVector, GetVideoTracks)
|
||||
PROXY_METHOD1(rtc::scoped_refptr<AudioTrackInterface>,
|
||||
|
||||
@ -633,7 +633,7 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
||||
|
||||
// Add a new MediaStreamTrack to be sent on this PeerConnection, and return
|
||||
// the newly created RtpSender. The RtpSender will be associated with the
|
||||
// streams specified in the |stream_labels| list.
|
||||
// streams specified in the |stream_ids| list.
|
||||
//
|
||||
// Errors:
|
||||
// - INVALID_PARAMETER: |track| is null, has a kind other than audio or video,
|
||||
@ -643,13 +643,13 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
||||
// implementations have been updated.
|
||||
virtual RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> AddTrack(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
return RTCError(RTCErrorType::UNSUPPORTED_OPERATION, "Not implemented");
|
||||
}
|
||||
// |streams| indicates which stream labels the track should be associated
|
||||
// |streams| indicates which stream ids the track should be associated
|
||||
// with.
|
||||
// TODO(steveanton): Remove this overload once callers have moved to the
|
||||
// signature with stream labels.
|
||||
// signature with stream ids.
|
||||
virtual rtc::scoped_refptr<RtpSenderInterface> AddTrack(
|
||||
MediaStreamTrackInterface* track,
|
||||
std::vector<MediaStreamInterface*> streams) {
|
||||
@ -1189,8 +1189,8 @@ class PeerConnectionFactoryInterface : public rtc::RefCountInterface {
|
||||
std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator,
|
||||
PeerConnectionObserver* observer) = 0;
|
||||
|
||||
virtual rtc::scoped_refptr<MediaStreamInterface>
|
||||
CreateLocalMediaStream(const std::string& label) = 0;
|
||||
virtual rtc::scoped_refptr<MediaStreamInterface> CreateLocalMediaStream(
|
||||
const std::string& stream_id) = 0;
|
||||
|
||||
// Creates an AudioSourceInterface.
|
||||
// |options| decides audio processing settings.
|
||||
|
||||
@ -40,6 +40,8 @@ struct RtpTransceiverInit final {
|
||||
RtpTransceiverDirection direction = RtpTransceiverDirection::kSendRecv;
|
||||
|
||||
// The added RtpTransceiver will be added to these streams.
|
||||
// TODO(shampson): Change name to stream_id & update native wrapper's naming
|
||||
// as well.
|
||||
// TODO(bugs.webrtc.org/7600): Not implemented.
|
||||
std::vector<std::string> stream_labels;
|
||||
|
||||
|
||||
@ -199,23 +199,22 @@ bool StreamParams::GetSecondarySsrc(const std::string& semantics,
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<std::string> StreamParams::stream_labels() const {
|
||||
std::vector<std::string> StreamParams::stream_ids() const {
|
||||
if (sync_label.empty()) {
|
||||
return {};
|
||||
}
|
||||
return {sync_label};
|
||||
}
|
||||
|
||||
void StreamParams::set_stream_labels(
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
// TODO(steveanton): Support an arbitrary number of stream labels.
|
||||
RTC_DCHECK_LE(stream_labels.size(), 1) << "set_stream_labels currently only "
|
||||
"supports exactly 0 or 1 stream "
|
||||
"label.";
|
||||
sync_label = (stream_labels.empty() ? "" : stream_labels[0]);
|
||||
void StreamParams::set_stream_ids(const std::vector<std::string>& stream_ids) {
|
||||
// TODO(bugs.webrtc.org/7932): Support an arbitrary number of stream ids.
|
||||
RTC_DCHECK_LE(stream_ids.size(), 1) << "set_stream_ids currently only "
|
||||
"supports exactly 0 or 1 stream "
|
||||
"id.";
|
||||
sync_label = (stream_ids.empty() ? "" : stream_ids[0]);
|
||||
}
|
||||
|
||||
std::string StreamParams::first_stream_label() const {
|
||||
std::string StreamParams::first_stream_id() const {
|
||||
return sync_label;
|
||||
}
|
||||
|
||||
|
||||
@ -142,13 +142,13 @@ struct StreamParams {
|
||||
void GetFidSsrcs(const std::vector<uint32_t>& primary_ssrcs,
|
||||
std::vector<uint32_t>* fid_ssrcs) const;
|
||||
|
||||
// Stream labels serialized to SDP.
|
||||
std::vector<std::string> stream_labels() const;
|
||||
void set_stream_labels(const std::vector<std::string>& stream_labels);
|
||||
// Stream ids serialized to SDP.
|
||||
std::vector<std::string> stream_ids() const;
|
||||
void set_stream_ids(const std::vector<std::string>& stream_ids);
|
||||
|
||||
// Returns the first stream label or "" if none exist. This method exists only
|
||||
// Returns the first stream id or "" if none exist. This method exists only
|
||||
// as temporary backwards compatibility with the old sync_label.
|
||||
std::string first_stream_label() const;
|
||||
std::string first_stream_id() const;
|
||||
|
||||
std::string ToString() const;
|
||||
|
||||
@ -165,7 +165,7 @@ struct StreamParams {
|
||||
// Friendly name describing stream
|
||||
std::string display;
|
||||
std::string cname; // RTCP CNAME
|
||||
// TODO(steveanton): Move callers to |stream_labels()| and make private.
|
||||
// TODO(shampson): Move callers to |stream_ids()| and make private.
|
||||
std::string sync_label; // Friendly name of cname.
|
||||
|
||||
private:
|
||||
|
||||
@ -1224,8 +1224,8 @@ bool WebRtcVideoChannel::AddRecvStream(const StreamParams& sp,
|
||||
// TODO(nisse): Rename config variable to avoid negation.
|
||||
config.disable_prerenderer_smoothing =
|
||||
!video_config_.enable_prerenderer_smoothing;
|
||||
if (!sp.stream_labels().empty()) {
|
||||
config.sync_group = sp.stream_labels()[0];
|
||||
if (!sp.stream_ids().empty()) {
|
||||
config.sync_group = sp.stream_ids()[0];
|
||||
}
|
||||
|
||||
receive_streams_[ssrc] = new WebRtcVideoReceiveStream(
|
||||
|
||||
@ -1485,7 +1485,7 @@ TEST_F(WebRtcVideoChannelTest, SetsSyncGroupFromSyncLabel) {
|
||||
const std::string kSyncLabel = "AvSyncLabel";
|
||||
|
||||
cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kVideoSsrc);
|
||||
sp.set_stream_labels({kSyncLabel});
|
||||
sp.set_stream_ids({kSyncLabel});
|
||||
EXPECT_TRUE(channel_->AddRecvStream(sp));
|
||||
|
||||
EXPECT_EQ(1, fake_call_->GetVideoReceiveStreams().size());
|
||||
|
||||
@ -1113,7 +1113,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
|
||||
uint32_t local_ssrc,
|
||||
bool use_transport_cc,
|
||||
bool use_nack,
|
||||
const std::vector<std::string>& stream_labels,
|
||||
const std::vector<std::string>& stream_ids,
|
||||
const std::vector<webrtc::RtpExtension>& extensions,
|
||||
webrtc::Call* call,
|
||||
webrtc::Transport* rtcp_send_transport,
|
||||
@ -1131,8 +1131,8 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
|
||||
config_.rtcp_send_transport = rtcp_send_transport;
|
||||
config_.jitter_buffer_max_packets = jitter_buffer_max_packets;
|
||||
config_.jitter_buffer_fast_accelerate = jitter_buffer_fast_accelerate;
|
||||
if (!stream_labels.empty()) {
|
||||
config_.sync_group = stream_labels[0];
|
||||
if (!stream_ids.empty()) {
|
||||
config_.sync_group = stream_ids[0];
|
||||
}
|
||||
config_.decoder_factory = decoder_factory;
|
||||
config_.decoder_map = decoder_map;
|
||||
@ -1173,11 +1173,11 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
|
||||
}
|
||||
|
||||
void MaybeRecreateAudioReceiveStream(
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
|
||||
std::string sync_group;
|
||||
if (!stream_labels.empty()) {
|
||||
sync_group = stream_labels[0];
|
||||
if (!stream_ids.empty()) {
|
||||
sync_group = stream_ids[0];
|
||||
}
|
||||
if (config_.sync_group != sync_group) {
|
||||
RTC_LOG(LS_INFO) << "Recreating AudioReceiveStream for SSRC="
|
||||
@ -1846,9 +1846,9 @@ bool WebRtcVoiceMediaChannel::AddRecvStream(const StreamParams& sp) {
|
||||
}
|
||||
|
||||
// If this stream was previously received unsignaled, we promote it, possibly
|
||||
// recreating the AudioReceiveStream, if stream labels have changed.
|
||||
// recreating the AudioReceiveStream, if stream ids have changed.
|
||||
if (MaybeDeregisterUnsignaledRecvStream(ssrc)) {
|
||||
recv_streams_[ssrc]->MaybeRecreateAudioReceiveStream(sp.stream_labels());
|
||||
recv_streams_[ssrc]->MaybeRecreateAudioReceiveStream(sp.stream_ids());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1861,7 +1861,7 @@ bool WebRtcVoiceMediaChannel::AddRecvStream(const StreamParams& sp) {
|
||||
recv_streams_.insert(std::make_pair(
|
||||
ssrc, new WebRtcAudioReceiveStream(
|
||||
ssrc, receiver_reports_ssrc_, recv_transport_cc_enabled_,
|
||||
recv_nack_enabled_, sp.stream_labels(), recv_rtp_extensions_,
|
||||
recv_nack_enabled_, sp.stream_ids(), recv_rtp_extensions_,
|
||||
call_, this, engine()->decoder_factory_, decoder_map_,
|
||||
engine()->audio_jitter_buffer_max_packets_,
|
||||
engine()->audio_jitter_buffer_fast_accelerate_)));
|
||||
|
||||
@ -2656,7 +2656,7 @@ TEST_F(WebRtcVoiceEngineTestFake, AddRecvStreamAfterUnsignaled_Recreate) {
|
||||
int audio_receive_stream_id = streams.front()->id();
|
||||
cricket::StreamParams stream_params;
|
||||
stream_params.ssrcs.push_back(1);
|
||||
stream_params.set_stream_labels({"sync_label"});
|
||||
stream_params.set_stream_ids({"stream_id"});
|
||||
EXPECT_TRUE(channel_->AddRecvStream(stream_params));
|
||||
EXPECT_EQ(1, streams.size());
|
||||
EXPECT_NE(audio_receive_stream_id, streams.front()->id());
|
||||
@ -3035,13 +3035,13 @@ TEST_F(WebRtcVoiceEngineTestFake, SetOutputVolumeUnsignaledRecvStream) {
|
||||
EXPECT_DOUBLE_EQ(4, GetRecvStream(kSsrcX).gain());
|
||||
}
|
||||
|
||||
TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) {
|
||||
TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromStreamId) {
|
||||
const uint32_t kAudioSsrc = 123;
|
||||
const std::string kSyncLabel = "AvSyncLabel";
|
||||
const std::string kStreamId = "AvSyncLabel";
|
||||
|
||||
EXPECT_TRUE(SetupSendStream());
|
||||
cricket::StreamParams sp = cricket::StreamParams::CreateLegacy(kAudioSsrc);
|
||||
sp.set_stream_labels({kSyncLabel});
|
||||
sp.set_stream_ids({kStreamId});
|
||||
// Creating two channels to make sure that sync label is set properly for both
|
||||
// the default voice channel and following ones.
|
||||
EXPECT_TRUE(channel_->AddRecvStream(sp));
|
||||
@ -3049,12 +3049,12 @@ TEST_F(WebRtcVoiceEngineTestFake, SetsSyncGroupFromSyncLabel) {
|
||||
EXPECT_TRUE(channel_->AddRecvStream(sp));
|
||||
|
||||
ASSERT_EQ(2, call_.GetAudioReceiveStreams().size());
|
||||
EXPECT_EQ(kSyncLabel,
|
||||
EXPECT_EQ(kStreamId,
|
||||
call_.GetAudioReceiveStream(kAudioSsrc)->GetConfig().sync_group)
|
||||
<< "SyncGroup should be set based on sync_label";
|
||||
EXPECT_EQ(kSyncLabel,
|
||||
<< "SyncGroup should be set based on stream id";
|
||||
EXPECT_EQ(kStreamId,
|
||||
call_.GetAudioReceiveStream(kAudioSsrc + 1)->GetConfig().sync_group)
|
||||
<< "SyncGroup should be set based on sync_label";
|
||||
<< "SyncGroup should be set based on stream id";
|
||||
}
|
||||
|
||||
// TODO(solenberg): Remove, once recv streams are configured through Call.
|
||||
|
||||
@ -475,7 +475,7 @@ static bool AddStreamParams(
|
||||
stream_param.cname = rtcp_cname;
|
||||
// TODO(steveanton): Support any number of stream ids.
|
||||
RTC_CHECK(sender.stream_ids.size() == 1U);
|
||||
stream_param.set_stream_labels(sender.stream_ids);
|
||||
stream_param.set_stream_ids(sender.stream_ids);
|
||||
content_description->AddStream(stream_param);
|
||||
|
||||
// Store the new StreamParams in current_streams.
|
||||
@ -487,7 +487,7 @@ static bool AddStreamParams(
|
||||
// MediaStream to another.
|
||||
// TODO(steveanton): Support any number of stream ids.
|
||||
RTC_CHECK(sender.stream_ids.size() == 1U);
|
||||
param->set_stream_labels(sender.stream_ids);
|
||||
param->set_stream_ids(sender.stream_ids);
|
||||
content_description->AddStream(*param);
|
||||
}
|
||||
}
|
||||
|
||||
@ -375,7 +375,7 @@ class MediaSessionDescriptionFactoryTest : public testing::Test {
|
||||
simulcast_params.ssrcs = MAKE_VECTOR(kSimulcastParamsSsrc);
|
||||
simulcast_params.ssrc_groups = ssrc_groups;
|
||||
simulcast_params.cname = "Video_SIM_FEC";
|
||||
simulcast_params.set_stream_labels({kMediaStream1});
|
||||
simulcast_params.set_stream_ids({kMediaStream1});
|
||||
|
||||
StreamParamsVec video_streams;
|
||||
video_streams.push_back(simulcast_params);
|
||||
|
||||
@ -28,14 +28,14 @@ static typename V::iterator FindTrack(V* vector,
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<MediaStream> MediaStream::Create(
|
||||
const std::string& label) {
|
||||
const std::string& id) {
|
||||
rtc::RefCountedObject<MediaStream>* stream =
|
||||
new rtc::RefCountedObject<MediaStream>(label);
|
||||
new rtc::RefCountedObject<MediaStream>(id);
|
||||
return stream;
|
||||
}
|
||||
|
||||
MediaStream::MediaStream(const std::string& label)
|
||||
: label_(label) {
|
||||
MediaStream::MediaStream(const std::string& id)
|
||||
: id_(id) {
|
||||
}
|
||||
|
||||
bool MediaStream::AddTrack(AudioTrackInterface* track) {
|
||||
|
||||
@ -25,7 +25,8 @@ class MediaStream : public Notifier<MediaStreamInterface> {
|
||||
public:
|
||||
static rtc::scoped_refptr<MediaStream> Create(const std::string& label);
|
||||
|
||||
std::string label() const override { return label_; }
|
||||
std::string label() const override { return id_; }
|
||||
std::string id() const override { return id_; }
|
||||
|
||||
bool AddTrack(AudioTrackInterface* track) override;
|
||||
bool AddTrack(VideoTrackInterface* track) override;
|
||||
@ -48,7 +49,7 @@ class MediaStream : public Notifier<MediaStreamInterface> {
|
||||
template <typename TrackVector>
|
||||
bool RemoveTrack(TrackVector* Tracks, MediaStreamTrackInterface* track);
|
||||
|
||||
std::string label_;
|
||||
std::string id_;
|
||||
AudioTrackVector audio_tracks_;
|
||||
VideoTrackVector video_tracks_;
|
||||
};
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
#include "test/gmock.h"
|
||||
#include "test/gtest.h"
|
||||
|
||||
static const char kStreamLabel1[] = "local_stream_1";
|
||||
static const char kStreamId1[] = "local_stream_1";
|
||||
static const char kVideoTrackId[] = "dummy_video_cam_1";
|
||||
static const char kAudioTrackId[] = "dummy_microphone_1";
|
||||
|
||||
@ -53,7 +53,7 @@ class MockObserver : public ObserverInterface {
|
||||
class MediaStreamTest: public testing::Test {
|
||||
protected:
|
||||
virtual void SetUp() {
|
||||
stream_ = MediaStream::Create(kStreamLabel1);
|
||||
stream_ = MediaStream::Create(kStreamId1);
|
||||
ASSERT_TRUE(stream_.get() != NULL);
|
||||
|
||||
video_track_ = VideoTrack::Create(
|
||||
|
||||
@ -93,7 +93,7 @@ const char kEnableBundleFailed[] = "Failed to enable BUNDLE.";
|
||||
|
||||
namespace {
|
||||
|
||||
static const char kDefaultStreamLabel[] = "default";
|
||||
static const char kDefaultStreamId[] = "default";
|
||||
static const char kDefaultAudioSenderId[] = "defaulta0";
|
||||
static const char kDefaultVideoSenderId[] = "defaultv0";
|
||||
|
||||
@ -1068,15 +1068,15 @@ rtc::scoped_refptr<RtpSenderInterface> PeerConnection::AddTrack(
|
||||
MediaStreamTrackInterface* track,
|
||||
std::vector<MediaStreamInterface*> streams) {
|
||||
TRACE_EVENT0("webrtc", "PeerConnection::AddTrack");
|
||||
std::vector<std::string> stream_labels;
|
||||
std::vector<std::string> stream_ids;
|
||||
for (auto* stream : streams) {
|
||||
if (!stream) {
|
||||
RTC_LOG(LS_ERROR) << "Stream list has null element.";
|
||||
return nullptr;
|
||||
}
|
||||
stream_labels.push_back(stream->label());
|
||||
stream_ids.push_back(stream->label());
|
||||
}
|
||||
auto sender_or_error = AddTrack(track, stream_labels);
|
||||
auto sender_or_error = AddTrack(track, stream_ids);
|
||||
if (!sender_or_error.ok()) {
|
||||
return nullptr;
|
||||
}
|
||||
@ -1085,7 +1085,7 @@ rtc::scoped_refptr<RtpSenderInterface> PeerConnection::AddTrack(
|
||||
|
||||
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::AddTrack(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
TRACE_EVENT0("webrtc", "PeerConnection::AddTrack");
|
||||
if (!track) {
|
||||
LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_PARAMETER, "Track is null.");
|
||||
@ -1096,7 +1096,7 @@ RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::AddTrack(
|
||||
"Track has invalid kind: " + track->kind());
|
||||
}
|
||||
// TODO(bugs.webrtc.org/7932): Support adding a track to multiple streams.
|
||||
if (stream_labels.size() > 1u) {
|
||||
if (stream_ids.size() > 1u) {
|
||||
LOG_AND_RETURN_ERROR(
|
||||
RTCErrorType::UNSUPPORTED_OPERATION,
|
||||
"AddTrack with more than one stream is not currently supported.");
|
||||
@ -1113,15 +1113,15 @@ RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::AddTrack(
|
||||
// TODO(bugs.webrtc.org/7933): MediaSession expects the sender to have exactly
|
||||
// one stream. AddTrackInternal will return an error if there is more than one
|
||||
// stream, but if the caller specifies none then we need to generate a random
|
||||
// stream label.
|
||||
std::vector<std::string> adjusted_stream_labels = stream_labels;
|
||||
if (stream_labels.empty()) {
|
||||
adjusted_stream_labels.push_back(rtc::CreateRandomUuid());
|
||||
// stream id.
|
||||
std::vector<std::string> adjusted_stream_ids = stream_ids;
|
||||
if (stream_ids.empty()) {
|
||||
adjusted_stream_ids.push_back(rtc::CreateRandomUuid());
|
||||
}
|
||||
RTC_DCHECK_EQ(1, adjusted_stream_labels.size());
|
||||
RTC_DCHECK_EQ(1, adjusted_stream_ids.size());
|
||||
auto sender_or_error =
|
||||
(IsUnifiedPlan() ? AddTrackUnifiedPlan(track, adjusted_stream_labels)
|
||||
: AddTrackPlanB(track, adjusted_stream_labels));
|
||||
(IsUnifiedPlan() ? AddTrackUnifiedPlan(track, adjusted_stream_ids)
|
||||
: AddTrackPlanB(track, adjusted_stream_ids));
|
||||
if (sender_or_error.ok()) {
|
||||
observer_->OnRenegotiationNeeded();
|
||||
stats_->AddTrack(track);
|
||||
@ -1132,12 +1132,12 @@ RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::AddTrack(
|
||||
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>>
|
||||
PeerConnection::AddTrackPlanB(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
cricket::MediaType media_type =
|
||||
(track->kind() == MediaStreamTrackInterface::kAudioKind
|
||||
? cricket::MEDIA_TYPE_AUDIO
|
||||
: cricket::MEDIA_TYPE_VIDEO);
|
||||
auto new_sender = CreateSender(media_type, track, stream_labels);
|
||||
auto new_sender = CreateSender(media_type, track, stream_ids);
|
||||
if (track->kind() == MediaStreamTrackInterface::kAudioKind) {
|
||||
new_sender->internal()->SetVoiceMediaChannel(voice_media_channel());
|
||||
GetAudioTransceiver()->internal()->AddSender(new_sender);
|
||||
@ -1164,7 +1164,7 @@ PeerConnection::AddTrackPlanB(
|
||||
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>>
|
||||
PeerConnection::AddTrackUnifiedPlan(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
auto transceiver = FindFirstTransceiverForAddedTrack(track);
|
||||
if (transceiver) {
|
||||
if (transceiver->direction() == RtpTransceiverDirection::kRecvOnly) {
|
||||
@ -1175,13 +1175,13 @@ PeerConnection::AddTrackUnifiedPlan(
|
||||
RtpTransceiverDirection::kSendOnly);
|
||||
}
|
||||
transceiver->sender()->SetTrack(track);
|
||||
transceiver->internal()->sender_internal()->set_stream_ids(stream_labels);
|
||||
transceiver->internal()->sender_internal()->set_stream_ids(stream_ids);
|
||||
} else {
|
||||
cricket::MediaType media_type =
|
||||
(track->kind() == MediaStreamTrackInterface::kAudioKind
|
||||
? cricket::MEDIA_TYPE_AUDIO
|
||||
: cricket::MEDIA_TYPE_VIDEO);
|
||||
auto sender = CreateSender(media_type, track, stream_labels);
|
||||
auto sender = CreateSender(media_type, track, stream_ids);
|
||||
auto receiver = CreateReceiver(media_type, rtc::CreateRandomUuid());
|
||||
transceiver = CreateAndAddTransceiver(sender, receiver);
|
||||
transceiver->internal()->set_created_by_addtrack(true);
|
||||
@ -1329,11 +1329,11 @@ PeerConnection::AddTransceiver(
|
||||
"More than one stream is not yet supported.");
|
||||
}
|
||||
|
||||
std::vector<std::string> stream_labels = {!init.stream_labels.empty()
|
||||
? init.stream_labels[0]
|
||||
: rtc::CreateRandomUuid()};
|
||||
std::vector<std::string> stream_ids = {!init.stream_labels.empty()
|
||||
? init.stream_labels[0]
|
||||
: rtc::CreateRandomUuid()};
|
||||
|
||||
auto sender = CreateSender(media_type, track, stream_labels);
|
||||
auto sender = CreateSender(media_type, track, stream_ids);
|
||||
auto receiver = CreateReceiver(media_type, rtc::CreateRandomUuid());
|
||||
auto transceiver = CreateAndAddTransceiver(sender, receiver);
|
||||
transceiver->internal()->set_direction(init.direction);
|
||||
@ -1349,7 +1349,7 @@ rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>>
|
||||
PeerConnection::CreateSender(
|
||||
cricket::MediaType media_type,
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> sender;
|
||||
if (media_type == cricket::MEDIA_TYPE_AUDIO) {
|
||||
RTC_DCHECK(!track ||
|
||||
@ -1358,7 +1358,7 @@ PeerConnection::CreateSender(
|
||||
signaling_thread(),
|
||||
new AudioRtpSender(worker_thread(),
|
||||
static_cast<AudioTrackInterface*>(track.get()),
|
||||
stream_labels, stats_.get()));
|
||||
stream_ids, stats_.get()));
|
||||
} else {
|
||||
RTC_DCHECK_EQ(media_type, cricket::MEDIA_TYPE_VIDEO);
|
||||
RTC_DCHECK(!track ||
|
||||
@ -1367,9 +1367,9 @@ PeerConnection::CreateSender(
|
||||
signaling_thread(),
|
||||
new VideoRtpSender(worker_thread(),
|
||||
static_cast<VideoTrackInterface*>(track.get()),
|
||||
stream_labels));
|
||||
stream_ids));
|
||||
}
|
||||
sender->internal()->set_stream_ids(stream_labels);
|
||||
sender->internal()->set_stream_ids(stream_ids);
|
||||
return sender;
|
||||
}
|
||||
|
||||
@ -1440,23 +1440,23 @@ rtc::scoped_refptr<RtpSenderInterface> PeerConnection::CreateSender(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::vector<std::string> stream_labels;
|
||||
std::vector<std::string> stream_ids;
|
||||
if (!stream_id.empty()) {
|
||||
stream_labels.push_back(stream_id);
|
||||
stream_ids.push_back(stream_id);
|
||||
}
|
||||
|
||||
// TODO(steveanton): Move construction of the RtpSenders to RtpTransceiver.
|
||||
rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> new_sender;
|
||||
if (kind == MediaStreamTrackInterface::kAudioKind) {
|
||||
auto* audio_sender = new AudioRtpSender(worker_thread(), nullptr,
|
||||
stream_labels, stats_.get());
|
||||
auto* audio_sender =
|
||||
new AudioRtpSender(worker_thread(), nullptr, stream_ids, stats_.get());
|
||||
audio_sender->SetVoiceMediaChannel(voice_media_channel());
|
||||
new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
|
||||
signaling_thread(), audio_sender);
|
||||
GetAudioTransceiver()->internal()->AddSender(new_sender);
|
||||
} else if (kind == MediaStreamTrackInterface::kVideoKind) {
|
||||
auto* video_sender =
|
||||
new VideoRtpSender(worker_thread(), nullptr, stream_labels);
|
||||
new VideoRtpSender(worker_thread(), nullptr, stream_ids);
|
||||
video_sender->SetVideoMediaChannel(video_media_channel());
|
||||
new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
|
||||
signaling_thread(), video_sender);
|
||||
@ -1963,7 +1963,7 @@ RTCError PeerConnection::ApplyLocalDescription(
|
||||
const auto& streams = content->media_description()->streams();
|
||||
if (!content->rejected && !streams.empty()) {
|
||||
transceiver->internal()->sender_internal()->set_stream_ids(
|
||||
streams[0].stream_labels());
|
||||
streams[0].stream_ids());
|
||||
transceiver->internal()->sender_internal()->SetSsrc(
|
||||
streams[0].first_ssrc());
|
||||
}
|
||||
@ -2231,8 +2231,8 @@ RTCError PeerConnection::ApplyRemoteDescription(
|
||||
std::string sync_label = rtc::CreateRandomUuid();
|
||||
if (!media_desc->streams().empty()) {
|
||||
const cricket::StreamParams& stream_params = media_desc->streams()[0];
|
||||
if (!stream_params.stream_labels().empty()) {
|
||||
sync_label = stream_params.stream_labels()[0];
|
||||
if (!stream_params.stream_ids().empty()) {
|
||||
sync_label = stream_params.stream_ids()[0];
|
||||
}
|
||||
}
|
||||
if (RtpTransceiverDirectionHasRecv(local_direction) &&
|
||||
@ -3857,7 +3857,7 @@ void PeerConnection::UpdateRemoteSendersList(
|
||||
cricket::GetStreamBySsrc(streams, info.first_ssrc);
|
||||
bool sender_exists = params && params->id == info.sender_id;
|
||||
// If this is a default track, and we still need it, don't remove it.
|
||||
if ((info.stream_label == kDefaultStreamLabel && default_sender_needed) ||
|
||||
if ((info.stream_id == kDefaultStreamId && default_sender_needed) ||
|
||||
sender_exists) {
|
||||
++sender_it;
|
||||
} else {
|
||||
@ -3868,28 +3868,28 @@ void PeerConnection::UpdateRemoteSendersList(
|
||||
|
||||
// Find new and active senders.
|
||||
for (const cricket::StreamParams& params : streams) {
|
||||
// The sync_label is the MediaStream label and the |stream.id| is the
|
||||
// sender id.
|
||||
// TODO(bugs.webrtc.org/7932): Add support for multiple stream labels.
|
||||
const std::string& stream_label =
|
||||
(!params.stream_labels().empty() ? params.stream_labels()[0] : "");
|
||||
// |params.id| is the sender id and the stream id uses the first of
|
||||
// |params.stream_ids|.
|
||||
// TODO(bugs.webrtc.org/7932): Add support for multiple stream ids.
|
||||
const std::string& stream_id =
|
||||
(!params.stream_ids().empty() ? params.stream_ids()[0] : "");
|
||||
const std::string& sender_id = params.id;
|
||||
uint32_t ssrc = params.first_ssrc();
|
||||
|
||||
rtc::scoped_refptr<MediaStreamInterface> stream =
|
||||
remote_streams_->find(stream_label);
|
||||
remote_streams_->find(stream_id);
|
||||
if (!stream) {
|
||||
// This is a new MediaStream. Create a new remote MediaStream.
|
||||
stream = MediaStreamProxy::Create(rtc::Thread::Current(),
|
||||
MediaStream::Create(stream_label));
|
||||
MediaStream::Create(stream_id));
|
||||
remote_streams_->AddStream(stream);
|
||||
new_streams->AddStream(stream);
|
||||
}
|
||||
|
||||
const RtpSenderInfo* sender_info =
|
||||
FindSenderInfo(*current_senders, stream_label, sender_id);
|
||||
FindSenderInfo(*current_senders, stream_id, sender_id);
|
||||
if (!sender_info) {
|
||||
current_senders->push_back(RtpSenderInfo(stream_label, sender_id, ssrc));
|
||||
current_senders->push_back(RtpSenderInfo(stream_id, sender_id, ssrc));
|
||||
OnRemoteSenderAdded(current_senders->back(), media_type);
|
||||
}
|
||||
}
|
||||
@ -3897,22 +3897,22 @@ void PeerConnection::UpdateRemoteSendersList(
|
||||
// Add default sender if necessary.
|
||||
if (default_sender_needed) {
|
||||
rtc::scoped_refptr<MediaStreamInterface> default_stream =
|
||||
remote_streams_->find(kDefaultStreamLabel);
|
||||
remote_streams_->find(kDefaultStreamId);
|
||||
if (!default_stream) {
|
||||
// Create the new default MediaStream.
|
||||
default_stream = MediaStreamProxy::Create(
|
||||
rtc::Thread::Current(), MediaStream::Create(kDefaultStreamLabel));
|
||||
rtc::Thread::Current(), MediaStream::Create(kDefaultStreamId));
|
||||
remote_streams_->AddStream(default_stream);
|
||||
new_streams->AddStream(default_stream);
|
||||
}
|
||||
std::string default_sender_id = (media_type == cricket::MEDIA_TYPE_AUDIO)
|
||||
? kDefaultAudioSenderId
|
||||
: kDefaultVideoSenderId;
|
||||
const RtpSenderInfo* default_sender_info = FindSenderInfo(
|
||||
*current_senders, kDefaultStreamLabel, default_sender_id);
|
||||
const RtpSenderInfo* default_sender_info =
|
||||
FindSenderInfo(*current_senders, kDefaultStreamId, default_sender_id);
|
||||
if (!default_sender_info) {
|
||||
current_senders->push_back(
|
||||
RtpSenderInfo(kDefaultStreamLabel, default_sender_id, 0));
|
||||
RtpSenderInfo(kDefaultStreamId, default_sender_id, 0));
|
||||
OnRemoteSenderAdded(current_senders->back(), media_type);
|
||||
}
|
||||
}
|
||||
@ -3920,8 +3920,7 @@ void PeerConnection::UpdateRemoteSendersList(
|
||||
|
||||
void PeerConnection::OnRemoteSenderAdded(const RtpSenderInfo& sender_info,
|
||||
cricket::MediaType media_type) {
|
||||
MediaStreamInterface* stream =
|
||||
remote_streams_->find(sender_info.stream_label);
|
||||
MediaStreamInterface* stream = remote_streams_->find(sender_info.stream_id);
|
||||
|
||||
if (media_type == cricket::MEDIA_TYPE_AUDIO) {
|
||||
CreateAudioReceiver(stream, sender_info);
|
||||
@ -3934,8 +3933,7 @@ void PeerConnection::OnRemoteSenderAdded(const RtpSenderInfo& sender_info,
|
||||
|
||||
void PeerConnection::OnRemoteSenderRemoved(const RtpSenderInfo& sender_info,
|
||||
cricket::MediaType media_type) {
|
||||
MediaStreamInterface* stream =
|
||||
remote_streams_->find(sender_info.stream_label);
|
||||
MediaStreamInterface* stream = remote_streams_->find(sender_info.stream_id);
|
||||
|
||||
rtc::scoped_refptr<RtpReceiverInterface> receiver;
|
||||
if (media_type == cricket::MEDIA_TYPE_AUDIO) {
|
||||
@ -3986,7 +3984,7 @@ void PeerConnection::UpdateLocalSenders(
|
||||
cricket::MediaType media_type) {
|
||||
std::vector<RtpSenderInfo>* current_senders = GetLocalSenderInfos(media_type);
|
||||
|
||||
// Find removed tracks. I.e., tracks where the track id, stream label or ssrc
|
||||
// Find removed tracks. I.e., tracks where the track id, stream id or ssrc
|
||||
// don't match the new StreamParam.
|
||||
for (auto sender_it = current_senders->begin();
|
||||
sender_it != current_senders->end();
|
||||
@ -3995,7 +3993,7 @@ void PeerConnection::UpdateLocalSenders(
|
||||
const cricket::StreamParams* params =
|
||||
cricket::GetStreamBySsrc(streams, info.first_ssrc);
|
||||
if (!params || params->id != info.sender_id ||
|
||||
params->first_stream_label() != info.stream_label) {
|
||||
params->first_stream_id() != info.stream_id) {
|
||||
OnLocalSenderRemoved(info, media_type);
|
||||
sender_it = current_senders->erase(sender_it);
|
||||
} else {
|
||||
@ -4007,13 +4005,13 @@ void PeerConnection::UpdateLocalSenders(
|
||||
for (const cricket::StreamParams& params : streams) {
|
||||
// The sync_label is the MediaStream label and the |stream.id| is the
|
||||
// sender id.
|
||||
const std::string& stream_label = params.first_stream_label();
|
||||
const std::string& stream_id = params.first_stream_id();
|
||||
const std::string& sender_id = params.id;
|
||||
uint32_t ssrc = params.first_ssrc();
|
||||
const RtpSenderInfo* sender_info =
|
||||
FindSenderInfo(*current_senders, stream_label, sender_id);
|
||||
FindSenderInfo(*current_senders, stream_id, sender_id);
|
||||
if (!sender_info) {
|
||||
current_senders->push_back(RtpSenderInfo(stream_label, sender_id, ssrc));
|
||||
current_senders->push_back(RtpSenderInfo(stream_id, sender_id, ssrc));
|
||||
OnLocalSenderAdded(current_senders->back(), media_type);
|
||||
}
|
||||
}
|
||||
@ -4035,7 +4033,7 @@ void PeerConnection::OnLocalSenderAdded(const RtpSenderInfo& sender_info,
|
||||
return;
|
||||
}
|
||||
|
||||
sender->internal()->set_stream_id(sender_info.stream_label);
|
||||
sender->internal()->set_stream_id(sender_info.stream_id);
|
||||
sender->internal()->SetSsrc(sender_info.first_ssrc);
|
||||
}
|
||||
|
||||
@ -4071,7 +4069,7 @@ void PeerConnection::UpdateLocalRtpDataChannels(
|
||||
// MediaStreams and Tracks.
|
||||
// For MediaStreams, the sync_label is the MediaStream label and the
|
||||
// track label is the same as |streamid|.
|
||||
const std::string& channel_label = params.first_stream_label();
|
||||
const std::string& channel_label = params.first_stream_id();
|
||||
auto data_channel_it = rtp_data_channels_.find(channel_label);
|
||||
if (data_channel_it == rtp_data_channels_.end()) {
|
||||
RTC_LOG(LS_ERROR) << "channel label not found";
|
||||
@ -4093,9 +4091,9 @@ void PeerConnection::UpdateRemoteRtpDataChannels(
|
||||
for (const cricket::StreamParams& params : streams) {
|
||||
// The data channel label is either the mslabel or the SSRC if the mslabel
|
||||
// does not exist. Ex a=ssrc:444330170 mslabel:test1.
|
||||
std::string label = params.first_stream_label().empty()
|
||||
std::string label = params.first_stream_id().empty()
|
||||
? rtc::ToString(params.first_ssrc())
|
||||
: params.first_stream_label();
|
||||
: params.first_stream_id();
|
||||
auto data_channel_it = rtp_data_channels_.find(label);
|
||||
if (data_channel_it == rtp_data_channels_.end()) {
|
||||
// This is a new data channel.
|
||||
@ -4370,10 +4368,10 @@ std::vector<PeerConnection::RtpSenderInfo>* PeerConnection::GetLocalSenderInfos(
|
||||
|
||||
const PeerConnection::RtpSenderInfo* PeerConnection::FindSenderInfo(
|
||||
const std::vector<PeerConnection::RtpSenderInfo>& infos,
|
||||
const std::string& stream_label,
|
||||
const std::string& stream_id,
|
||||
const std::string sender_id) const {
|
||||
for (const RtpSenderInfo& sender_info : infos) {
|
||||
if (sender_info.stream_label == stream_label &&
|
||||
if (sender_info.stream_id == stream_id &&
|
||||
sender_info.sender_id == sender_id) {
|
||||
return &sender_info;
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ class PeerConnection : public PeerConnectionInternal,
|
||||
|
||||
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> AddTrack(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels) override;
|
||||
const std::vector<std::string>& stream_ids) override;
|
||||
rtc::scoped_refptr<RtpSenderInterface> AddTrack(
|
||||
MediaStreamTrackInterface* track,
|
||||
std::vector<MediaStreamInterface*> streams) override;
|
||||
@ -257,16 +257,16 @@ class PeerConnection : public PeerConnectionInternal,
|
||||
|
||||
struct RtpSenderInfo {
|
||||
RtpSenderInfo() : first_ssrc(0) {}
|
||||
RtpSenderInfo(const std::string& stream_label,
|
||||
RtpSenderInfo(const std::string& stream_id,
|
||||
const std::string sender_id,
|
||||
uint32_t ssrc)
|
||||
: stream_label(stream_label), sender_id(sender_id), first_ssrc(ssrc) {}
|
||||
: stream_id(stream_id), sender_id(sender_id), first_ssrc(ssrc) {}
|
||||
bool operator==(const RtpSenderInfo& other) {
|
||||
return this->stream_label == other.stream_label &&
|
||||
return this->stream_id == other.stream_id &&
|
||||
this->sender_id == other.sender_id &&
|
||||
this->first_ssrc == other.first_ssrc;
|
||||
}
|
||||
std::string stream_label;
|
||||
std::string stream_id;
|
||||
std::string sender_id;
|
||||
// An RtpSender can have many SSRCs. The first one is used as a sort of ID
|
||||
// for communicating with the lower layers.
|
||||
@ -315,11 +315,11 @@ class PeerConnection : public PeerConnectionInternal,
|
||||
// AddTrack implementation when Unified Plan is specified.
|
||||
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> AddTrackUnifiedPlan(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels);
|
||||
const std::vector<std::string>& stream_ids);
|
||||
// AddTrack implementation when Plan B is specified.
|
||||
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> AddTrackPlanB(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels);
|
||||
const std::vector<std::string>& stream_ids);
|
||||
|
||||
// Returns the first RtpTransceiver suitable for a newly added track, if such
|
||||
// transceiver is available.
|
||||
@ -344,7 +344,7 @@ class PeerConnection : public PeerConnectionInternal,
|
||||
rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>>
|
||||
CreateSender(cricket::MediaType media_type,
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels);
|
||||
const std::vector<std::string>& stream_ids);
|
||||
|
||||
rtc::scoped_refptr<RtpReceiverProxyWithInternal<RtpReceiverInternal>>
|
||||
CreateReceiver(cricket::MediaType media_type, const std::string& receiver_id);
|
||||
@ -627,7 +627,7 @@ class PeerConnection : public PeerConnectionInternal,
|
||||
std::vector<RtpSenderInfo>* GetLocalSenderInfos(
|
||||
cricket::MediaType media_type);
|
||||
const RtpSenderInfo* FindSenderInfo(const std::vector<RtpSenderInfo>& infos,
|
||||
const std::string& stream_label,
|
||||
const std::string& stream_id,
|
||||
const std::string sender_id) const;
|
||||
|
||||
// Returns the specified SCTP DataChannel in sctp_data_channels_,
|
||||
|
||||
@ -313,8 +313,8 @@ class PeerConnectionWrapper : public webrtc::PeerConnectionObserver,
|
||||
|
||||
rtc::scoped_refptr<RtpSenderInterface> AddTrack(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels = {}) {
|
||||
auto result = pc()->AddTrack(track, stream_labels);
|
||||
const std::vector<std::string>& stream_ids = {}) {
|
||||
auto result = pc()->AddTrack(track, stream_ids);
|
||||
EXPECT_EQ(RTCErrorType::NONE, result.error().type());
|
||||
return result.MoveValue();
|
||||
}
|
||||
|
||||
@ -1174,11 +1174,11 @@ TEST_F(PeerConnectionJsepTest,
|
||||
TEST_F(PeerConnectionJsepTest,
|
||||
SetRemoteOfferWithOneTrackOneStreamFiresOnAddTrack) {
|
||||
const std::string kTrackLabel = "audio_track";
|
||||
const std::string kStreamLabel = "audio_stream";
|
||||
const std::string kStreamId = "audio_stream";
|
||||
|
||||
auto caller = CreatePeerConnection();
|
||||
auto callee = CreatePeerConnection();
|
||||
ASSERT_TRUE(caller->AddAudioTrack(kTrackLabel, {kStreamLabel}));
|
||||
ASSERT_TRUE(caller->AddAudioTrack(kTrackLabel, {kStreamId}));
|
||||
|
||||
ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
|
||||
|
||||
@ -1187,7 +1187,7 @@ TEST_F(PeerConnectionJsepTest,
|
||||
const auto& event = track_events[0];
|
||||
ASSERT_EQ(1u, event.streams.size());
|
||||
auto stream = event.streams[0];
|
||||
EXPECT_EQ(kStreamLabel, stream->label());
|
||||
EXPECT_EQ(kStreamId, stream->label());
|
||||
EXPECT_THAT(track_events[0].snapshotted_stream_tracks.at(stream),
|
||||
ElementsAre(event.receiver->track()));
|
||||
EXPECT_EQ(event.receiver->streams(), track_events[0].streams);
|
||||
@ -1202,12 +1202,12 @@ TEST_F(PeerConnectionJsepTest,
|
||||
SetRemoteOfferWithTwoTracksSameStreamFiresOnAddTrack) {
|
||||
const std::string kTrack1Label = "audio_track1";
|
||||
const std::string kTrack2Label = "audio_track2";
|
||||
const std::string kSharedStreamLabel = "stream";
|
||||
const std::string kSharedStreamId = "stream";
|
||||
|
||||
auto caller = CreatePeerConnection();
|
||||
auto callee = CreatePeerConnection();
|
||||
ASSERT_TRUE(caller->AddAudioTrack(kTrack1Label, {kSharedStreamLabel}));
|
||||
ASSERT_TRUE(caller->AddAudioTrack(kTrack2Label, {kSharedStreamLabel}));
|
||||
ASSERT_TRUE(caller->AddAudioTrack(kTrack1Label, {kSharedStreamId}));
|
||||
ASSERT_TRUE(caller->AddAudioTrack(kTrack2Label, {kSharedStreamId}));
|
||||
|
||||
ASSERT_TRUE(callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal()));
|
||||
|
||||
|
||||
@ -187,11 +187,11 @@ TEST_F(PeerConnectionRtpCallbacksTest,
|
||||
auto caller = CreatePeerConnection();
|
||||
auto callee = CreatePeerConnection();
|
||||
|
||||
const char kSharedStreamLabel[] = "shared_audio_stream";
|
||||
const char kSharedStreamId[] = "shared_audio_stream";
|
||||
auto sender1 = caller->AddTrack(caller->CreateAudioTrack("audio_track1"),
|
||||
{kSharedStreamLabel});
|
||||
{kSharedStreamId});
|
||||
auto sender2 = caller->AddTrack(caller->CreateAudioTrack("audio_track2"),
|
||||
{kSharedStreamLabel});
|
||||
{kSharedStreamId});
|
||||
ASSERT_TRUE(
|
||||
callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal(),
|
||||
static_cast<webrtc::RTCError*>(nullptr)));
|
||||
@ -408,11 +408,11 @@ TEST_F(PeerConnectionRtpObserverTest,
|
||||
auto caller = CreatePeerConnection();
|
||||
auto callee = CreatePeerConnection();
|
||||
|
||||
const char kSharedStreamLabel[] = "shared_audio_stream";
|
||||
const char kSharedStreamId[] = "shared_audio_stream";
|
||||
auto sender1 = caller->AddTrack(caller->CreateAudioTrack("audio_track1"),
|
||||
{kSharedStreamLabel});
|
||||
{kSharedStreamId});
|
||||
auto sender2 = caller->AddTrack(caller->CreateAudioTrack("audio_track2"),
|
||||
{kSharedStreamLabel});
|
||||
{kSharedStreamId});
|
||||
ASSERT_TRUE(
|
||||
callee->SetRemoteDescription(caller->CreateOfferAndSetAsLocal(),
|
||||
static_cast<webrtc::RTCError*>(nullptr)));
|
||||
|
||||
@ -302,10 +302,10 @@ PeerConnectionFactory::CreatePeerConnection(
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<MediaStreamInterface>
|
||||
PeerConnectionFactory::CreateLocalMediaStream(const std::string& label) {
|
||||
PeerConnectionFactory::CreateLocalMediaStream(const std::string& stream_id) {
|
||||
RTC_DCHECK(signaling_thread_->IsCurrent());
|
||||
return MediaStreamProxy::Create(signaling_thread_,
|
||||
MediaStream::Create(label));
|
||||
MediaStream::Create(stream_id));
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<VideoTrackInterface> PeerConnectionFactory::CreateVideoTrack(
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
|
||||
/*
|
||||
* Copyright 2011 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
@ -57,8 +58,8 @@ class PeerConnectionFactory : public PeerConnectionFactoryInterface {
|
||||
|
||||
bool Initialize();
|
||||
|
||||
rtc::scoped_refptr<MediaStreamInterface>
|
||||
CreateLocalMediaStream(const std::string& label) override;
|
||||
rtc::scoped_refptr<MediaStreamInterface> CreateLocalMediaStream(
|
||||
const std::string& stream_id) override;
|
||||
|
||||
rtc::scoped_refptr<AudioSourceInterface> CreateAudioSource(
|
||||
const cricket::AudioOptions& options) override;
|
||||
|
||||
@ -52,9 +52,9 @@
|
||||
#include "pc/test/androidtestinitializer.h"
|
||||
#endif
|
||||
|
||||
static const char kStreamLabel1[] = "local_stream_1";
|
||||
static const char kStreamLabel2[] = "local_stream_2";
|
||||
static const char kStreamLabel3[] = "local_stream_3";
|
||||
static const char kStreamId1[] = "local_stream_1";
|
||||
static const char kStreamId2[] = "local_stream_2";
|
||||
static const char kStreamId3[] = "local_stream_3";
|
||||
static const int kDefaultStunPort = 3478;
|
||||
static const char kStunAddressOnly[] = "stun:address";
|
||||
static const char kStunInvalidPort[] = "stun:address:-1";
|
||||
@ -492,10 +492,10 @@ void SetSsrcToZero(std::string* sdp) {
|
||||
|
||||
// Check if |streams| contains the specified track.
|
||||
bool ContainsTrack(const std::vector<cricket::StreamParams>& streams,
|
||||
const std::string& stream_label,
|
||||
const std::string& stream_id,
|
||||
const std::string& track_id) {
|
||||
for (const cricket::StreamParams& params : streams) {
|
||||
if (params.first_stream_label() == stream_label && params.id == track_id) {
|
||||
if (params.first_stream_id() == stream_id && params.id == track_id) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -832,9 +832,9 @@ class PeerConnectionInterfaceBaseTest : public testing::Test {
|
||||
}
|
||||
|
||||
void AddVideoTrack(const std::string& track_label,
|
||||
const std::vector<std::string>& stream_labels = {}) {
|
||||
const std::vector<std::string>& stream_ids = {}) {
|
||||
auto sender_or_error =
|
||||
pc_->AddTrack(CreateVideoTrack(track_label), stream_labels);
|
||||
pc_->AddTrack(CreateVideoTrack(track_label), stream_ids);
|
||||
ASSERT_EQ(RTCErrorType::NONE, sender_or_error.error().type());
|
||||
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
|
||||
observer_.renegotiation_needed_ = false;
|
||||
@ -855,9 +855,9 @@ class PeerConnectionInterfaceBaseTest : public testing::Test {
|
||||
}
|
||||
|
||||
void AddAudioTrack(const std::string& track_label,
|
||||
const std::vector<std::string>& stream_labels = {}) {
|
||||
const std::vector<std::string>& stream_ids = {}) {
|
||||
auto sender_or_error =
|
||||
pc_->AddTrack(CreateAudioTrack(track_label), stream_labels);
|
||||
pc_->AddTrack(CreateAudioTrack(track_label), stream_ids);
|
||||
ASSERT_EQ(RTCErrorType::NONE, sender_or_error.error().type());
|
||||
EXPECT_TRUE_WAIT(observer_.renegotiation_needed_, kTimeout);
|
||||
observer_.renegotiation_needed_ = false;
|
||||
@ -872,12 +872,12 @@ class PeerConnectionInterfaceBaseTest : public testing::Test {
|
||||
observer_.renegotiation_needed_ = false;
|
||||
}
|
||||
|
||||
void AddAudioVideoStream(const std::string& stream_label,
|
||||
void AddAudioVideoStream(const std::string& stream_id,
|
||||
const std::string& audio_track_label,
|
||||
const std::string& video_track_label) {
|
||||
// Create a local stream.
|
||||
rtc::scoped_refptr<MediaStreamInterface> stream(
|
||||
pc_factory_->CreateLocalMediaStream(stream_label));
|
||||
pc_factory_->CreateLocalMediaStream(stream_id));
|
||||
stream->AddTrack(CreateAudioTrack(audio_track_label));
|
||||
stream->AddTrack(CreateVideoTrack(video_track_label));
|
||||
ASSERT_TRUE(pc_->AddStream(stream));
|
||||
@ -974,12 +974,12 @@ class PeerConnectionInterfaceBaseTest : public testing::Test {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
// Create a local stream with audio&video tracks.
|
||||
if (sdp_semantics_ == SdpSemantics::kPlanB) {
|
||||
AddAudioVideoStream(kStreamLabel1, "audio_track", "video_track");
|
||||
AddAudioVideoStream(kStreamId1, "audio_track", "video_track");
|
||||
} else {
|
||||
// Unified Plan does not support AddStream, so just add an audio and video
|
||||
// track.
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamLabel1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamLabel1});
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamId1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamId1});
|
||||
}
|
||||
CreateOfferReceiveAnswer();
|
||||
}
|
||||
@ -1096,16 +1096,15 @@ class PeerConnectionInterfaceBaseTest : public testing::Test {
|
||||
EXPECT_EQ(PeerConnectionInterface::kStable, observer_.state_);
|
||||
}
|
||||
|
||||
// Waits until a remote stream with the given label is signaled. This helper
|
||||
// Waits until a remote stream with the given id is signaled. This helper
|
||||
// function will verify both OnAddTrack and OnAddStream (Plan B only) are
|
||||
// called with the given stream label and expected number of tracks.
|
||||
void WaitAndVerifyOnAddStream(const std::string& stream_label,
|
||||
// called with the given stream id and expected number of tracks.
|
||||
void WaitAndVerifyOnAddStream(const std::string& stream_id,
|
||||
int expected_num_tracks) {
|
||||
// Verify that both OnAddStream and OnAddTrack are called.
|
||||
EXPECT_EQ_WAIT(stream_label, observer_.GetLastAddedStreamLabel(), kTimeout);
|
||||
EXPECT_EQ_WAIT(stream_id, observer_.GetLastAddedStreamId(), kTimeout);
|
||||
EXPECT_EQ_WAIT(expected_num_tracks,
|
||||
observer_.CountAddTrackEventsForStream(stream_label),
|
||||
kTimeout);
|
||||
observer_.CountAddTrackEventsForStream(stream_id), kTimeout);
|
||||
}
|
||||
|
||||
// Creates an offer and applies it as a local session description.
|
||||
@ -1133,10 +1132,10 @@ class PeerConnectionInterfaceBaseTest : public testing::Test {
|
||||
reference_collection_ = StreamCollection::Create();
|
||||
std::string sdp_ms1 = std::string(kSdpStringInit);
|
||||
|
||||
std::string mediastream_label = kStreams[0];
|
||||
std::string mediastream_id = kStreams[0];
|
||||
|
||||
rtc::scoped_refptr<webrtc::MediaStreamInterface> stream(
|
||||
webrtc::MediaStream::Create(mediastream_label));
|
||||
webrtc::MediaStream::Create(mediastream_id));
|
||||
reference_collection_->AddStream(stream);
|
||||
|
||||
if (number_of_audio_tracks > 0) {
|
||||
@ -1189,7 +1188,7 @@ class PeerConnectionInterfaceBaseTest : public testing::Test {
|
||||
|
||||
std::unique_ptr<SessionDescriptionInterface> CreateOfferWithOneAudioStream() {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddAudioStream(kStreamLabel1);
|
||||
AddAudioStream(kStreamId1);
|
||||
std::unique_ptr<SessionDescriptionInterface> offer;
|
||||
EXPECT_TRUE(DoCreateOffer(&offer, nullptr));
|
||||
return offer;
|
||||
@ -1479,15 +1478,15 @@ TEST_P(PeerConnectionInterfaceTest, GetConfigurationAfterSetConfiguration) {
|
||||
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, AddStreams) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddVideoStream(kStreamLabel1);
|
||||
AddAudioStream(kStreamLabel2);
|
||||
AddVideoStream(kStreamId1);
|
||||
AddAudioStream(kStreamId2);
|
||||
ASSERT_EQ(2u, pc_->local_streams()->count());
|
||||
|
||||
// Test we can add multiple local streams to one peerconnection.
|
||||
rtc::scoped_refptr<MediaStreamInterface> stream(
|
||||
pc_factory_->CreateLocalMediaStream(kStreamLabel3));
|
||||
pc_factory_->CreateLocalMediaStream(kStreamId3));
|
||||
rtc::scoped_refptr<AudioTrackInterface> audio_track(
|
||||
pc_factory_->CreateAudioTrack(kStreamLabel3,
|
||||
pc_factory_->CreateAudioTrack(kStreamId3,
|
||||
static_cast<AudioSourceInterface*>(NULL)));
|
||||
stream->AddTrack(audio_track.get());
|
||||
EXPECT_TRUE(pc_->AddStream(stream));
|
||||
@ -1510,42 +1509,36 @@ TEST_F(PeerConnectionInterfaceTestPlanB, AddStreams) {
|
||||
// Don't run under Unified Plan since the stream API is not available.
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, AddedStreamsPresentInOffer) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddAudioVideoStream(kStreamLabel1, "audio_track", "video_track");
|
||||
AddAudioVideoStream(kStreamId1, "audio_track", "video_track");
|
||||
std::unique_ptr<SessionDescriptionInterface> offer;
|
||||
ASSERT_TRUE(DoCreateOffer(&offer, nullptr));
|
||||
|
||||
const cricket::AudioContentDescription* audio_desc =
|
||||
cricket::GetFirstAudioContentDescription(offer->description());
|
||||
EXPECT_TRUE(
|
||||
ContainsTrack(audio_desc->streams(), kStreamLabel1, "audio_track"));
|
||||
EXPECT_TRUE(ContainsTrack(audio_desc->streams(), kStreamId1, "audio_track"));
|
||||
|
||||
const cricket::VideoContentDescription* video_desc =
|
||||
cricket::GetFirstVideoContentDescription(offer->description());
|
||||
EXPECT_TRUE(
|
||||
ContainsTrack(video_desc->streams(), kStreamLabel1, "video_track"));
|
||||
EXPECT_TRUE(ContainsTrack(video_desc->streams(), kStreamId1, "video_track"));
|
||||
|
||||
// Add another stream and ensure the offer includes both the old and new
|
||||
// streams.
|
||||
AddAudioVideoStream(kStreamLabel2, "audio_track2", "video_track2");
|
||||
AddAudioVideoStream(kStreamId2, "audio_track2", "video_track2");
|
||||
ASSERT_TRUE(DoCreateOffer(&offer, nullptr));
|
||||
|
||||
audio_desc = cricket::GetFirstAudioContentDescription(offer->description());
|
||||
EXPECT_TRUE(
|
||||
ContainsTrack(audio_desc->streams(), kStreamLabel1, "audio_track"));
|
||||
EXPECT_TRUE(
|
||||
ContainsTrack(audio_desc->streams(), kStreamLabel2, "audio_track2"));
|
||||
EXPECT_TRUE(ContainsTrack(audio_desc->streams(), kStreamId1, "audio_track"));
|
||||
EXPECT_TRUE(ContainsTrack(audio_desc->streams(), kStreamId2, "audio_track2"));
|
||||
|
||||
video_desc = cricket::GetFirstVideoContentDescription(offer->description());
|
||||
EXPECT_TRUE(
|
||||
ContainsTrack(video_desc->streams(), kStreamLabel1, "video_track"));
|
||||
EXPECT_TRUE(
|
||||
ContainsTrack(video_desc->streams(), kStreamLabel2, "video_track2"));
|
||||
EXPECT_TRUE(ContainsTrack(video_desc->streams(), kStreamId1, "video_track"));
|
||||
EXPECT_TRUE(ContainsTrack(video_desc->streams(), kStreamId2, "video_track2"));
|
||||
}
|
||||
|
||||
// Don't run under Unified Plan since the stream API is not available.
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, RemoveStream) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddVideoStream(kStreamLabel1);
|
||||
AddVideoStream(kStreamId1);
|
||||
ASSERT_EQ(1u, pc_->local_streams()->count());
|
||||
pc_->RemoveStream(pc_->local_streams()->at(0));
|
||||
EXPECT_EQ(0u, pc_->local_streams()->count());
|
||||
@ -1566,14 +1559,14 @@ TEST_F(PeerConnectionInterfaceTestPlanB, AddTrackRemoveTrack) {
|
||||
"video_track", pc_factory_->CreateVideoSource(
|
||||
std::unique_ptr<cricket::VideoCapturer>(
|
||||
new cricket::FakeVideoCapturer()))));
|
||||
auto audio_sender = pc_->AddTrack(audio_track, {kStreamLabel1}).MoveValue();
|
||||
auto video_sender = pc_->AddTrack(video_track, {kStreamLabel1}).MoveValue();
|
||||
auto audio_sender = pc_->AddTrack(audio_track, {kStreamId1}).MoveValue();
|
||||
auto video_sender = pc_->AddTrack(video_track, {kStreamId1}).MoveValue();
|
||||
EXPECT_EQ(1UL, audio_sender->stream_ids().size());
|
||||
EXPECT_EQ(kStreamLabel1, audio_sender->stream_ids()[0]);
|
||||
EXPECT_EQ(kStreamId1, audio_sender->stream_ids()[0]);
|
||||
EXPECT_EQ("audio_track", audio_sender->id());
|
||||
EXPECT_EQ(audio_track, audio_sender->track());
|
||||
EXPECT_EQ(1UL, video_sender->stream_ids().size());
|
||||
EXPECT_EQ(kStreamLabel1, video_sender->stream_ids()[0]);
|
||||
EXPECT_EQ(kStreamId1, video_sender->stream_ids()[0]);
|
||||
EXPECT_EQ("video_track", video_sender->id());
|
||||
EXPECT_EQ(video_track, video_sender->track());
|
||||
|
||||
@ -1584,12 +1577,12 @@ TEST_F(PeerConnectionInterfaceTestPlanB, AddTrackRemoveTrack) {
|
||||
const cricket::ContentInfo* audio_content =
|
||||
cricket::GetFirstAudioContent(offer->description());
|
||||
EXPECT_TRUE(ContainsTrack(audio_content->media_description()->streams(),
|
||||
kStreamLabel1, "audio_track"));
|
||||
kStreamId1, "audio_track"));
|
||||
|
||||
const cricket::ContentInfo* video_content =
|
||||
cricket::GetFirstVideoContent(offer->description());
|
||||
EXPECT_TRUE(ContainsTrack(video_content->media_description()->streams(),
|
||||
kStreamLabel1, "video_track"));
|
||||
kStreamId1, "video_track"));
|
||||
|
||||
EXPECT_TRUE(DoSetLocalDescription(std::move(offer)));
|
||||
|
||||
@ -1602,11 +1595,11 @@ TEST_F(PeerConnectionInterfaceTestPlanB, AddTrackRemoveTrack) {
|
||||
|
||||
audio_content = cricket::GetFirstAudioContent(offer->description());
|
||||
EXPECT_FALSE(ContainsTrack(audio_content->media_description()->streams(),
|
||||
kStreamLabel1, "audio_track"));
|
||||
kStreamId1, "audio_track"));
|
||||
|
||||
video_content = cricket::GetFirstVideoContent(offer->description());
|
||||
EXPECT_FALSE(ContainsTrack(video_content->media_description()->streams(),
|
||||
kStreamLabel1, "video_track"));
|
||||
kStreamId1, "video_track"));
|
||||
|
||||
EXPECT_TRUE(DoSetLocalDescription(std::move(offer)));
|
||||
|
||||
@ -1683,7 +1676,7 @@ TEST_P(PeerConnectionInterfaceTest, AttachmentIdIsSetOnAddTrack) {
|
||||
// Don't run under Unified Plan since the stream API is not available.
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, AttachmentIdIsSetOnAddStream) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddVideoStream(kStreamLabel1);
|
||||
AddVideoStream(kStreamId1);
|
||||
auto senders = pc_->GetSenders();
|
||||
ASSERT_EQ(1u, senders.size());
|
||||
auto* sender_proxy =
|
||||
@ -1694,39 +1687,39 @@ TEST_F(PeerConnectionInterfaceTestPlanB, AttachmentIdIsSetOnAddStream) {
|
||||
|
||||
TEST_P(PeerConnectionInterfaceTest, CreateOfferReceiveAnswer) {
|
||||
InitiateCall();
|
||||
WaitAndVerifyOnAddStream(kStreamLabel1, 2);
|
||||
WaitAndVerifyOnAddStream(kStreamId1, 2);
|
||||
VerifyRemoteRtpHeaderExtensions();
|
||||
}
|
||||
|
||||
TEST_P(PeerConnectionInterfaceTest, CreateOfferReceivePrAnswerAndAnswer) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamLabel1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamId1});
|
||||
CreateOfferAsLocalDescription();
|
||||
std::string offer;
|
||||
EXPECT_TRUE(pc_->local_description()->ToString(&offer));
|
||||
CreatePrAnswerAndAnswerAsRemoteDescription(offer);
|
||||
WaitAndVerifyOnAddStream(kStreamLabel1, 1);
|
||||
WaitAndVerifyOnAddStream(kStreamId1, 1);
|
||||
}
|
||||
|
||||
TEST_P(PeerConnectionInterfaceTest, ReceiveOfferCreateAnswer) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamLabel1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamId1});
|
||||
|
||||
CreateOfferAsRemoteDescription();
|
||||
CreateAnswerAsLocalDescription();
|
||||
|
||||
WaitAndVerifyOnAddStream(kStreamLabel1, 1);
|
||||
WaitAndVerifyOnAddStream(kStreamId1, 1);
|
||||
}
|
||||
|
||||
TEST_P(PeerConnectionInterfaceTest, ReceiveOfferCreatePrAnswerAndAnswer) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamLabel1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamId1});
|
||||
|
||||
CreateOfferAsRemoteDescription();
|
||||
CreatePrAnswerAsLocalDescription();
|
||||
CreateAnswerAsLocalDescription();
|
||||
|
||||
WaitAndVerifyOnAddStream(kStreamLabel1, 1);
|
||||
WaitAndVerifyOnAddStream(kStreamId1, 1);
|
||||
}
|
||||
|
||||
// Don't run under Unified Plan since the stream API is not available.
|
||||
@ -1736,7 +1729,7 @@ TEST_F(PeerConnectionInterfaceTestPlanB, Renegotiate) {
|
||||
pc_->RemoveStream(pc_->local_streams()->at(0));
|
||||
CreateOfferReceiveAnswer();
|
||||
EXPECT_EQ(0u, pc_->remote_streams()->count());
|
||||
AddVideoStream(kStreamLabel1);
|
||||
AddVideoStream(kStreamId1);
|
||||
CreateOfferReceiveAnswer();
|
||||
}
|
||||
|
||||
@ -1744,7 +1737,7 @@ TEST_F(PeerConnectionInterfaceTestPlanB, Renegotiate) {
|
||||
// renegotiation that removes the audio stream.
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, RenegotiateAudioOnly) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddAudioStream(kStreamLabel1);
|
||||
AddAudioStream(kStreamId1);
|
||||
CreateOfferAsRemoteDescription();
|
||||
CreateAnswerAsLocalDescription();
|
||||
|
||||
@ -1787,8 +1780,8 @@ TEST_P(PeerConnectionInterfaceTest, CreateOfferAnswerWithInvalidStream) {
|
||||
offer.reset();
|
||||
|
||||
// Create a local stream with audio&video tracks having same label.
|
||||
AddAudioTrack("track_label", {kStreamLabel1});
|
||||
AddVideoTrack("track_label", {kStreamLabel1});
|
||||
AddAudioTrack("track_label", {kStreamId1});
|
||||
AddVideoTrack("track_label", {kStreamId1});
|
||||
|
||||
// Test CreateOffer
|
||||
EXPECT_FALSE(DoCreateOffer(&offer, nullptr));
|
||||
@ -1803,8 +1796,8 @@ TEST_P(PeerConnectionInterfaceTest, CreateOfferAnswerWithInvalidStream) {
|
||||
TEST_P(PeerConnectionInterfaceTest, SsrcInOfferAnswer) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
// Create a local stream with audio&video tracks having different labels.
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamLabel1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamLabel1});
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamId1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamId1});
|
||||
|
||||
// Test CreateOffer
|
||||
std::unique_ptr<SessionDescriptionInterface> offer;
|
||||
@ -1837,7 +1830,7 @@ TEST_P(PeerConnectionInterfaceTest, SsrcInOfferAnswer) {
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, AddTrackAfterAddStream) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
// Create audio stream and add to PeerConnection.
|
||||
AddAudioStream(kStreamLabel1);
|
||||
AddAudioStream(kStreamId1);
|
||||
MediaStreamInterface* stream = pc_->local_streams()->at(0);
|
||||
|
||||
// Add video track to the audio-only stream.
|
||||
@ -1863,7 +1856,7 @@ TEST_F(PeerConnectionInterfaceTestPlanB, AddTrackAfterAddStream) {
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, RemoveTrackAfterAddStream) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
// Create audio/video stream and add to PeerConnection.
|
||||
AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
|
||||
AddAudioVideoStream(kStreamId1, "audio_label", "video_label");
|
||||
MediaStreamInterface* stream = pc_->local_streams()->at(0);
|
||||
|
||||
// Remove the video track.
|
||||
@ -1894,7 +1887,7 @@ TEST_P(PeerConnectionInterfaceTest, CreateDtmfSenderWithInvalidParams) {
|
||||
// Don't run under Unified Plan since the stream API is not available.
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, CreateSenderWithStream) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
pc_->CreateSender("video", kStreamLabel1);
|
||||
pc_->CreateSender("video", kStreamId1);
|
||||
|
||||
std::unique_ptr<SessionDescriptionInterface> offer;
|
||||
ASSERT_TRUE(DoCreateOffer(&offer, nullptr));
|
||||
@ -1903,7 +1896,7 @@ TEST_F(PeerConnectionInterfaceTestPlanB, CreateSenderWithStream) {
|
||||
cricket::GetFirstVideoContentDescription(offer->description());
|
||||
ASSERT_TRUE(video_desc != nullptr);
|
||||
ASSERT_EQ(1u, video_desc->streams().size());
|
||||
EXPECT_EQ(kStreamLabel1, video_desc->streams()[0].first_stream_label());
|
||||
EXPECT_EQ(kStreamId1, video_desc->streams()[0].first_stream_id());
|
||||
}
|
||||
|
||||
// Test that we can specify a certain track that we want statistics about.
|
||||
@ -1948,8 +1941,8 @@ TEST_P(PeerConnectionInterfaceTest, GetRTCStatsBeforeAndAfterCalling) {
|
||||
// Clearing stats cache is needed now, but should be temporary.
|
||||
// https://bugs.chromium.org/p/webrtc/issues/detail?id=8693
|
||||
pc_->ClearStatsCache();
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamLabel1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamLabel1});
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamId1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamId1});
|
||||
EXPECT_TRUE(DoGetRTCStats());
|
||||
pc_->ClearStatsCache();
|
||||
CreateOfferReceiveAnswer();
|
||||
@ -2704,7 +2697,7 @@ TEST_P(PeerConnectionInterfaceTest, CloseAndTestStreamsAndStates) {
|
||||
// Don't run under Unified Plan since the stream API is not available.
|
||||
TEST_F(PeerConnectionInterfaceTestPlanB, CloseAndTestMethods) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
AddAudioVideoStream(kStreamLabel1, "audio_label", "video_label");
|
||||
AddAudioVideoStream(kStreamId1, "audio_label", "video_label");
|
||||
CreateOfferAsRemoteDescription();
|
||||
CreateAnswerAsLocalDescription();
|
||||
|
||||
@ -3258,8 +3251,8 @@ TEST_P(PeerConnectionInterfaceTest, SetConfigurationCausingIceRestart) {
|
||||
FakeConstraints default_constraints;
|
||||
CreatePeerConnection(config, &default_constraints);
|
||||
config = pc_->GetConfiguration();
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamLabel1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamLabel1});
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamId1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamId1});
|
||||
|
||||
// Do initial offer/answer so there's something to restart.
|
||||
CreateOfferAsLocalDescription();
|
||||
@ -3330,8 +3323,8 @@ TEST_P(PeerConnectionInterfaceTest, SetConfigurationCausingPartialIceRestart) {
|
||||
FakeConstraints default_constraints;
|
||||
CreatePeerConnection(config, &default_constraints);
|
||||
config = pc_->GetConfiguration();
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamLabel1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamLabel1});
|
||||
AddAudioTrack(kAudioTracks[0], {kStreamId1});
|
||||
AddVideoTrack(kVideoTracks[0], {kStreamId1});
|
||||
|
||||
// Do initial offer/answer so there's something to restart.
|
||||
CreateOfferAsLocalDescription();
|
||||
@ -3873,7 +3866,7 @@ TEST_F(PeerConnectionInterfaceTestPlanB,
|
||||
MediaStreamAddTrackRemoveTrackRenegotiate) {
|
||||
CreatePeerConnectionWithoutDtls();
|
||||
rtc::scoped_refptr<MediaStreamInterface> stream(
|
||||
pc_factory_->CreateLocalMediaStream(kStreamLabel1));
|
||||
pc_factory_->CreateLocalMediaStream(kStreamId1));
|
||||
pc_->AddStream(stream);
|
||||
rtc::scoped_refptr<AudioTrackInterface> audio_track(
|
||||
pc_factory_->CreateAudioTrack("audio_track", nullptr));
|
||||
|
||||
@ -276,23 +276,23 @@ rtc::scoped_refptr<VideoTrackInterface> PeerConnectionWrapper::CreateVideoTrack(
|
||||
|
||||
rtc::scoped_refptr<RtpSenderInterface> PeerConnectionWrapper::AddTrack(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> result =
|
||||
pc()->AddTrack(track, stream_labels);
|
||||
pc()->AddTrack(track, stream_ids);
|
||||
EXPECT_EQ(RTCErrorType::NONE, result.error().type());
|
||||
return result.MoveValue();
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<RtpSenderInterface> PeerConnectionWrapper::AddAudioTrack(
|
||||
const std::string& track_label,
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
return AddTrack(CreateAudioTrack(track_label), stream_labels);
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
return AddTrack(CreateAudioTrack(track_label), stream_ids);
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<RtpSenderInterface> PeerConnectionWrapper::AddVideoTrack(
|
||||
const std::string& track_label,
|
||||
const std::vector<std::string>& stream_labels) {
|
||||
return AddTrack(CreateVideoTrack(track_label), stream_labels);
|
||||
const std::vector<std::string>& stream_ids) {
|
||||
return AddTrack(CreateVideoTrack(track_label), stream_ids);
|
||||
}
|
||||
|
||||
rtc::scoped_refptr<DataChannelInterface>
|
||||
|
||||
@ -138,19 +138,19 @@ class PeerConnectionWrapper {
|
||||
// AddTrack fails.
|
||||
rtc::scoped_refptr<RtpSenderInterface> AddTrack(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels = {});
|
||||
const std::vector<std::string>& stream_ids = {});
|
||||
|
||||
// Calls the underlying PeerConnection's AddTrack method with an audio media
|
||||
// stream track not bound to any source.
|
||||
rtc::scoped_refptr<RtpSenderInterface> AddAudioTrack(
|
||||
const std::string& track_label,
|
||||
const std::vector<std::string>& stream_labels = {});
|
||||
const std::vector<std::string>& stream_ids = {});
|
||||
|
||||
// Calls the underlying PeerConnection's AddTrack method with a video media
|
||||
// stream track fed by a fake video capturer.
|
||||
rtc::scoped_refptr<RtpSenderInterface> AddVideoTrack(
|
||||
const std::string& track_label,
|
||||
const std::vector<std::string>& stream_labels = {});
|
||||
const std::vector<std::string>& stream_ids = {});
|
||||
|
||||
// Calls the underlying PeerConnection's CreateDataChannel method with default
|
||||
// initialization parameters.
|
||||
|
||||
@ -321,7 +321,7 @@ class RTCStatsCollectorWrapper {
|
||||
bool add_stream) {
|
||||
rtc::scoped_refptr<MediaStream> local_stream;
|
||||
if (add_stream) {
|
||||
local_stream = MediaStream::Create("LocalStreamLabel");
|
||||
local_stream = MediaStream::Create("LocalStreamId");
|
||||
pc_->mutable_local_streams()->AddStream(local_stream);
|
||||
}
|
||||
|
||||
@ -349,7 +349,7 @@ class RTCStatsCollectorWrapper {
|
||||
const std::string& track_id,
|
||||
uint32_t ssrc) {
|
||||
rtc::scoped_refptr<MediaStream> remote_stream =
|
||||
MediaStream::Create("RemoteStreamLabel");
|
||||
MediaStream::Create("RemoteStreamId");
|
||||
pc_->mutable_remote_streams()->AddStream(remote_stream);
|
||||
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track;
|
||||
@ -1195,7 +1195,7 @@ TEST_F(RTCStatsCollectorTest, CollectRTCPeerConnectionStats) {
|
||||
TEST_F(RTCStatsCollectorTest,
|
||||
CollectLocalRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Audio) {
|
||||
rtc::scoped_refptr<MediaStream> local_stream =
|
||||
MediaStream::Create("LocalStreamLabel");
|
||||
MediaStream::Create("LocalStreamId");
|
||||
pc_->mutable_local_streams()->AddStream(local_stream);
|
||||
|
||||
// Local audio track
|
||||
@ -1255,7 +1255,7 @@ TEST_F(RTCStatsCollectorTest,
|
||||
TEST_F(RTCStatsCollectorTest,
|
||||
CollectRemoteRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Audio) {
|
||||
rtc::scoped_refptr<MediaStream> remote_stream =
|
||||
MediaStream::Create("RemoteStreamLabel");
|
||||
MediaStream::Create("RemoteStreamId");
|
||||
pc_->mutable_remote_streams()->AddStream(remote_stream);
|
||||
|
||||
// Remote audio track
|
||||
@ -1317,7 +1317,7 @@ TEST_F(RTCStatsCollectorTest,
|
||||
TEST_F(RTCStatsCollectorTest,
|
||||
CollectLocalRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Video) {
|
||||
rtc::scoped_refptr<MediaStream> local_stream =
|
||||
MediaStream::Create("LocalStreamLabel");
|
||||
MediaStream::Create("LocalStreamId");
|
||||
pc_->mutable_local_streams()->AddStream(local_stream);
|
||||
|
||||
// Local video track
|
||||
@ -1376,7 +1376,7 @@ TEST_F(RTCStatsCollectorTest,
|
||||
TEST_F(RTCStatsCollectorTest,
|
||||
CollectRemoteRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Video) {
|
||||
rtc::scoped_refptr<MediaStream> remote_stream =
|
||||
MediaStream::Create("RemoteStreamLabel");
|
||||
MediaStream::Create("RemoteStreamId");
|
||||
pc_->mutable_remote_streams()->AddStream(remote_stream);
|
||||
|
||||
// Remote video track with values
|
||||
|
||||
@ -65,11 +65,11 @@ AudioRtpSender::AudioRtpSender(rtc::Thread* worker_thread,
|
||||
|
||||
AudioRtpSender::AudioRtpSender(rtc::Thread* worker_thread,
|
||||
rtc::scoped_refptr<AudioTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels,
|
||||
const std::vector<std::string>& stream_ids,
|
||||
StatsCollector* stats)
|
||||
: worker_thread_(worker_thread),
|
||||
id_(track ? track->id() : rtc::CreateRandomUuid()),
|
||||
stream_ids_(stream_labels),
|
||||
stream_ids_(stream_ids),
|
||||
stats_(stats),
|
||||
track_(track),
|
||||
dtmf_sender_proxy_(DtmfSenderProxy::Create(
|
||||
@ -81,7 +81,7 @@ AudioRtpSender::AudioRtpSender(rtc::Thread* worker_thread,
|
||||
RTC_DCHECK(worker_thread);
|
||||
// TODO(bugs.webrtc.org/7932): Remove once zero or multiple streams are
|
||||
// supported.
|
||||
RTC_DCHECK_EQ(stream_labels.size(), 1u);
|
||||
RTC_DCHECK_EQ(stream_ids.size(), 1u);
|
||||
if (track_) {
|
||||
track_->RegisterObserver(this);
|
||||
track_->AddSink(sink_adapter_.get());
|
||||
@ -306,20 +306,20 @@ VideoRtpSender::VideoRtpSender(rtc::Thread* worker_thread)
|
||||
|
||||
VideoRtpSender::VideoRtpSender(rtc::Thread* worker_thread,
|
||||
rtc::scoped_refptr<VideoTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels)
|
||||
const std::vector<std::string>& stream_ids)
|
||||
: worker_thread_(worker_thread),
|
||||
id_(track ? track->id() : rtc::CreateRandomUuid()),
|
||||
stream_ids_(stream_labels),
|
||||
stream_ids_(stream_ids),
|
||||
track_(track),
|
||||
cached_track_enabled_(track ? track->enabled() : false),
|
||||
cached_track_content_hint_(
|
||||
track ? track->content_hint()
|
||||
: VideoTrackInterface::ContentHint::kNone),
|
||||
cached_track_content_hint_(track
|
||||
? track->content_hint()
|
||||
: VideoTrackInterface::ContentHint::kNone),
|
||||
attachment_id_(track ? GenerateUniqueId() : 0) {
|
||||
RTC_DCHECK(worker_thread);
|
||||
// TODO(bugs.webrtc.org/7932): Remove once zero or multiple streams are
|
||||
// supported.
|
||||
RTC_DCHECK_EQ(stream_labels.size(), 1u);
|
||||
RTC_DCHECK_EQ(stream_ids.size(), 1u);
|
||||
if (track_) {
|
||||
track_->RegisterObserver(this);
|
||||
}
|
||||
|
||||
@ -98,14 +98,14 @@ class AudioRtpSender : public DtmfProviderInterface,
|
||||
// at the appropriate times.
|
||||
|
||||
// Construct an AudioRtpSender with a null track, a single, randomly generated
|
||||
// stream label, and a randomly generated ID.
|
||||
// stream id, and a randomly generated ID.
|
||||
AudioRtpSender(rtc::Thread* worker_thread, StatsCollector* stats);
|
||||
|
||||
// Construct an AudioRtpSender with the given track and stream labels. The
|
||||
// Construct an AudioRtpSender with the given track and stream ids. The
|
||||
// sender ID will be set to the track's ID.
|
||||
AudioRtpSender(rtc::Thread* worker_thread,
|
||||
rtc::scoped_refptr<AudioTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels,
|
||||
const std::vector<std::string>& stream_ids,
|
||||
StatsCollector* stats);
|
||||
|
||||
virtual ~AudioRtpSender();
|
||||
@ -198,14 +198,14 @@ class VideoRtpSender : public ObserverInterface,
|
||||
public rtc::RefCountedObject<RtpSenderInternal> {
|
||||
public:
|
||||
// Construct a VideoRtpSender with a null track, a single, randomly generated
|
||||
// stream label, and a randomly generated ID.
|
||||
// stream id, and a randomly generated ID.
|
||||
explicit VideoRtpSender(rtc::Thread* worker_thread);
|
||||
|
||||
// Construct a VideoRtpSender with the given track and stream labels. The
|
||||
// Construct a VideoRtpSender with the given track and stream ids. The
|
||||
// sender ID will be set to the track's ID.
|
||||
VideoRtpSender(rtc::Thread* worker_thread,
|
||||
rtc::scoped_refptr<VideoTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels);
|
||||
const std::vector<std::string>& stream_ids);
|
||||
|
||||
virtual ~VideoRtpSender();
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ using ::testing::Return;
|
||||
|
||||
namespace {
|
||||
|
||||
static const char kStreamLabel1[] = "local_stream_1";
|
||||
static const char kStreamId1[] = "local_stream_1";
|
||||
static const char kVideoTrackId[] = "video_1";
|
||||
static const char kAudioTrackId[] = "audio_1";
|
||||
static const uint32_t kVideoSsrc = 98;
|
||||
@ -65,7 +65,7 @@ class RtpSenderReceiverTest : public testing::Test,
|
||||
worker_thread_,
|
||||
network_thread_),
|
||||
fake_call_(),
|
||||
local_stream_(MediaStream::Create(kStreamLabel1)) {
|
||||
local_stream_(MediaStream::Create(kStreamId1)) {
|
||||
// Create channels to be used by the RtpSenders and RtpReceivers.
|
||||
channel_manager_.Init();
|
||||
bool srtp_required = true;
|
||||
|
||||
@ -725,7 +725,7 @@ class StatsCollectorTrackTest : public StatsCollectorTest,
|
||||
rtc::Thread::Current());
|
||||
if (GetParam()) {
|
||||
if (!stream_)
|
||||
stream_ = MediaStream::Create("streamlabel");
|
||||
stream_ = MediaStream::Create("streamid");
|
||||
stream_->AddTrack(track_);
|
||||
stats->AddStream(stream_);
|
||||
} else {
|
||||
@ -740,7 +740,7 @@ class StatsCollectorTrackTest : public StatsCollectorTest,
|
||||
track_ = VideoTrack::Create(kRemoteTrackId, FakeVideoTrackSource::Create(),
|
||||
rtc::Thread::Current());
|
||||
if (GetParam()) {
|
||||
stream_ = MediaStream::Create("streamlabel");
|
||||
stream_ = MediaStream::Create("streamid");
|
||||
stream_->AddTrack(track_);
|
||||
stats->AddStream(stream_);
|
||||
} else {
|
||||
@ -758,7 +758,7 @@ class StatsCollectorTrackTest : public StatsCollectorTest,
|
||||
audio_track_ = new rtc::RefCountedObject<FakeAudioTrack>(kLocalTrackId);
|
||||
if (GetParam()) {
|
||||
if (!stream_)
|
||||
stream_ = MediaStream::Create("streamlabel");
|
||||
stream_ = MediaStream::Create("streamid");
|
||||
stream_->AddTrack(audio_track_);
|
||||
stats->AddStream(stream_);
|
||||
} else {
|
||||
@ -773,7 +773,7 @@ class StatsCollectorTrackTest : public StatsCollectorTest,
|
||||
audio_track_ = new rtc::RefCountedObject<FakeAudioTrack>(kRemoteTrackId);
|
||||
if (GetParam()) {
|
||||
if (stream_ == NULL)
|
||||
stream_ = MediaStream::Create("streamlabel");
|
||||
stream_ = MediaStream::Create("streamid");
|
||||
stream_->AddTrack(audio_track_);
|
||||
stats->AddStream(stream_);
|
||||
} else {
|
||||
@ -1427,7 +1427,7 @@ TEST_P(StatsCollectorTrackTest, FilterOutNegativeInitialValues) {
|
||||
auto stats = CreateStatsCollector(pc);
|
||||
|
||||
// Create a local stream with a local audio track and adds it to the stats.
|
||||
stream_ = MediaStream::Create("streamlabel");
|
||||
stream_ = MediaStream::Create("streamid");
|
||||
rtc::scoped_refptr<FakeAudioTrackWithInitValue> local_track(
|
||||
new rtc::RefCountedObject<FakeAudioTrackWithInitValue>(kLocalTrackId));
|
||||
stream_->AddTrack(local_track);
|
||||
@ -1439,7 +1439,7 @@ TEST_P(StatsCollectorTrackTest, FilterOutNegativeInitialValues) {
|
||||
|
||||
// Create a remote stream with a remote audio track and adds it to the stats.
|
||||
rtc::scoped_refptr<MediaStream> remote_stream(
|
||||
MediaStream::Create("remotestreamlabel"));
|
||||
MediaStream::Create("remotestreamid"));
|
||||
rtc::scoped_refptr<FakeAudioTrackWithInitValue> remote_track(
|
||||
new rtc::RefCountedObject<FakeAudioTrackWithInitValue>(kRemoteTrackId));
|
||||
remote_stream->AddTrack(remote_track);
|
||||
@ -1609,7 +1609,7 @@ TEST_P(StatsCollectorTrackTest, LocalAndRemoteTracksWithSameSsrc) {
|
||||
|
||||
// Create a remote stream with a remote audio track and adds it to the stats.
|
||||
rtc::scoped_refptr<MediaStream> remote_stream(
|
||||
MediaStream::Create("remotestreamlabel"));
|
||||
MediaStream::Create("remotestreamid"));
|
||||
rtc::scoped_refptr<FakeAudioTrack> remote_track(
|
||||
new rtc::RefCountedObject<FakeAudioTrack>(kRemoteTrackId));
|
||||
pc->AddRemoteTrack(kSsrcOfTrack, kRemoteTrackId);
|
||||
|
||||
@ -43,7 +43,7 @@ class FakePeerConnectionBase : public PeerConnectionInternal {
|
||||
|
||||
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> AddTrack(
|
||||
rtc::scoped_refptr<MediaStreamTrackInterface> track,
|
||||
const std::vector<std::string>& stream_labels) override {
|
||||
const std::vector<std::string>& stream_ids) override {
|
||||
return RTCError(RTCErrorType::UNSUPPORTED_OPERATION, "Not implemented");
|
||||
}
|
||||
|
||||
|
||||
@ -150,33 +150,33 @@ class MockPeerConnectionObserver : public PeerConnectionObserver {
|
||||
return receivers;
|
||||
}
|
||||
|
||||
int CountAddTrackEventsForStream(const std::string& stream_label) {
|
||||
int CountAddTrackEventsForStream(const std::string& stream_id) {
|
||||
int found_tracks = 0;
|
||||
for (const AddTrackEvent& event : add_track_events_) {
|
||||
bool has_stream_label = false;
|
||||
bool has_stream_id = false;
|
||||
for (auto stream : event.streams) {
|
||||
if (stream->label() == stream_label) {
|
||||
has_stream_label = true;
|
||||
if (stream->id() == stream_id) {
|
||||
has_stream_id = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (has_stream_label) {
|
||||
if (has_stream_id) {
|
||||
++found_tracks;
|
||||
}
|
||||
}
|
||||
return found_tracks;
|
||||
}
|
||||
|
||||
// Returns the label of the last added stream.
|
||||
// Returns the id of the last added stream.
|
||||
// Empty string if no stream have been added.
|
||||
std::string GetLastAddedStreamLabel() {
|
||||
std::string GetLastAddedStreamId() {
|
||||
if (last_added_stream_.get())
|
||||
return last_added_stream_->label();
|
||||
return last_added_stream_->id();
|
||||
return "";
|
||||
}
|
||||
std::string GetLastRemovedStreamLabel() {
|
||||
std::string GetLastRemovedStreamId() {
|
||||
if (last_removed_stream_.get())
|
||||
return last_removed_stream_->label();
|
||||
return last_removed_stream_->id();
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ using webrtc::SessionDescriptionInterface;
|
||||
using webrtc::VideoTrackInterface;
|
||||
|
||||
namespace {
|
||||
const char kStreamLabelBase[] = "stream_label";
|
||||
const char kStreamIdBase[] = "stream_id";
|
||||
const char kVideoTrackLabelBase[] = "video_track";
|
||||
const char kAudioTrackLabelBase[] = "audio_track";
|
||||
constexpr int kMaxWait = 10000;
|
||||
@ -263,10 +263,10 @@ rtc::scoped_refptr<webrtc::MediaStreamInterface>
|
||||
PeerConnectionTestWrapper::GetUserMedia(
|
||||
bool audio, const webrtc::FakeConstraints& audio_constraints,
|
||||
bool video, const webrtc::FakeConstraints& video_constraints) {
|
||||
std::string label =
|
||||
kStreamLabelBase + rtc::ToString(num_get_user_media_calls_++);
|
||||
std::string stream_id =
|
||||
kStreamIdBase + rtc::ToString(num_get_user_media_calls_++);
|
||||
rtc::scoped_refptr<webrtc::MediaStreamInterface> stream =
|
||||
peer_connection_factory_->CreateLocalMediaStream(label);
|
||||
peer_connection_factory_->CreateLocalMediaStream(stream_id);
|
||||
|
||||
if (audio) {
|
||||
FakeConstraints constraints = audio_constraints;
|
||||
@ -291,7 +291,7 @@ rtc::scoped_refptr<webrtc::MediaStreamInterface>
|
||||
std::unique_ptr<cricket::VideoCapturer>(
|
||||
new webrtc::FakePeriodicVideoCapturer()),
|
||||
&constraints);
|
||||
std::string videotrack_label = label + kVideoTrackLabelBase;
|
||||
std::string videotrack_label = stream_id + kVideoTrackLabelBase;
|
||||
rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track(
|
||||
peer_connection_factory_->CreateVideoTrack(videotrack_label, source));
|
||||
|
||||
|
||||
@ -634,17 +634,17 @@ void CreateTracksFromSsrcInfos(const SsrcInfoVec& ssrc_infos,
|
||||
}
|
||||
track->add_ssrc(ssrc_info->ssrc_id);
|
||||
track->cname = ssrc_info->cname;
|
||||
track->set_stream_labels({stream_id});
|
||||
track->set_stream_ids({stream_id});
|
||||
track->id = track_id;
|
||||
}
|
||||
}
|
||||
|
||||
void GetMediaStreamLabels(const ContentInfo* content,
|
||||
std::set<std::string>* labels) {
|
||||
void GetMediaStreamIds(const ContentInfo* content,
|
||||
std::set<std::string>* labels) {
|
||||
for (const StreamParams& stream_params :
|
||||
content->media_description()->streams()) {
|
||||
for (const std::string& stream_label : stream_params.stream_labels()) {
|
||||
labels->insert(stream_label);
|
||||
for (const std::string& stream_id : stream_params.stream_ids()) {
|
||||
labels->insert(stream_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -809,17 +809,17 @@ std::string SdpSerialize(const JsepSessionDescription& jdesc) {
|
||||
InitAttrLine(kAttributeMsidSemantics, &os);
|
||||
os << kSdpDelimiterColon << " " << kMediaStreamSemantic;
|
||||
|
||||
std::set<std::string> media_stream_labels;
|
||||
std::set<std::string> media_stream_ids;
|
||||
const ContentInfo* audio_content = GetFirstAudioContent(desc);
|
||||
if (audio_content)
|
||||
GetMediaStreamLabels(audio_content, &media_stream_labels);
|
||||
GetMediaStreamIds(audio_content, &media_stream_ids);
|
||||
|
||||
const ContentInfo* video_content = GetFirstVideoContent(desc);
|
||||
if (video_content)
|
||||
GetMediaStreamLabels(video_content, &media_stream_labels);
|
||||
GetMediaStreamIds(video_content, &media_stream_ids);
|
||||
|
||||
for (std::set<std::string>::const_iterator it =
|
||||
media_stream_labels.begin(); it != media_stream_labels.end(); ++it) {
|
||||
for (std::set<std::string>::const_iterator it = media_stream_ids.begin();
|
||||
it != media_stream_ids.end(); ++it) {
|
||||
os << " " << *it;
|
||||
}
|
||||
AddLine(os.str(), &message);
|
||||
@ -1480,7 +1480,7 @@ void BuildRtpContentAttributes(const MediaContentDescription* media_desc,
|
||||
const StreamParams& track = streams[0];
|
||||
// TODO(bugs.webrtc.org/7932): Support serializing more than one stream
|
||||
// label.
|
||||
const std::string& stream_id = track.first_stream_label();
|
||||
const std::string& stream_id = track.first_stream_id();
|
||||
InitAttrLine(kAttributeMsid, &os);
|
||||
os << kSdpDelimiterColon << stream_id << kSdpDelimiterSpace << track.id;
|
||||
AddLine(os.str(), message);
|
||||
@ -1536,7 +1536,7 @@ void BuildRtpContentAttributes(const MediaContentDescription* media_desc,
|
||||
// necessary since the MediaContentDescription always contains a
|
||||
// StreamParams with an ssrc even if no track or media stream have been
|
||||
// created.
|
||||
if (track->stream_labels().empty())
|
||||
if (track->stream_ids().empty())
|
||||
continue;
|
||||
|
||||
// Build the ssrc-group lines.
|
||||
@ -1570,7 +1570,7 @@ void BuildRtpContentAttributes(const MediaContentDescription* media_desc,
|
||||
// which corresponds to the "id" attribute of StreamParams.
|
||||
// TODO(bugs.webrtc.org/7932): Support serializing more than one stream
|
||||
// label.
|
||||
const std::string& stream_id = track->first_stream_label();
|
||||
const std::string& stream_id = track->first_stream_id();
|
||||
InitAttrLine(kAttributeSsrc, &os);
|
||||
os << kSdpDelimiterColon << ssrc << kSdpDelimiterSpace
|
||||
<< kSsrcAttributeMsid << kSdpDelimiterColon << stream_id
|
||||
@ -1583,7 +1583,7 @@ void BuildRtpContentAttributes(const MediaContentDescription* media_desc,
|
||||
// a=ssrc:<ssrc-id> mslabel:<value>
|
||||
// The label isn't yet defined.
|
||||
// a=ssrc:<ssrc-id> label:<value>
|
||||
AddSsrcLine(ssrc, kSsrcAttributeMslabel, track->first_stream_label(),
|
||||
AddSsrcLine(ssrc, kSsrcAttributeMslabel, track->first_stream_id(),
|
||||
message);
|
||||
AddSsrcLine(ssrc, kSSrcAttributeLabel, track->id, message);
|
||||
}
|
||||
|
||||
@ -740,7 +740,7 @@ static const char kVideoContentName2[] = "video_content_name_2";
|
||||
static const char kVideoContentName3[] = "video_content_name_3";
|
||||
|
||||
// MediaStream 1
|
||||
static const char kStreamLabel1[] = "local_stream_1";
|
||||
static const char kStreamId1[] = "local_stream_1";
|
||||
static const char kStream1Cname[] = "stream_1_cname";
|
||||
static const char kAudioTrackId1[] = "audio_track_id_1";
|
||||
static const uint32_t kAudioTrack1Ssrc = 1;
|
||||
@ -749,7 +749,7 @@ static const uint32_t kVideoTrack1Ssrc1 = 2;
|
||||
static const uint32_t kVideoTrack1Ssrc2 = 3;
|
||||
|
||||
// MediaStream 2
|
||||
static const char kStreamLabel2[] = "local_stream_2";
|
||||
static const char kStreamId2[] = "local_stream_2";
|
||||
static const char kStream2Cname[] = "stream_2_cname";
|
||||
static const char kAudioTrackId2[] = "audio_track_id_2";
|
||||
static const uint32_t kAudioTrack2Ssrc = 4;
|
||||
@ -874,7 +874,7 @@ class WebRtcSdpTest : public testing::Test {
|
||||
StreamParams audio_stream;
|
||||
audio_stream.id = kAudioTrackId1;
|
||||
audio_stream.cname = kStream1Cname;
|
||||
audio_stream.set_stream_labels({kStreamLabel1});
|
||||
audio_stream.set_stream_ids({kStreamId1});
|
||||
audio_stream.ssrcs.push_back(kAudioTrack1Ssrc);
|
||||
audio_desc_->AddStream(audio_stream);
|
||||
rtc::SocketAddress audio_addr("74.125.127.126", 2345);
|
||||
@ -886,7 +886,7 @@ class WebRtcSdpTest : public testing::Test {
|
||||
StreamParams video_stream;
|
||||
video_stream.id = kVideoTrackId1;
|
||||
video_stream.cname = kStream1Cname;
|
||||
video_stream.set_stream_labels({kStreamLabel1});
|
||||
video_stream.set_stream_ids({kStreamId1});
|
||||
video_stream.ssrcs.push_back(kVideoTrack1Ssrc1);
|
||||
video_stream.ssrcs.push_back(kVideoTrack1Ssrc2);
|
||||
cricket::SsrcGroup ssrc_group(kFecSsrcGroupSemantics, video_stream.ssrcs);
|
||||
@ -1055,21 +1055,21 @@ class WebRtcSdpTest : public testing::Test {
|
||||
StreamParams audio_track_2;
|
||||
audio_track_2.id = kAudioTrackId2;
|
||||
audio_track_2.cname = kStream2Cname;
|
||||
audio_track_2.set_stream_labels({kStreamLabel2});
|
||||
audio_track_2.set_stream_ids({kStreamId2});
|
||||
audio_track_2.ssrcs.push_back(kAudioTrack2Ssrc);
|
||||
audio_desc_->AddStream(audio_track_2);
|
||||
|
||||
StreamParams video_track_2;
|
||||
video_track_2.id = kVideoTrackId2;
|
||||
video_track_2.cname = kStream2Cname;
|
||||
video_track_2.set_stream_labels({kStreamLabel2});
|
||||
video_track_2.set_stream_ids({kStreamId2});
|
||||
video_track_2.ssrcs.push_back(kVideoTrack2Ssrc);
|
||||
video_desc_->AddStream(video_track_2);
|
||||
|
||||
StreamParams video_track_3;
|
||||
video_track_3.id = kVideoTrackId3;
|
||||
video_track_3.cname = kStream2Cname;
|
||||
video_track_3.set_stream_labels({kStreamLabel2});
|
||||
video_track_3.set_stream_ids({kStreamId2});
|
||||
video_track_3.ssrcs.push_back(kVideoTrack3Ssrc);
|
||||
video_desc_->AddStream(video_track_3);
|
||||
|
||||
@ -1090,7 +1090,7 @@ class WebRtcSdpTest : public testing::Test {
|
||||
StreamParams audio_track_2;
|
||||
audio_track_2.id = kAudioTrackId2;
|
||||
audio_track_2.cname = kStream2Cname;
|
||||
audio_track_2.set_stream_labels({kStreamLabel2});
|
||||
audio_track_2.set_stream_ids({kStreamId2});
|
||||
audio_track_2.ssrcs.push_back(kAudioTrack2Ssrc);
|
||||
audio_desc_2->AddStream(audio_track_2);
|
||||
desc_.AddContent(kAudioContentName2, MediaProtocolType::kRtp, audio_desc_2);
|
||||
@ -1101,7 +1101,7 @@ class WebRtcSdpTest : public testing::Test {
|
||||
StreamParams video_track_2;
|
||||
video_track_2.id = kVideoTrackId2;
|
||||
video_track_2.cname = kStream2Cname;
|
||||
video_track_2.set_stream_labels({kStreamLabel2});
|
||||
video_track_2.set_stream_ids({kStreamId2});
|
||||
video_track_2.ssrcs.push_back(kVideoTrack2Ssrc);
|
||||
video_desc_2->AddStream(video_track_2);
|
||||
desc_.AddContent(kVideoContentName2, MediaProtocolType::kRtp, video_desc_2);
|
||||
@ -1113,7 +1113,7 @@ class WebRtcSdpTest : public testing::Test {
|
||||
StreamParams video_track_3;
|
||||
video_track_3.id = kVideoTrackId3;
|
||||
video_track_3.cname = kStream2Cname;
|
||||
video_track_3.set_stream_labels({kStreamLabel2});
|
||||
video_track_3.set_stream_ids({kStreamId2});
|
||||
video_track_3.ssrcs.push_back(kVideoTrack3Ssrc);
|
||||
video_desc_3->AddStream(video_track_3);
|
||||
desc_.AddContent(kVideoContentName3, MediaProtocolType::kRtp, video_desc_3);
|
||||
@ -1518,7 +1518,7 @@ class WebRtcSdpTest : public testing::Test {
|
||||
StreamParams data_stream;
|
||||
data_stream.id = kDataChannelMsid;
|
||||
data_stream.cname = kDataChannelCname;
|
||||
data_stream.set_stream_labels({kDataChannelLabel});
|
||||
data_stream.set_stream_ids({kDataChannelLabel});
|
||||
data_stream.ssrcs.push_back(kDataChannelSsrc);
|
||||
data_desc_->AddStream(data_stream);
|
||||
data_desc_->AddCrypto(CryptoParams(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user