Refactor RtpSender to take the sender ID as a constructor argument
This change also standardizes the RtpSender to a single constructor
and moves the |track| and |stream_ids| arguments to setter methods.
Bug: webrtc:8734
Change-Id: I227a84868a80797f6cc2a1af6eec6d76da8ea159
Reviewed-on: https://webrtc-review.googlesource.com/84248
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Seth Hampson <shampson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23730}diff --git a/pc/peerconnection.cc b/pc/peerconnection.cc
index f4dcb51..2854020 100644
--- a/pc/peerconnection.cc
+++ b/pc/peerconnection.cc
@@ -1204,7 +1204,8 @@
(track->kind() == MediaStreamTrackInterface::kAudioKind
? cricket::MEDIA_TYPE_AUDIO
: cricket::MEDIA_TYPE_VIDEO);
- auto new_sender = CreateSender(media_type, track, adjusted_stream_ids);
+ auto new_sender =
+ CreateSender(media_type, track->id(), track, adjusted_stream_ids);
if (track->kind() == MediaStreamTrackInterface::kAudioKind) {
new_sender->internal()->SetVoiceMediaChannel(voice_media_channel());
GetAudioTransceiver()->internal()->AddSender(new_sender);
@@ -1253,7 +1254,7 @@
: cricket::MEDIA_TYPE_VIDEO);
RTC_LOG(LS_INFO) << "Adding " << cricket::MediaTypeToString(media_type)
<< " transceiver in response to a call to AddTrack.";
- auto sender = CreateSender(media_type, track, stream_ids);
+ auto sender = CreateSender(media_type, track->id(), track, stream_ids);
auto receiver = CreateReceiver(media_type, rtc::CreateRandomUuid());
transceiver = CreateAndAddTransceiver(sender, receiver);
transceiver->internal()->set_created_by_addtrack(true);
@@ -1398,7 +1399,9 @@
RTC_LOG(LS_INFO) << "Adding " << cricket::MediaTypeToString(media_type)
<< " transceiver in response to a call to AddTransceiver.";
- auto sender = CreateSender(media_type, track, init.stream_ids);
+ auto sender =
+ CreateSender(media_type, (track ? track->id() : rtc::CreateRandomUuid()),
+ track, init.stream_ids);
auto receiver = CreateReceiver(media_type, rtc::CreateRandomUuid());
auto transceiver = CreateAndAddTransceiver(sender, receiver);
transceiver->internal()->set_direction(init.direction);
@@ -1413,6 +1416,7 @@
rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>>
PeerConnection::CreateSender(
cricket::MediaType media_type,
+ const std::string& id,
rtc::scoped_refptr<MediaStreamTrackInterface> track,
const std::vector<std::string>& stream_ids) {
rtc::scoped_refptr<RtpSenderProxyWithInternal<RtpSenderInternal>> sender;
@@ -1421,21 +1425,19 @@
(track->kind() == MediaStreamTrackInterface::kAudioKind));
sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
signaling_thread(),
- new AudioRtpSender(worker_thread(),
- static_cast<AudioTrackInterface*>(track.get()),
- stream_ids, stats_.get()));
+ new AudioRtpSender(worker_thread(), id, stats_.get()));
NoteUsageEvent(UsageEvent::AUDIO_ADDED);
} else {
RTC_DCHECK_EQ(media_type, cricket::MEDIA_TYPE_VIDEO);
RTC_DCHECK(!track ||
(track->kind() == MediaStreamTrackInterface::kVideoKind));
sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
- signaling_thread(),
- new VideoRtpSender(worker_thread(),
- static_cast<VideoTrackInterface*>(track.get()),
- stream_ids));
+ signaling_thread(), new VideoRtpSender(worker_thread(), id));
NoteUsageEvent(UsageEvent::VIDEO_ADDED);
}
+ bool set_track_succeeded = sender->SetTrack(track);
+ RTC_DCHECK(set_track_succeeded);
+ sender->internal()->set_stream_ids(stream_ids);
return sender;
}
@@ -1504,15 +1506,15 @@
// 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_ids, stats_.get());
+ auto* audio_sender = new AudioRtpSender(
+ worker_thread(), rtc::CreateRandomUuid(), 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_ids);
+ new VideoRtpSender(worker_thread(), rtc::CreateRandomUuid());
video_sender->SetVideoMediaChannel(video_media_channel());
new_sender = RtpSenderProxyWithInternal<RtpSenderInternal>::Create(
signaling_thread(), video_sender);
@@ -1521,6 +1523,7 @@
RTC_LOG(LS_ERROR) << "CreateSender called with invalid kind: " << kind;
return nullptr;
}
+ new_sender->internal()->set_stream_ids(stream_ids);
return new_sender;
}
@@ -2735,8 +2738,10 @@
<< " transceiver for MID=" << content.name
<< " at i=" << mline_index
<< " in response to the remote description.";
+ std::string sender_id = rtc::CreateRandomUuid();
+ std::vector<std::string> stream_ids = {rtc::CreateRandomUuid()};
auto sender =
- CreateSender(media_desc->type(), nullptr, {rtc::CreateRandomUuid()});
+ CreateSender(media_desc->type(), sender_id, nullptr, stream_ids);
std::string receiver_id;
if (!media_desc->streams().empty()) {
receiver_id = media_desc->streams()[0].id;
@@ -3392,6 +3397,8 @@
void PeerConnection::AddAudioTrack(AudioTrackInterface* track,
MediaStreamInterface* stream) {
RTC_DCHECK(!IsClosed());
+ RTC_DCHECK(track);
+ RTC_DCHECK(stream);
auto sender = FindSenderForTrack(track);
if (sender) {
// We already have a sender for this track, so just change the stream_id
@@ -3401,8 +3408,8 @@
}
// Normal case; we've never seen this track before.
- auto new_sender =
- CreateSender(cricket::MEDIA_TYPE_AUDIO, track, {stream->id()});
+ auto new_sender = CreateSender(cricket::MEDIA_TYPE_AUDIO, track->id(), track,
+ {stream->id()});
new_sender->internal()->SetVoiceMediaChannel(voice_media_channel());
GetAudioTransceiver()->internal()->AddSender(new_sender);
// If the sender has already been configured in SDP, we call SetSsrc,
@@ -3435,6 +3442,8 @@
void PeerConnection::AddVideoTrack(VideoTrackInterface* track,
MediaStreamInterface* stream) {
RTC_DCHECK(!IsClosed());
+ RTC_DCHECK(track);
+ RTC_DCHECK(stream);
auto sender = FindSenderForTrack(track);
if (sender) {
// We already have a sender for this track, so just change the stream_id
@@ -3444,8 +3453,8 @@
}
// Normal case; we've never seen this track before.
- auto new_sender =
- CreateSender(cricket::MEDIA_TYPE_VIDEO, track, {stream->id()});
+ auto new_sender = CreateSender(cricket::MEDIA_TYPE_VIDEO, track->id(), track,
+ {stream->id()});
new_sender->internal()->SetVideoMediaChannel(video_media_channel());
GetVideoTransceiver()->internal()->AddSender(new_sender);
const RtpSenderInfo* sender_info =