| Index: webrtc/api/peerconnectioninterface.h
|
| diff --git a/webrtc/api/peerconnectioninterface.h b/webrtc/api/peerconnectioninterface.h
|
| index 6cc8be7112b691f03409d06e0cdf4f4e4f913562..ea94f504423e15c4841ad7feadcab770bbb6e3d9 100644
|
| --- a/webrtc/api/peerconnectioninterface.h
|
| +++ b/webrtc/api/peerconnectioninterface.h
|
| @@ -10,43 +10,59 @@
|
|
|
| // This file contains the PeerConnection interface as defined in
|
| // http://dev.w3.org/2011/webrtc/editor/webrtc.html#peer-to-peer-connections.
|
| -// Applications must use this interface to implement peerconnection.
|
| -// PeerConnectionFactory class provides factory methods to create
|
| -// peerconnection, mediastream and media tracks objects.
|
| //
|
| -// The Following steps are needed to setup a typical call using Jsep.
|
| +// The PeerConnectionFactory class provides factory methods to create
|
| +// PeerConnection, MediaStream and MediaStreamTrack objects.
|
| +//
|
| +// The following steps are needed to setup a typical call using WebRTC:
|
| +//
|
| // 1. Create a PeerConnectionFactoryInterface. Check constructors for more
|
| // information about input parameters.
|
| -// 2. Create a PeerConnection object. Provide a configuration string which
|
| -// points either to stun or turn server to generate ICE candidates and provide
|
| -// an object that implements the PeerConnectionObserver interface.
|
| -// 3. Create local MediaStream and MediaTracks using the PeerConnectionFactory
|
| -// and add it to PeerConnection by calling AddStream.
|
| -// 4. Create an offer and serialize it and send it to the remote peer.
|
| -// 5. Once an ice candidate have been found PeerConnection will call the
|
| +//
|
| +// 2. Create a PeerConnection object. Provide a configuration struct which
|
| +// points to STUN and/or TURN servers used to generate ICE candidates, and
|
| +// provide an object that implements the PeerConnectionObserver interface,
|
| +// which is used to receive callbacks from the PeerConnection.
|
| +//
|
| +// 3. Create local MediaStreamTracks using the PeerConnectionFactory and add
|
| +// them to PeerConnection by calling AddTrack (or legacy method, AddStream).
|
| +//
|
| +// 4. Create an offer, call SetLocalDescription with it, serialize it, and send
|
| +// it to the remote peer
|
| +//
|
| +// 5. Once an ICE candidate has been gathered, the PeerConnection will call the
|
| // observer function OnIceCandidate. The candidates must also be serialized and
|
| // sent to the remote peer.
|
| +//
|
| // 6. Once an answer is received from the remote peer, call
|
| -// SetLocalSessionDescription with the offer and SetRemoteSessionDescription
|
| -// with the remote answer.
|
| +// SetRemoteDescription with the remote answer.
|
| +//
|
| // 7. Once a remote candidate is received from the remote peer, provide it to
|
| -// the peerconnection by calling AddIceCandidate.
|
| -
|
| -
|
| -// The Receiver of a call can decide to accept or reject the call.
|
| -// This decision will be taken by the application not peerconnection.
|
| -// If application decides to accept the call
|
| +// the PeerConnection by calling AddIceCandidate.
|
| +//
|
| +// The receiver of a call (assuming the application is "call"-based) can decide
|
| +// to accept or reject the call; this decision will be taken by the application,
|
| +// not the PeerConnection.
|
| +//
|
| +// If the application decides to accept the call, it should:
|
| +//
|
| // 1. Create PeerConnectionFactoryInterface if it doesn't exist.
|
| +//
|
| // 2. Create a new PeerConnection.
|
| +//
|
| // 3. Provide the remote offer to the new PeerConnection object by calling
|
| -// SetRemoteSessionDescription.
|
| +// SetRemoteDescription.
|
| +//
|
| // 4. Generate an answer to the remote offer by calling CreateAnswer and send it
|
| // back to the remote peer.
|
| +//
|
| // 5. Provide the local answer to the new PeerConnection by calling
|
| -// SetLocalSessionDescription with the answer.
|
| -// 6. Provide the remote ice candidates by calling AddIceCandidate.
|
| -// 7. Once a candidate have been found PeerConnection will call the observer
|
| -// function OnIceCandidate. Send these candidates to the remote peer.
|
| +// SetLocalDescription with the answer.
|
| +//
|
| +// 6. Provide the remote ICE candidates by calling AddIceCandidate.
|
| +//
|
| +// 7. Once a candidate has been gathered, the PeerConnection will call the
|
| +// observer function OnIceCandidate. Send these candidates to the remote peer.
|
|
|
| #ifndef WEBRTC_API_PEERCONNECTIONINTERFACE_H_
|
| #define WEBRTC_API_PEERCONNECTIONINTERFACE_H_
|
| @@ -341,53 +357,143 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| static const int kAudioJitterBufferMaxPackets = 50;
|
| // ICE connection receiving timeout for aggressive configuration.
|
| static const int kAggressiveIceConnectionReceivingTimeout = 1000;
|
| - // TODO(pthatcher): Rename this ice_transport_type, but update
|
| - // Chromium at the same time.
|
| - IceTransportsType type = kAll;
|
| +
|
| + ////////////////////////////////////////////////////////////////////////
|
| + // The below few fields mirror the standard RTCConfiguration dictionary:
|
| + // https://www.w3.org/TR/webrtc/#rtcconfiguration-dictionary
|
| + ////////////////////////////////////////////////////////////////////////
|
| +
|
| // TODO(pthatcher): Rename this ice_servers, but update Chromium
|
| // at the same time.
|
| IceServers servers;
|
| + // TODO(pthatcher): Rename this ice_transport_type, but update
|
| + // Chromium at the same time.
|
| + IceTransportsType type = kAll;
|
| BundlePolicy bundle_policy = kBundlePolicyBalanced;
|
| RtcpMuxPolicy rtcp_mux_policy = kRtcpMuxPolicyRequire;
|
| + std::vector<rtc::scoped_refptr<rtc::RTCCertificate>> certificates;
|
| + int ice_candidate_pool_size = 0;
|
| +
|
| + //////////////////////////////////////////////////////////////////////////
|
| + // The below fields correspond to constraints from the deprecated
|
| + // constraints interface for constructing a PeerConnection.
|
| + //
|
| + // rtc::Optional fields can be "missing", in which case the implementation
|
| + // default will be used.
|
| + //////////////////////////////////////////////////////////////////////////
|
| +
|
| + // If set to true, don't gather IPv6 ICE candidates.
|
| + // TODO(deadbeef): Remove this? IPv6 support has long stopped being
|
| + // experimental
|
| + bool disable_ipv6 = false;
|
| +
|
| + // If set to true, use RTP data channels instead of SCTP.
|
| + // TODO(deadbeef): Remove this. We no longer commit to supporting RTP data
|
| + // channels, though some applications are still working on moving off of
|
| + // them.
|
| + bool enable_rtp_data_channel = false;
|
| +
|
| + // Minimum bitrate at which screencast video tracks will be encoded at.
|
| + // This means adding padding bits up to this bitrate, which can help
|
| + // when switching from a static scene to one with motion.
|
| + rtc::Optional<int> screencast_min_bitrate;
|
| +
|
| + // Use new combined audio/video bandwidth estimation?
|
| + rtc::Optional<bool> combined_audio_video_bwe;
|
| +
|
| + // Can be used to disable DTLS-SRTP. This should never be done, but can be
|
| + // useful for testing purposes, for example in setting up a loopback call
|
| + // with a single PeerConnection.
|
| + rtc::Optional<bool> enable_dtls_srtp;
|
| +
|
| + /////////////////////////////////////////////////
|
| + // The below fields are not part of the standard.
|
| + /////////////////////////////////////////////////
|
| +
|
| + // Can be used to disable TCP candidate generation.
|
| TcpCandidatePolicy tcp_candidate_policy = kTcpCandidatePolicyEnabled;
|
| +
|
| + // Can be used to avoid gathering candidates for a "higher cost" network,
|
| + // if a lower cost one exists. For example, if both Wi-Fi and cellular
|
| + // interfaces are available, this could be used to avoid using the cellular
|
| + // interface.
|
| CandidateNetworkPolicy candidate_network_policy =
|
| kCandidateNetworkPolicyAll;
|
| +
|
| + // The maximum number of packets that can be stored in the NetEq audio
|
| + // jitter buffer. Can be reduced to lower tolerated audio latency.
|
| int audio_jitter_buffer_max_packets = kAudioJitterBufferMaxPackets;
|
| +
|
| + // Whether to use the NetEq "fast mode" which will accelerate audio quicker
|
| + // if it falls behind.
|
| bool audio_jitter_buffer_fast_accelerate = false;
|
| - int ice_connection_receiving_timeout = kUndefined; // ms
|
| - int ice_backup_candidate_pair_ping_interval = kUndefined; // ms
|
| +
|
| + // Timeout in milliseconds before an ICE candidate pair is considered to be
|
| + // "not receiving", after which a lower priority candidate pair may be
|
| + // selected.
|
| + int ice_connection_receiving_timeout = kUndefined;
|
| +
|
| + // Interval in milliseconds at which an ICE "backup" candidate pair will be
|
| + // pinged. This is a candidate pair which is not actively in use, but may
|
| + // be switched to if the active candidate pair becomes unusable.
|
| + //
|
| + // This is relevant mainly to Wi-Fi/cell handoff; the application may not
|
| + // want this backup cellular candidate pair pinged frequently, since it
|
| + // consumes data/battery.
|
| + int ice_backup_candidate_pair_ping_interval = kUndefined;
|
| +
|
| + // Can be used to enable continual gathering, which means new candidates
|
| + // will be gathered as network interfaces change. Note that if continual
|
| + // gathering is used, the candidate removal API should also be used, to
|
| + // avoid an ever-growing list of candidates.
|
| ContinualGatheringPolicy continual_gathering_policy = GATHER_ONCE;
|
| - std::vector<rtc::scoped_refptr<rtc::RTCCertificate>> certificates;
|
| +
|
| + // If set to true, candidate pairs will be pinged in order of most likely
|
| + // to work (which means using a TURN server, generally), rather than in
|
| + // standard priority order.
|
| bool prioritize_most_likely_ice_candidate_pairs = false;
|
| +
|
| struct cricket::MediaConfig media_config;
|
| - // Flags corresponding to values set by constraint flags.
|
| - // rtc::Optional flags can be "missing", in which case the webrtc
|
| - // default applies.
|
| - bool disable_ipv6 = false;
|
| - bool enable_rtp_data_channel = false;
|
| +
|
| + // This doesn't currently work. For a while we were working on adding QUIC
|
| + // data channel support to PeerConnection, but decided on a different
|
| + // approach, and that code hasn't been updated for a while.
|
| bool enable_quic = false;
|
| - rtc::Optional<int> screencast_min_bitrate;
|
| - rtc::Optional<bool> combined_audio_video_bwe;
|
| - rtc::Optional<bool> enable_dtls_srtp;
|
| - int ice_candidate_pool_size = 0;
|
| +
|
| + // If set to true, only one preferred TURN allocation will be used per
|
| + // network interface. UDP is preferred over TCP and IPv6 over IPv4. This
|
| + // can be used to cut down on the number of candidate pairings.
|
| bool prune_turn_ports = false;
|
| +
|
| // If set to true, this means the ICE transport should presume TURN-to-TURN
|
| // candidate pairs will succeed, even before a binding response is received.
|
| + // This can be used to optimize the initial connection time, since the DTLS
|
| + // handshake can begin immediately.
|
| bool presume_writable_when_fully_relayed = false;
|
| +
|
| // If true, "renomination" will be added to the ice options in the transport
|
| // description.
|
| + // See: https://tools.ietf.org/html/draft-thatcher-ice-renomination-00
|
| bool enable_ice_renomination = false;
|
| - // If true, ICE role is redetermined when peerconnection sets a local
|
| - // transport description that indicates an ICE restart.
|
| +
|
| + // If true, the ICE role is re-determined when the PeerConnection sets a
|
| + // local transport description that indicates an ICE restart.
|
| + //
|
| + // This is standard RFC5245 ICE behavior, but causes unnecessary role
|
| + // thrashing, so an application may wish to avoid it. This role
|
| + // re-determining was removed in ICEbis (ICE v2).
|
| bool redetermine_role_on_ice_restart = true;
|
| +
|
| // If set, the min interval (max rate) at which we will send ICE checks
|
| // (STUN pings), in milliseconds.
|
| rtc::Optional<int> ice_check_min_interval;
|
| +
|
| //
|
| // Don't forget to update operator== if adding something.
|
| //
|
| };
|
|
|
| + // See: https://www.w3.org/TR/webrtc/#idl-def-rtcofferansweroptions
|
| struct RTCOfferAnswerOptions {
|
| static const int kUndefined = -1;
|
| static const int kMaxOfferToReceiveMedia = 1;
|
| @@ -395,10 +501,23 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| // The default value for constraint offerToReceiveX:true.
|
| static const int kOfferToReceiveMediaTrue = 1;
|
|
|
| + // These have been removed from the standard in favor of the "transceiver"
|
| + // API, but given that we don't support that API, we still have them here.
|
| + //
|
| + // offer_to_receive_X set to 1 will cause a media description to be
|
| + // generated in the offer, even if no tracks of that type have been added.
|
| + // Values greater than 1 are treated the same.
|
| + //
|
| + // If set to 0, the generated directional attribute will not include the
|
| + // "recv" direction (meaning it will be "sendonly" or "inactive".
|
| int offer_to_receive_video = kUndefined;
|
| int offer_to_receive_audio = kUndefined;
|
| +
|
| bool voice_activity_detection = true;
|
| bool ice_restart = false;
|
| +
|
| + // If true, will offer to BUNDLE audio/video/data together. Not to be
|
| + // confused with RTCP mux (multiplexing RTP and RTCP together).
|
| bool use_rtp_mux = true;
|
|
|
| RTCOfferAnswerOptions() = default;
|
| @@ -435,16 +554,25 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| // Add a new MediaStream to be sent on this PeerConnection.
|
| // Note that a SessionDescription negotiation is needed before the
|
| // remote peer can receive the stream.
|
| + //
|
| + // This has been removed from the standard in favor of a track-based API. So,
|
| + // this is equivalent to simply calling AddTrack for each track within the
|
| + // stream, with the one difference that if "stream->AddTrack(...)" is called
|
| + // later, the PeerConnection will automatically pick up the new track. Though
|
| + // this functionality will be deprecated in the future.
|
| virtual bool AddStream(MediaStreamInterface* stream) = 0;
|
|
|
| // Remove a MediaStream from this PeerConnection.
|
| - // Note that a SessionDescription negotiation is need before the
|
| + // Note that a SessionDescription negotiation is needed before the
|
| // remote peer is notified.
|
| virtual void RemoveStream(MediaStreamInterface* stream) = 0;
|
|
|
| // TODO(deadbeef): Make the following two methods pure virtual once
|
| // implemented by all subclasses of PeerConnectionInterface.
|
| - // Add a new MediaStreamTrack to be sent on this PeerConnection.
|
| +
|
| + // Add a new MediaStreamTrack to be sent on this PeerConnection, and return
|
| + // the newly created RtpSender.
|
| + //
|
| // |streams| indicates which stream labels the track should be associated
|
| // with.
|
| virtual rtc::scoped_refptr<RtpSenderInterface> AddTrack(
|
| @@ -459,13 +587,25 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| return false;
|
| }
|
|
|
| - // Returns pointer to the created DtmfSender on success.
|
| - // Otherwise returns NULL.
|
| + // Returns pointer to a DtmfSender on success. Otherwise returns NULL.
|
| + //
|
| + // This API is no longer part of the standard; instead DtmfSenders are
|
| + // obtained from RtpSenders. Which is what the implementation does; it finds
|
| + // an RtpSender for |track| and just returns its DtmfSender.
|
| virtual rtc::scoped_refptr<DtmfSenderInterface> CreateDtmfSender(
|
| AudioTrackInterface* track) = 0;
|
|
|
| // TODO(deadbeef): Make these pure virtual once all subclasses implement them.
|
| +
|
| + // Creates a sender without a track. Can be used for "early media"/"warmup"
|
| + // use cases, where the application may want to negotiate video attributes
|
| + // before a track is available to send.
|
| + //
|
| + // The standard way to do this would be through "addTransceiver", but we
|
| + // don't support that API yet.
|
| + //
|
| // |kind| must be "audio" or "video".
|
| + //
|
| // |stream_id| is used to populate the msid attribute; if empty, one will
|
| // be generated automatically.
|
| virtual rtc::scoped_refptr<RtpSenderInterface> CreateSender(
|
| @@ -474,11 +614,23 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| return rtc::scoped_refptr<RtpSenderInterface>();
|
| }
|
|
|
| + // Get all RtpSenders, created either through AddStream, AddTrack, or
|
| + // CreateSender. Note that these are "Plan B SDP" RtpSenders, not "Unified
|
| + // Plan SDP" RtpSenders, which means that all senders of a specific media
|
| + // type share the same media description.
|
| virtual std::vector<rtc::scoped_refptr<RtpSenderInterface>> GetSenders()
|
| const {
|
| return std::vector<rtc::scoped_refptr<RtpSenderInterface>>();
|
| }
|
|
|
| + // Get all RtpReceivers, created when a remote description is applied.
|
| + // Note that these are "Plan B SDP" RtpReceivers, not "Unified Plan SDP"
|
| + // RtpReceivers, which means that all receivers of a specific media type
|
| + // share the same media description.
|
| + //
|
| + // It is also possible to have a media description with no associated
|
| + // RtpReceivers, if the directional attribute does not indicate that the
|
| + // remote peer is sending any media.
|
| virtual std::vector<rtc::scoped_refptr<RtpReceiverInterface>> GetReceivers()
|
| const {
|
| return std::vector<rtc::scoped_refptr<RtpReceiverInterface>>();
|
| @@ -494,12 +646,22 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| // be changed to "= 0;".
|
| virtual void GetStats(RTCStatsCollectorCallback* callback) {}
|
|
|
| + // Create a data channel with the provided config, or default config if none
|
| + // is provided. Note that an offer/answer negotiation is still necessary
|
| + // before the data channel can be used.
|
| + //
|
| + // Also, calling CreateDataChannel is the only way to get a data "m=" section
|
| + // in SDP, so it should be done before CreateOffer is called, if the
|
| + // application plans to use data channels.
|
| virtual rtc::scoped_refptr<DataChannelInterface> CreateDataChannel(
|
| const std::string& label,
|
| const DataChannelInit* config) = 0;
|
|
|
| + // Returns the more recently applied description; "pending" if it exists, and
|
| + // otherwise "current". See below.
|
| virtual const SessionDescriptionInterface* local_description() const = 0;
|
| virtual const SessionDescriptionInterface* remote_description() const = 0;
|
| +
|
| // A "current" description the one currently negotiated from a complete
|
| // offer/answer exchange.
|
| virtual const SessionDescriptionInterface* current_local_description() const {
|
| @@ -509,6 +671,7 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| const {
|
| return nullptr;
|
| }
|
| +
|
| // A "pending" description is one that's part of an incomplete offer/answer
|
| // exchange (thus, either an offer or a pranswer). Once the offer/answer
|
| // exchange is finished, the "pending" description will become "current".
|
| @@ -550,14 +713,14 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| // The |observer| callback will be called when done.
|
| virtual void SetRemoteDescription(SetSessionDescriptionObserver* observer,
|
| SessionDescriptionInterface* desc) = 0;
|
| - // Restarts or updates the ICE Agent process of gathering local candidates
|
| - // and pinging remote candidates.
|
| + // Deprecated; Replaced by SetConfiguration.
|
| // TODO(deadbeef): Remove once Chrome is moved over to SetConfiguration.
|
| virtual bool UpdateIce(const IceServers& configuration,
|
| const MediaConstraintsInterface* constraints) {
|
| return false;
|
| }
|
| virtual bool UpdateIce(const IceServers& configuration) { return false; }
|
| +
|
| // TODO(deadbeef): Make this pure virtual once all Chrome subclasses of
|
| // PeerConnectionInterface implement it.
|
| virtual PeerConnectionInterface::RTCConfiguration GetConfiguration() {
|
| @@ -598,20 +761,25 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| const PeerConnectionInterface::RTCConfiguration& config) {
|
| return false;
|
| }
|
| +
|
| // Provides a remote candidate to the ICE Agent.
|
| // A copy of the |candidate| will be created and added to the remote
|
| // description. So the caller of this method still has the ownership of the
|
| // |candidate|.
|
| - // TODO(ronghuawu): Consider to change this so that the AddIceCandidate will
|
| - // take the ownership of the |candidate|.
|
| virtual bool AddIceCandidate(const IceCandidateInterface* candidate) = 0;
|
|
|
| - // Removes a group of remote candidates from the ICE agent.
|
| + // Removes a group of remote candidates from the ICE agent. Needed mainly for
|
| + // continual gathering, to avoid an ever-growing list of candidates as
|
| + // networks come and go.
|
| virtual bool RemoveIceCandidates(
|
| const std::vector<cricket::Candidate>& candidates) {
|
| return false;
|
| }
|
|
|
| + // Register a metric observer (used by chromium).
|
| + //
|
| + // There can only be one observer at a time. Before the observer is
|
| + // destroyed, RegisterUMAOberver(nullptr) should be called.
|
| virtual void RegisterUMAObserver(UMAObserver* observer) = 0;
|
|
|
| // Returns the current SignalingState.
|
| @@ -634,7 +802,8 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| // TODO(ivoc): Make this pure virtual when Chrome is updated.
|
| virtual void StopRtcEventLog() {}
|
|
|
| - // Terminates all media and closes the transport.
|
| + // Terminates all media, closes the transports, and in general releases any
|
| + // resources used by the PeerConnection. This is an irreversible operation.
|
| virtual void Close() = 0;
|
|
|
| protected:
|
| @@ -642,8 +811,8 @@ class PeerConnectionInterface : public rtc::RefCountInterface {
|
| ~PeerConnectionInterface() {}
|
| };
|
|
|
| -// PeerConnection callback interface. Application should implement these
|
| -// methods.
|
| +// PeerConnection callback interface, used for RTCPeerConnection events.
|
| +// Application should implement these methods.
|
| class PeerConnectionObserver {
|
| public:
|
| enum StateType {
|
| @@ -681,6 +850,11 @@ class PeerConnectionObserver {
|
| virtual void OnRenegotiationNeeded() = 0;
|
|
|
| // Called any time the IceConnectionState changes.
|
| + //
|
| + // Note that our ICE states lag behind the standard slightly. The most
|
| + // notable differences include the fact that "failed" occurs after 15
|
| + // seconds, not 30, and this actually represents a combination ICE + DTLS
|
| + // state, so it may be "failed" if DTLS fails while ICE succeeds.
|
| virtual void OnIceConnectionChange(
|
| PeerConnectionInterface::IceConnectionState new_state) = 0;
|
|
|
| @@ -712,39 +886,50 @@ class PeerConnectionObserver {
|
| ~PeerConnectionObserver() {}
|
| };
|
|
|
| -// PeerConnectionFactoryInterface is the factory interface use for creating
|
| -// PeerConnection, MediaStream and media tracks.
|
| -// PeerConnectionFactoryInterface will create required libjingle threads,
|
| -// socket and network manager factory classes for networking.
|
| -// If an application decides to provide its own threads and network
|
| -// implementation of these classes it should use the alternate
|
| -// CreatePeerConnectionFactory method which accepts threads as input and use the
|
| -// CreatePeerConnection version that takes a PortAllocator as an
|
| -// argument.
|
| +// PeerConnectionFactoryInterface is the factory interface used for creating
|
| +// PeerConnection, MediaStream and MediaStreamTrack objects.
|
| +//
|
| +// The simplest method for obtaiing one, CreatePeerConnectionFactory will
|
| +// create the required libjingle threads, socket and network manager factory
|
| +// classes for networking if none are provided, though it requires that the
|
| +// application runs a message loop on the thread that called the method (see
|
| +// explanation below)
|
| +//
|
| +// If an application decides to provide its own threads and/or implementation
|
| +// of networking classes, it should use the alternate
|
| +// CreatePeerConnectionFactory method which accepts threads as input, and use
|
| +// the CreatePeerConnection version that takes a PortAllocator as an argument.
|
| class PeerConnectionFactoryInterface : public rtc::RefCountInterface {
|
| public:
|
| class Options {
|
| public:
|
| - Options()
|
| - : disable_encryption(false),
|
| - disable_sctp_data_channels(false),
|
| - disable_network_monitor(false),
|
| - network_ignore_mask(rtc::kDefaultNetworkIgnoreMask),
|
| - ssl_max_version(rtc::SSL_PROTOCOL_DTLS_12),
|
| - crypto_options(rtc::CryptoOptions::NoGcm()) {}
|
| - bool disable_encryption;
|
| - bool disable_sctp_data_channels;
|
| - bool disable_network_monitor;
|
| + Options() : crypto_options(rtc::CryptoOptions::NoGcm()) {}
|
| +
|
| + // If set to true, created PeerConnections won't enforce any SRTP
|
| + // requirement, allowing unsecured media. Should only be used for
|
| + // testing/debugging.
|
| + bool disable_encryption = false;
|
| +
|
| + // Deprecated. The only effect of setting this to true is that
|
| + // CreateDataChannel will fail, which is not that useful.
|
| + bool disable_sctp_data_channels = false;
|
| +
|
| + // If set to true, any platform-supported network monitoring capability
|
| + // won't be used, and instead networks will only be updated via polling.
|
| + //
|
| + // This only has an effect if a PeerConnection is created with the default
|
| + // PortAllocator implementation.
|
| + bool disable_network_monitor = false;
|
|
|
| // Sets the network types to ignore. For instance, calling this with
|
| // ADAPTER_TYPE_ETHERNET | ADAPTER_TYPE_LOOPBACK will ignore Ethernet and
|
| // loopback interfaces.
|
| - int network_ignore_mask;
|
| + int network_ignore_mask = rtc::kDefaultNetworkIgnoreMask;
|
|
|
| // Sets the maximum supported protocol version. The highest version
|
| // supported by both ends will be used for the connection, i.e. if one
|
| // party supports DTLS 1.0 and the other DTLS 1.2, DTLS 1.0 will be used.
|
| - rtc::SSLProtocolVersion ssl_max_version;
|
| + rtc::SSLProtocolVersion ssl_max_version = rtc::SSL_PROTOCOL_DTLS_12;
|
|
|
| // Sets crypto related options, e.g. enabled cipher suites.
|
| rtc::CryptoOptions crypto_options;
|
| @@ -754,13 +939,15 @@ class PeerConnectionFactoryInterface : public rtc::RefCountInterface {
|
|
|
| virtual rtc::scoped_refptr<PeerConnectionInterface> CreatePeerConnection(
|
| const PeerConnectionInterface::RTCConfiguration& configuration,
|
| - const MediaConstraintsInterface* constraints,
|
| std::unique_ptr<cricket::PortAllocator> allocator,
|
| std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator,
|
| PeerConnectionObserver* observer) = 0;
|
|
|
| + // Deprecated; should use RTCConfiguration for everything that previously
|
| + // used constraints.
|
| virtual rtc::scoped_refptr<PeerConnectionInterface> CreatePeerConnection(
|
| const PeerConnectionInterface::RTCConfiguration& configuration,
|
| + const MediaConstraintsInterface* constraints,
|
| std::unique_ptr<cricket::PortAllocator> allocator,
|
| std::unique_ptr<rtc::RTCCertificateGeneratorInterface> cert_generator,
|
| PeerConnectionObserver* observer) = 0;
|
| @@ -769,7 +956,7 @@ class PeerConnectionFactoryInterface : public rtc::RefCountInterface {
|
| CreateLocalMediaStream(const std::string& label) = 0;
|
|
|
| // Creates a AudioSourceInterface.
|
| - // |constraints| decides audio processing settings but can be NULL.
|
| + // |options| decides audio processing settings.
|
| virtual rtc::scoped_refptr<AudioSourceInterface> CreateAudioSource(
|
| const cricket::AudioOptions& options) = 0;
|
| // Deprecated - use version above.
|
| @@ -777,13 +964,14 @@ class PeerConnectionFactoryInterface : public rtc::RefCountInterface {
|
| virtual rtc::scoped_refptr<AudioSourceInterface> CreateAudioSource(
|
| const MediaConstraintsInterface* constraints) = 0;
|
|
|
| - // Creates a VideoTrackSourceInterface. The new source take ownership of
|
| + // Creates a VideoTrackSourceInterface. The new source takes ownership of
|
| // |capturer|.
|
| + // TODO(deadbeef): Switch to std::unique_ptr<>, to make this transfership of
|
| + // ownership more clear.
|
| virtual rtc::scoped_refptr<VideoTrackSourceInterface> CreateVideoSource(
|
| cricket::VideoCapturer* capturer) = 0;
|
| // A video source creator that allows selection of resolution and frame rate.
|
| - // |constraints| decides video resolution and frame rate but can
|
| - // be NULL.
|
| + // |constraints| decides video resolution and frame rate but can be NULL.
|
| // In the NULL case, use the version above.
|
| virtual rtc::scoped_refptr<VideoTrackSourceInterface> CreateVideoSource(
|
| cricket::VideoCapturer* capturer,
|
| @@ -866,8 +1054,11 @@ CreatePeerConnectionFactory();
|
| // |network_thread|, |worker_thread| and |signaling_thread| are
|
| // the only mandatory parameters.
|
| //
|
| -// If non-null, ownership of |default_adm|, |encoder_factory| and
|
| -// |decoder_factory| are transferred to the returned factory.
|
| +// If non-null, a reference is added to |default_adm|, and ownership of
|
| +// |video_encoder_factory| and |video_decoder_factory| is transferred to the
|
| +// returned factory.
|
| +// TODO(deadbeef): Use rtc::scoped_refptr<> and std::unique_ptr<> to make this
|
| +// ownership transfer and ref counting more obvious.
|
| rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectionFactory(
|
| rtc::Thread* network_thread,
|
| rtc::Thread* worker_thread,
|
|
|