Wire up RTP keep-alive in ortc api.
[This CL is work in progress.]
Wire up the rtp keep-alive in webrtc::Call::Config using new
SetRtpTransportParameters() method on RtpTransportInterface.
BUG=webrtc:7907
Review-Url: https://codereview.webrtc.org/2981513002
Cr-Commit-Position: refs/heads/master@{#19287}
diff --git a/webrtc/api/ortc/ortcfactoryinterface.h b/webrtc/api/ortc/ortcfactoryinterface.h
index 4f0a9be..4880d9d 100644
--- a/webrtc/api/ortc/ortcfactoryinterface.h
+++ b/webrtc/api/ortc/ortcfactoryinterface.h
@@ -113,16 +113,16 @@
// |rtp| will be used for sending RTP packets, and |rtcp| for RTCP packets.
//
// |rtp| can't be null. |rtcp| must be non-null if and only if
- // |rtcp_parameters.mux| is false, indicating that RTCP muxing isn't used.
+ // |rtp_parameters.rtcp.mux| is false, indicating that RTCP muxing isn't used.
// Note that if RTCP muxing isn't enabled initially, it can still enabled
- // later through SetRtcpParameters.
+ // later through SetParameters.
//
// If |transport_controller| is null, one will automatically be created, and
// its lifetime managed by the returned RtpTransport. This should only be
// done if a single RtpTransport is being used to communicate with the remote
// endpoint.
virtual RTCErrorOr<std::unique_ptr<RtpTransportInterface>> CreateRtpTransport(
- const RtcpParameters& rtcp_parameters,
+ const RtpTransportParameters& rtp_parameters,
PacketTransportInterface* rtp,
PacketTransportInterface* rtcp,
RtpTransportControllerInterface* transport_controller) = 0;
@@ -130,7 +130,7 @@
// Creates an SrtpTransport which is an RTP transport that uses SRTP.
virtual RTCErrorOr<std::unique_ptr<SrtpTransportInterface>>
CreateSrtpTransport(
- const RtcpParameters& rtcp_parameters,
+ const RtpTransportParameters& rtp_parameters,
PacketTransportInterface* rtp,
PacketTransportInterface* rtcp,
RtpTransportControllerInterface* transport_controller) = 0;
diff --git a/webrtc/api/ortc/rtptransportinterface.h b/webrtc/api/ortc/rtptransportinterface.h
index 119d662..165daad 100644
--- a/webrtc/api/ortc/rtptransportinterface.h
+++ b/webrtc/api/ortc/rtptransportinterface.h
@@ -15,13 +15,14 @@
#include "webrtc/api/ortc/packettransportinterface.h"
#include "webrtc/api/rtcerror.h"
+#include "webrtc/common_types.h"
#include "webrtc/rtc_base/optional.h"
namespace webrtc {
class RtpTransportAdapter;
-struct RtcpParameters {
+struct RtcpParameters final {
// 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.
@@ -34,7 +35,7 @@
// RtpTransports created by the same OrtcFactory will use the same generated
// CNAME.
//
- // If empty when passed into SetRtcpParameters, the CNAME simply won't be
+ // If empty when passed into SetParameters, the CNAME simply won't be
// modified.
std::string cname;
@@ -51,6 +52,21 @@
bool operator!=(const RtcpParameters& o) const { return !(*this == o); }
};
+struct RtpTransportParameters final {
+ RtcpParameters rtcp;
+
+ // Enabled periodic sending of keep-alive packets, that help prevent timeouts
+ // on the network level, such as NAT bindings. See RFC6263 section 4.6.
+ RtpKeepAliveConfig keepalive;
+
+ bool operator==(const RtpTransportParameters& o) const {
+ return rtcp == o.rtcp && keepalive == o.keepalive;
+ }
+ bool operator!=(const RtpTransportParameters& o) const {
+ return !(*this == o);
+ }
+};
+
// Base class for different types of RTP transports that can be created by an
// OrtcFactory. Used by RtpSenders/RtpReceivers.
//
@@ -74,16 +90,20 @@
// 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.
+ // Set/get RTP/RTCP transport 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;
+ // RTP keep-alive settings need to be set before before an RtpSender has
+ // started sending, altering the payload type or timeout interval after this
+ // point is not supported. The parameters must also match across all RTP
+ // transports for a given RTP transport controller.
+ virtual RTCError SetParameters(const RtpTransportParameters& 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;
+ virtual RtpTransportParameters GetParameters() const = 0;
protected:
// Only for internal use. Returns a pointer to an internal interface, for use