Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1299)

Unified Diff: webrtc/media/engine/webrtcvoiceengine.cc

Issue 2072783002: - Remove use of VoERTP_RTCP::SetLocalSSRC() for receive streams; recreate them instead. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase+added comment Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/media/engine/webrtcvoe.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/media/engine/webrtcvoiceengine.cc
diff --git a/webrtc/media/engine/webrtcvoiceengine.cc b/webrtc/media/engine/webrtcvoiceengine.cc
index c1084c303bfe7b58e9d85a0a115632adff519844..eb9b4bb3569ce01f175d1f80988f0aefd21a4820 100644
--- a/webrtc/media/engine/webrtcvoiceengine.cc
+++ b/webrtc/media/engine/webrtcvoiceengine.cc
@@ -1285,12 +1285,14 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
RTC_DCHECK_GE(ch, 0);
RTC_DCHECK(call);
config_.rtp.remote_ssrc = remote_ssrc;
- config_.rtp.local_ssrc = local_ssrc;
config_.rtcp_send_transport = rtcp_send_transport;
config_.voe_channel_id = ch;
config_.sync_group = sync_group;
config_.decoder_factory = decoder_factory;
- RecreateAudioReceiveStream(use_transport_cc, use_nack, extensions);
+ RecreateAudioReceiveStream(local_ssrc,
+ use_transport_cc,
+ use_nack,
+ extensions);
}
~WebRtcAudioReceiveStream() {
@@ -1298,21 +1300,31 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
call_->DestroyAudioReceiveStream(stream_);
}
- void RecreateAudioReceiveStream(
- const std::vector<webrtc::RtpExtension>& extensions) {
+ void RecreateAudioReceiveStream(uint32_t local_ssrc) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
- RecreateAudioReceiveStream(config_.rtp.transport_cc,
+ RecreateAudioReceiveStream(local_ssrc,
+ config_.rtp.transport_cc,
config_.rtp.nack.rtp_history_ms != 0,
- extensions);
+ config_.rtp.extensions);
}
void RecreateAudioReceiveStream(bool use_transport_cc, bool use_nack) {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
- RecreateAudioReceiveStream(use_transport_cc,
+ RecreateAudioReceiveStream(config_.rtp.local_ssrc,
+ use_transport_cc,
use_nack,
config_.rtp.extensions);
}
+ void RecreateAudioReceiveStream(
+ const std::vector<webrtc::RtpExtension>& extensions) {
+ RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
+ RecreateAudioReceiveStream(config_.rtp.local_ssrc,
+ config_.rtp.transport_cc,
+ config_.rtp.nack.rtp_history_ms != 0,
+ extensions);
+ }
+
webrtc::AudioReceiveStream::Stats GetStats() const {
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
RTC_DCHECK(stream_);
@@ -1331,6 +1343,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
private:
void RecreateAudioReceiveStream(
+ uint32_t local_ssrc,
bool use_transport_cc,
bool use_nack,
const std::vector<webrtc::RtpExtension>& extensions) {
@@ -1339,6 +1352,7 @@ class WebRtcVoiceMediaChannel::WebRtcAudioReceiveStream {
call_->DestroyAudioReceiveStream(stream_);
stream_ = nullptr;
}
+ config_.rtp.local_ssrc = local_ssrc;
config_.rtp.transport_cc = use_transport_cc;
config_.rtp.nack.rtp_history_ms = use_nack ? kNackRtpHistoryMs : 0;
config_.rtp.extensions = extensions;
@@ -2022,17 +2036,16 @@ bool WebRtcVoiceMediaChannel::AddSendStream(const StreamParams& sp) {
return false;
}
- // At this point the channel's local SSRC has been updated. If the channel is
- // the first send channel make sure that all the receive channels are updated
- // with the same SSRC in order to send receiver reports.
+ // At this point the stream's local SSRC has been updated. If it is the first
+ // send stream, make sure that all the receive streams are updated with the
+ // same SSRC in order to send receiver reports.
if (send_streams_.size() == 1) {
receiver_reports_ssrc_ = ssrc;
- for (const auto& stream : recv_streams_) {
- int recv_channel = stream.second->channel();
- if (engine()->voe()->rtp()->SetLocalSSRC(recv_channel, ssrc) != 0) {
- LOG_RTCERR2(SetLocalSSRC, recv_channel, ssrc);
- return false;
- }
+ for (const auto& kv : recv_streams_) {
+ // TODO(solenberg): Allow applications to set the RTCP SSRC of receive
+ // streams instead, so we can avoid recreating the streams here.
+ kv.second->RecreateAudioReceiveStream(ssrc);
+ int recv_channel = kv.second->channel();
engine()->voe()->base()->AssociateSendChannel(recv_channel, channel);
LOG(LS_INFO) << "VoiceEngine channel #" << recv_channel
<< " is associated with channel #" << channel << ".";
« no previous file with comments | « webrtc/media/engine/webrtcvoe.h ('k') | webrtc/media/engine/webrtcvoiceengine_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698