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

Side by Side Diff: webrtc/api/webrtcsession.cc

Issue 1717583002: Non-constraint interfaces for all constrainable interfaces (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix an ambiguous function Created 4 years, 10 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/api/webrtcsession.h" 11 #include "webrtc/api/webrtcsession.h"
12 12
13 #include <limits.h> 13 #include <limits.h>
14 14
15 #include <algorithm> 15 #include <algorithm>
16 #include <set> 16 #include <set>
17 #include <utility> 17 #include <utility>
18 #include <vector> 18 #include <vector>
19 19
20 #include "webrtc/api/jsepicecandidate.h" 20 #include "webrtc/api/jsepicecandidate.h"
21 #include "webrtc/api/jsepsessiondescription.h" 21 #include "webrtc/api/jsepsessiondescription.h"
22 #include "webrtc/api/mediaconstraintsinterface.h"
23 #include "webrtc/api/peerconnectioninterface.h" 22 #include "webrtc/api/peerconnectioninterface.h"
24 #include "webrtc/api/sctputils.h" 23 #include "webrtc/api/sctputils.h"
25 #include "webrtc/api/webrtcsessiondescriptionfactory.h" 24 #include "webrtc/api/webrtcsessiondescriptionfactory.h"
26 #include "webrtc/audio/audio_sink.h" 25 #include "webrtc/audio/audio_sink.h"
27 #include "webrtc/base/basictypes.h" 26 #include "webrtc/base/basictypes.h"
28 #include "webrtc/base/checks.h" 27 #include "webrtc/base/checks.h"
29 #include "webrtc/base/helpers.h" 28 #include "webrtc/base/helpers.h"
30 #include "webrtc/base/logging.h" 29 #include "webrtc/base/logging.h"
31 #include "webrtc/base/stringencode.h" 30 #include "webrtc/base/stringencode.h"
32 #include "webrtc/base/stringutils.h" 31 #include "webrtc/base/stringutils.h"
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 const std::string& desc) { 414 const std::string& desc) {
416 std::ostringstream ret; 415 std::ostringstream ret;
417 ret << error << " " << desc; 416 ret << error << " " << desc;
418 return ret.str(); 417 return ret.str();
419 } 418 }
420 419
421 static std::string MakeTdErrorString(const std::string& desc) { 420 static std::string MakeTdErrorString(const std::string& desc) {
422 return MakeErrorString(kPushDownTDFailed, desc); 421 return MakeErrorString(kPushDownTDFailed, desc);
423 } 422 }
424 423
425 // Set |option| to the highest-priority value of |key| in the optional
426 // constraints if the key is found and has a valid value.
427 template <typename T>
428 static void SetOptionFromOptionalConstraint(
429 const MediaConstraintsInterface* constraints,
430 const std::string& key,
431 rtc::Optional<T>* option) {
432 if (!constraints) {
433 return;
434 }
435 std::string string_value;
436 T value;
437 if (constraints->GetOptional().FindFirst(key, &string_value)) {
438 if (rtc::FromString(string_value, &value)) {
439 *option = rtc::Optional<T>(value);
440 }
441 }
442 }
443
444 uint32_t ConvertIceTransportTypeToCandidateFilter( 424 uint32_t ConvertIceTransportTypeToCandidateFilter(
445 PeerConnectionInterface::IceTransportsType type) { 425 PeerConnectionInterface::IceTransportsType type) {
446 switch (type) { 426 switch (type) {
447 case PeerConnectionInterface::kNone: 427 case PeerConnectionInterface::kNone:
448 return cricket::CF_NONE; 428 return cricket::CF_NONE;
449 case PeerConnectionInterface::kRelay: 429 case PeerConnectionInterface::kRelay:
450 return cricket::CF_RELAY; 430 return cricket::CF_RELAY;
451 case PeerConnectionInterface::kNoHost: 431 case PeerConnectionInterface::kNoHost:
452 return (cricket::CF_ALL & ~cricket::CF_HOST); 432 return (cricket::CF_ALL & ~cricket::CF_HOST);
453 case PeerConnectionInterface::kAll: 433 case PeerConnectionInterface::kAll:
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 SignalDataChannelDestroyed(); 552 SignalDataChannelDestroyed();
573 channel_manager_->DestroyDataChannel(data_channel_.release()); 553 channel_manager_->DestroyDataChannel(data_channel_.release());
574 } 554 }
575 SignalDestroyed(); 555 SignalDestroyed();
576 556
577 LOG(LS_INFO) << "Session: " << id() << " is destroyed."; 557 LOG(LS_INFO) << "Session: " << id() << " is destroyed.";
578 } 558 }
579 559
580 bool WebRtcSession::Initialize( 560 bool WebRtcSession::Initialize(
581 const PeerConnectionFactoryInterface::Options& options, 561 const PeerConnectionFactoryInterface::Options& options,
582 const MediaConstraintsInterface* constraints,
583 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store, 562 rtc::scoped_ptr<DtlsIdentityStoreInterface> dtls_identity_store,
584 const PeerConnectionInterface::RTCConfiguration& rtc_configuration) { 563 const PeerConnectionInterface::RTCConfiguration& rtc_configuration) {
585 bundle_policy_ = rtc_configuration.bundle_policy; 564 bundle_policy_ = rtc_configuration.bundle_policy;
586 rtcp_mux_policy_ = rtc_configuration.rtcp_mux_policy; 565 rtcp_mux_policy_ = rtc_configuration.rtcp_mux_policy;
587 transport_controller_->SetSslMaxProtocolVersion(options.ssl_max_version); 566 transport_controller_->SetSslMaxProtocolVersion(options.ssl_max_version);
588 567
589 // Obtain a certificate from RTCConfiguration if any were provided (optional). 568 // Obtain a certificate from RTCConfiguration if any were provided (optional).
590 rtc::scoped_refptr<rtc::RTCCertificate> certificate; 569 rtc::scoped_refptr<rtc::RTCCertificate> certificate;
591 if (!rtc_configuration.certificates.empty()) { 570 if (!rtc_configuration.certificates.empty()) {
592 // TODO(hbos,torbjorng): Decide on certificate-selection strategy instead of 571 // TODO(hbos,torbjorng): Decide on certificate-selection strategy instead of
593 // just picking the first one. The decision should be made based on the DTLS 572 // just picking the first one. The decision should be made based on the DTLS
594 // handshake. The DTLS negotiations need to know about all certificates. 573 // handshake. The DTLS negotiations need to know about all certificates.
595 certificate = rtc_configuration.certificates[0]; 574 certificate = rtc_configuration.certificates[0];
596 } 575 }
597 576
598 SetIceConfig(ParseIceConfig(rtc_configuration)); 577 SetIceConfig(ParseIceConfig(rtc_configuration));
599 578
600 // TODO(perkj): Take |constraints| into consideration. Return false if not all
601 // mandatory constraints can be fulfilled. Note that |constraints|
602 // can be null.
603 bool value;
604
605 if (options.disable_encryption) { 579 if (options.disable_encryption) {
606 dtls_enabled_ = false; 580 dtls_enabled_ = false;
607 } else { 581 } else {
608 // Enable DTLS by default if we have an identity store or a certificate. 582 // Enable DTLS by default if we have an identity store or a certificate.
609 dtls_enabled_ = (dtls_identity_store || certificate); 583 dtls_enabled_ = (dtls_identity_store || certificate);
610 // |constraints| can override the default |dtls_enabled_| value. 584 // |rtc_configuration| can override the default |dtls_enabled_| value.
611 if (FindConstraint(constraints, MediaConstraintsInterface::kEnableDtlsSrtp, 585 if (rtc_configuration.override_enable_dtls_srtp) {
612 &value, nullptr)) { 586 dtls_enabled_ = rtc_configuration.enable_dtls_srtp;
613 dtls_enabled_ = value;
614 } 587 }
615 } 588 }
616 589
617 // Enable creation of RTP data channels if the kEnableRtpDataChannels is set. 590 // Enable creation of RTP data channels if the kEnableRtpDataChannels is set.
618 // It takes precendence over the disable_sctp_data_channels 591 // It takes precendence over the disable_sctp_data_channels
619 // PeerConnectionFactoryInterface::Options. 592 // PeerConnectionFactoryInterface::Options.
620 if (FindConstraint( 593 if (rtc_configuration.enable_rtp_data_channel) {
621 constraints, MediaConstraintsInterface::kEnableRtpDataChannels,
622 &value, NULL) && value) {
623 LOG(LS_INFO) << "Allowing RTP data engine.";
624 data_channel_type_ = cricket::DCT_RTP; 594 data_channel_type_ = cricket::DCT_RTP;
625 } else { 595 } else {
626 // DTLS has to be enabled to use SCTP. 596 // DTLS has to be enabled to use SCTP.
627 if (!options.disable_sctp_data_channels && dtls_enabled_) { 597 if (!options.disable_sctp_data_channels && dtls_enabled_) {
628 LOG(LS_INFO) << "Allowing SCTP data engine.";
629 data_channel_type_ = cricket::DCT_SCTP; 598 data_channel_type_ = cricket::DCT_SCTP;
630 } 599 }
631 } 600 }
632 601
633 // Find Suspend Below Min Bitrate constraint. 602 // Find Suspend Below Min Bitrate constraint.
634 if (FindConstraint( 603 if (rtc_configuration.override_suspend_below_min_bitrate) {
635 constraints, 604 video_options_.suspend_below_min_bitrate =
636 MediaConstraintsInterface::kEnableVideoSuspendBelowMinBitrate, 605 rtc::Optional<bool>(rtc_configuration.suspend_below_min_bitrate);
637 &value,
638 NULL)) {
639 video_options_.suspend_below_min_bitrate = rtc::Optional<bool>(value);
640 } 606 }
641 607
642 SetOptionFromOptionalConstraint(constraints, 608 if (rtc_configuration.override_screencast_min_bitrate) {
643 MediaConstraintsInterface::kScreencastMinBitrate, 609 video_options_.screencast_min_bitrate_kbps =
644 &video_options_.screencast_min_bitrate_kbps); 610 rtc::Optional<int>(rtc_configuration.screencast_min_bitrate);
645 611 }
646 SetOptionFromOptionalConstraint(constraints, 612 if (rtc_configuration.override_combined_audio_video_bwe) {
647 MediaConstraintsInterface::kCombinedAudioVideoBwe, 613 audio_options_.combined_audio_video_bwe =
648 &audio_options_.combined_audio_video_bwe); 614 rtc::Optional<bool>(rtc_configuration.combined_audio_video_bwe);
615 }
649 616
650 audio_options_.audio_jitter_buffer_max_packets = 617 audio_options_.audio_jitter_buffer_max_packets =
651 rtc::Optional<int>(rtc_configuration.audio_jitter_buffer_max_packets); 618 rtc::Optional<int>(rtc_configuration.audio_jitter_buffer_max_packets);
652 619
653 audio_options_.audio_jitter_buffer_fast_accelerate = rtc::Optional<bool>( 620 audio_options_.audio_jitter_buffer_fast_accelerate = rtc::Optional<bool>(
654 rtc_configuration.audio_jitter_buffer_fast_accelerate); 621 rtc_configuration.audio_jitter_buffer_fast_accelerate);
655 622
656 if (!dtls_enabled_) { 623 if (!dtls_enabled_) {
657 // Construct with DTLS disabled. 624 // Construct with DTLS disabled.
658 webrtc_session_desc_factory_.reset(new WebRtcSessionDescriptionFactory( 625 webrtc_session_desc_factory_.reset(new WebRtcSessionDescriptionFactory(
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 685
719 void WebRtcSession::CreateOffer( 686 void WebRtcSession::CreateOffer(
720 CreateSessionDescriptionObserver* observer, 687 CreateSessionDescriptionObserver* observer,
721 const PeerConnectionInterface::RTCOfferAnswerOptions& options, 688 const PeerConnectionInterface::RTCOfferAnswerOptions& options,
722 const cricket::MediaSessionOptions& session_options) { 689 const cricket::MediaSessionOptions& session_options) {
723 webrtc_session_desc_factory_->CreateOffer(observer, options, session_options); 690 webrtc_session_desc_factory_->CreateOffer(observer, options, session_options);
724 } 691 }
725 692
726 void WebRtcSession::CreateAnswer( 693 void WebRtcSession::CreateAnswer(
727 CreateSessionDescriptionObserver* observer, 694 CreateSessionDescriptionObserver* observer,
728 const MediaConstraintsInterface* constraints,
729 const cricket::MediaSessionOptions& session_options) { 695 const cricket::MediaSessionOptions& session_options) {
730 webrtc_session_desc_factory_->CreateAnswer(observer, constraints, 696 webrtc_session_desc_factory_->CreateAnswer(observer, session_options);
731 session_options);
732 } 697 }
733 698
734 bool WebRtcSession::SetLocalDescription(SessionDescriptionInterface* desc, 699 bool WebRtcSession::SetLocalDescription(SessionDescriptionInterface* desc,
735 std::string* err_desc) { 700 std::string* err_desc) {
736 ASSERT(signaling_thread()->IsCurrent()); 701 ASSERT(signaling_thread()->IsCurrent());
737 702
738 // Takes the ownership of |desc| regardless of the result. 703 // Takes the ownership of |desc| regardless of the result.
739 rtc::scoped_ptr<SessionDescriptionInterface> desc_temp(desc); 704 rtc::scoped_ptr<SessionDescriptionInterface> desc_temp(desc);
740 705
741 // Validate SDP. 706 // Validate SDP.
(...skipping 1401 matching lines...) Expand 10 before | Expand all | Expand 10 after
2143 } 2108 }
2144 } 2109 }
2145 2110
2146 void WebRtcSession::OnSentPacket_w(cricket::TransportChannel* channel, 2111 void WebRtcSession::OnSentPacket_w(cricket::TransportChannel* channel,
2147 const rtc::SentPacket& sent_packet) { 2112 const rtc::SentPacket& sent_packet) {
2148 RTC_DCHECK(worker_thread()->IsCurrent()); 2113 RTC_DCHECK(worker_thread()->IsCurrent());
2149 media_controller_->call_w()->OnSentPacket(sent_packet); 2114 media_controller_->call_w()->OnSentPacket(sent_packet);
2150 } 2115 }
2151 2116
2152 } // namespace webrtc 2117 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698