Files
platform-external-webrtc/webrtc/api/ortc/rtptransportinterface.h
deadbeef e814a0dee0 Adding "adapter" ORTC objects on top of ChannelManager/BaseChannel/etc.
This CL adds the following interfaces:
* RtpTransportController
* RtpTransport
* RtpSender
* RtpReceiver

They're implemented on top of the "BaseChannel" object, which is normally used
in a PeerConnection, and roughly corresponds to an SDP "m=" section. As a result
of this, there are several limitations:

* You can only have one of each type of sender and receiver (audio/video) on top
  of the same transport controller.
* The sender/receiver with the same media type must use the same RTP transport.
* You can't change the transport after creating the sender or receiver.
* Some of the parameters aren't supported.

Later, these "adapter" objects will be gradually replaced by real objects that don't
have these limitations, as "BaseChannel", "MediaChannel" and related code is
restructured. In this CL, we essentially have:

ORTC adapter objects -> BaseChannel -> Media engine
PeerConnection -> BaseChannel -> Media engine

And later we hope to have simply:

PeerConnection -> "Real" ORTC objects -> Media engine

See the linked bug for more context.

BUG=webrtc:7013
TBR=stefan@webrtc.org

Review-Url: https://codereview.webrtc.org/2675173003
Cr-Commit-Position: refs/heads/master@{#16842}
2017-02-26 02:15:09 +00:00

104 lines
3.7 KiB
C++

/*
* Copyright 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef WEBRTC_API_ORTC_RTPTRANSPORTINTERFACE_H_
#define WEBRTC_API_ORTC_RTPTRANSPORTINTERFACE_H_
#include <string>
#include "webrtc/api/ortc/packettransportinterface.h"
#include "webrtc/api/rtcerror.h"
#include "webrtc/base/optional.h"
namespace webrtc {
class RtpTransportAdapter;
struct RtcpParameters {
// The SSRC to be used in the "SSRC of packet sender" field. If not set, one
// will be chosen by the implementation.
// TODO(deadbeef): Not implemented.
rtc::Optional<uint32_t> ssrc;
// The Canonical Name (CNAME) used by RTCP (e.g. in SDES messages).
//
// If empty in the construction of the RtpTransport, one will be generated by
// the implementation, and returned in GetRtcpParameters. Multiple
// RtpTransports created by the same OrtcFactory will use the same generated
// CNAME.
//
// If empty when passed into SetRtcpParameters, the CNAME simply won't be
// modified.
std::string cname;
// Send reduced-size RTCP?
bool reduced_size = false;
// Send RTCP multiplexed on the RTP transport?
bool mux = true;
bool operator==(const RtcpParameters& o) const {
return ssrc == o.ssrc && cname == o.cname &&
reduced_size == o.reduced_size && mux == o.mux;
}
bool operator!=(const RtcpParameters& o) const { return !(*this == o); }
};
// Base class for different types of RTP transports that can be created by an
// OrtcFactory. Used by RtpSenders/RtpReceivers.
//
// This is not present in the standard ORTC API, but exists here for a few
// reasons. Firstly, it allows different types of RTP transports to be used:
// DTLS-SRTP (which is required for the web), but also SDES-SRTP and
// unencrypted RTP. It also simplifies the handling of RTCP muxing, and
// provides a better API point for it.
//
// Note that Edge's implementation of ORTC provides a similar API point, called
// RTCSrtpSdesTransport:
// https://msdn.microsoft.com/en-us/library/mt502527(v=vs.85).aspx
class RtpTransportInterface {
public:
virtual ~RtpTransportInterface() {}
// Returns packet transport that's used to send RTP packets.
virtual PacketTransportInterface* GetRtpPacketTransport() const = 0;
// Returns separate packet transport that's used to send RTCP packets. If
// RTCP multiplexing is being used, returns null.
virtual PacketTransportInterface* GetRtcpPacketTransport() const = 0;
// Set/get RTCP params. Can be used to enable RTCP muxing or reduced-size
// RTCP if initially not enabled.
//
// Changing |mux| from "true" to "false" is not allowed, and changing the
// CNAME is currently unsupported.
virtual RTCError SetRtcpParameters(const RtcpParameters& parameters) = 0;
// Returns last set or constructed-with parameters. If |cname| was empty in
// construction, the generated CNAME will be present in the returned
// parameters (see above).
virtual RtcpParameters GetRtcpParameters() const = 0;
protected:
// Only for internal use. Returns a pointer to an internal interface, for use
// by the implementation.
virtual RtpTransportAdapter* GetInternal() = 0;
// Classes that can use this internal interface.
friend class OrtcFactory;
friend class OrtcRtpSenderAdapter;
friend class OrtcRtpReceiverAdapter;
friend class RtpTransportControllerAdapter;
friend class RtpTransportAdapter;
};
} // namespace webrtc
#endif // WEBRTC_API_ORTC_RTPTRANSPORTINTERFACE_H_