| Index: webrtc/ortc/rtptransportcontrolleradapter.cc
|
| diff --git a/webrtc/ortc/rtptransportcontrolleradapter.cc b/webrtc/ortc/rtptransportcontrolleradapter.cc
|
| index 5e0b62112357ba849fec33d5e3428e1e5c235932..f2ad995ab31abb2e96824b67049cc9855b4e2857 100644
|
| --- a/webrtc/ortc/rtptransportcontrolleradapter.cc
|
| +++ b/webrtc/ortc/rtptransportcontrolleradapter.cc
|
| @@ -129,11 +129,16 @@ RtpTransportControllerAdapter::~RtpTransportControllerAdapter() {
|
|
|
| RTCErrorOr<std::unique_ptr<RtpTransportInterface>>
|
| RtpTransportControllerAdapter::CreateProxiedRtpTransport(
|
| - const RtcpParameters& rtcp_parameters,
|
| + const RtpTransportParameters& parameters,
|
| PacketTransportInterface* rtp,
|
| PacketTransportInterface* rtcp) {
|
| - auto result =
|
| - RtpTransportAdapter::CreateProxied(rtcp_parameters, rtp, rtcp, this);
|
| + if (!transport_proxies_.empty() && (parameters.keepalive != keepalive_)) {
|
| + LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
|
| + "Cannot create RtpTransport with different keep-alive "
|
| + "from the RtpTransports already associated with this "
|
| + "transport controller.");
|
| + }
|
| + auto result = RtpTransportAdapter::CreateProxied(parameters, rtp, rtcp, this);
|
| if (result.ok()) {
|
| transport_proxies_.push_back(result.value().get());
|
| transport_proxies_.back()->GetInternal()->SignalDestroyed.connect(
|
| @@ -144,11 +149,11 @@ RtpTransportControllerAdapter::CreateProxiedRtpTransport(
|
|
|
| RTCErrorOr<std::unique_ptr<SrtpTransportInterface>>
|
| RtpTransportControllerAdapter::CreateProxiedSrtpTransport(
|
| - const RtcpParameters& rtcp_parameters,
|
| + const RtpTransportParameters& parameters,
|
| PacketTransportInterface* rtp,
|
| PacketTransportInterface* rtcp) {
|
| auto result =
|
| - RtpTransportAdapter::CreateSrtpProxied(rtcp_parameters, rtp, rtcp, this);
|
| + RtpTransportAdapter::CreateSrtpProxied(parameters, rtp, rtcp, this);
|
| if (result.ok()) {
|
| transport_proxies_.push_back(result.value().get());
|
| transport_proxies_.back()->GetInternal()->SignalDestroyed.connect(
|
| @@ -219,12 +224,26 @@ RtpTransportControllerAdapter::GetTransports() const {
|
| return transport_proxies_;
|
| }
|
|
|
| -RTCError RtpTransportControllerAdapter::SetRtcpParameters(
|
| - const RtcpParameters& parameters,
|
| +RTCError RtpTransportControllerAdapter::SetRtpTransportParameters(
|
| + const RtpTransportParameters& parameters,
|
| RtpTransportInterface* inner_transport) {
|
| + if ((video_channel_ != nullptr || voice_channel_ != nullptr) &&
|
| + (parameters.keepalive != keepalive_)) {
|
| + LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_MODIFICATION,
|
| + "Cannot change keep-alive settings after creating "
|
| + "media streams or additional transports for the same "
|
| + "transport controller.");
|
| + }
|
| + // Call must be configured on the worker thread.
|
| + worker_thread_->Invoke<void>(
|
| + RTC_FROM_HERE,
|
| + rtc::Bind(&RtpTransportControllerAdapter::SetRtpTransportParameters_w,
|
| + this, parameters));
|
| +
|
| do {
|
| if (inner_transport == inner_audio_transport_) {
|
| - CopyRtcpParametersToDescriptions(parameters, &local_audio_description_,
|
| + CopyRtcpParametersToDescriptions(parameters.rtcp,
|
| + &local_audio_description_,
|
| &remote_audio_description_);
|
| if (!voice_channel_->SetLocalContent(&local_audio_description_,
|
| cricket::CA_OFFER, nullptr)) {
|
| @@ -235,7 +254,8 @@ RTCError RtpTransportControllerAdapter::SetRtcpParameters(
|
| break;
|
| }
|
| } else if (inner_transport == inner_video_transport_) {
|
| - CopyRtcpParametersToDescriptions(parameters, &local_video_description_,
|
| + CopyRtcpParametersToDescriptions(parameters.rtcp,
|
| + &local_video_description_,
|
| &remote_video_description_);
|
| if (!video_channel_->SetLocalContent(&local_video_description_,
|
| cricket::CA_OFFER, nullptr)) {
|
| @@ -252,6 +272,11 @@ RTCError RtpTransportControllerAdapter::SetRtcpParameters(
|
| "Failed to apply new RTCP parameters.");
|
| }
|
|
|
| +void RtpTransportControllerAdapter::SetRtpTransportParameters_w(
|
| + const RtpTransportParameters& parameters) {
|
| + call_send_rtp_transport_controller_->SetKeepAliveConfig(parameters.keepalive);
|
| +}
|
| +
|
| RTCError RtpTransportControllerAdapter::ValidateAndApplyAudioSenderParameters(
|
| const RtpParameters& parameters,
|
| uint32_t* primary_ssrc) {
|
| @@ -270,7 +295,7 @@ RTCError RtpTransportControllerAdapter::ValidateAndApplyAudioSenderParameters(
|
| }
|
|
|
| auto stream_params_result = MakeSendStreamParamsVec(
|
| - parameters.encodings, inner_audio_transport_->GetRtcpParameters().cname,
|
| + parameters.encodings, inner_audio_transport_->GetParameters().rtcp.cname,
|
| local_audio_description_);
|
| if (!stream_params_result.ok()) {
|
| return stream_params_result.MoveError();
|
| @@ -359,7 +384,7 @@ RTCError RtpTransportControllerAdapter::ValidateAndApplyVideoSenderParameters(
|
| }
|
|
|
| auto stream_params_result = MakeSendStreamParamsVec(
|
| - parameters.encodings, inner_video_transport_->GetRtcpParameters().cname,
|
| + parameters.encodings, inner_video_transport_->GetParameters().rtcp.cname,
|
| local_video_description_);
|
| if (!stream_params_result.ok()) {
|
| return stream_params_result.MoveError();
|
| @@ -590,7 +615,8 @@ RtpTransportControllerAdapter::RtpTransportControllerAdapter(
|
| worker_thread_(worker_thread),
|
| media_config_(config),
|
| channel_manager_(channel_manager),
|
| - event_log_(event_log) {
|
| + event_log_(event_log),
|
| + call_send_rtp_transport_controller_(nullptr) {
|
| RTC_DCHECK_RUN_ON(signaling_thread_);
|
| RTC_DCHECK(channel_manager_);
|
| // Add "dummy" codecs to the descriptions, because the media engines
|
| @@ -626,11 +652,16 @@ void RtpTransportControllerAdapter::Init_w() {
|
| call_config.bitrate_config.start_bitrate_bps = kStartBandwidthBps;
|
| call_config.bitrate_config.max_bitrate_bps = kMaxBandwidthBps;
|
|
|
| - call_.reset(webrtc::Call::Create(call_config));
|
| + call_send_rtp_transport_controller_ =
|
| + new RtpTransportControllerSend(Clock::GetRealTimeClock(), event_log_);
|
| + call_.reset(webrtc::Call::Create(
|
| + call_config, std::unique_ptr<RtpTransportControllerSendInterface>(
|
| + call_send_rtp_transport_controller_)));
|
| }
|
|
|
| void RtpTransportControllerAdapter::Close_w() {
|
| call_.reset();
|
| + call_send_rtp_transport_controller_ = nullptr;
|
| }
|
|
|
| RTCError RtpTransportControllerAdapter::AttachAudioSender(
|
| @@ -656,7 +687,7 @@ RTCError RtpTransportControllerAdapter::AttachAudioSender(
|
| // If setting new transport, extract its RTCP parameters and create voice
|
| // channel.
|
| if (!inner_audio_transport_) {
|
| - CopyRtcpParametersToDescriptions(inner_transport->GetRtcpParameters(),
|
| + CopyRtcpParametersToDescriptions(inner_transport->GetParameters().rtcp,
|
| &local_audio_description_,
|
| &remote_audio_description_);
|
| inner_audio_transport_ = inner_transport;
|
| @@ -691,7 +722,7 @@ RTCError RtpTransportControllerAdapter::AttachVideoSender(
|
| // If setting new transport, extract its RTCP parameters and create video
|
| // channel.
|
| if (!inner_video_transport_) {
|
| - CopyRtcpParametersToDescriptions(inner_transport->GetRtcpParameters(),
|
| + CopyRtcpParametersToDescriptions(inner_transport->GetParameters().rtcp,
|
| &local_video_description_,
|
| &remote_video_description_);
|
| inner_video_transport_ = inner_transport;
|
| @@ -726,7 +757,7 @@ RTCError RtpTransportControllerAdapter::AttachAudioReceiver(
|
| // If setting new transport, extract its RTCP parameters and create voice
|
| // channel.
|
| if (!inner_audio_transport_) {
|
| - CopyRtcpParametersToDescriptions(inner_transport->GetRtcpParameters(),
|
| + CopyRtcpParametersToDescriptions(inner_transport->GetParameters().rtcp,
|
| &local_audio_description_,
|
| &remote_audio_description_);
|
| inner_audio_transport_ = inner_transport;
|
| @@ -761,7 +792,7 @@ RTCError RtpTransportControllerAdapter::AttachVideoReceiver(
|
| // If setting new transport, extract its RTCP parameters and create video
|
| // channel.
|
| if (!inner_video_transport_) {
|
| - CopyRtcpParametersToDescriptions(inner_transport->GetRtcpParameters(),
|
| + CopyRtcpParametersToDescriptions(inner_transport->GetParameters().rtcp,
|
| &local_video_description_,
|
| &remote_video_description_);
|
| inner_video_transport_ = inner_transport;
|
|
|