Index: webrtc/api/rtpparameters.h |
diff --git a/webrtc/api/rtpparameters.h b/webrtc/api/rtpparameters.h |
index 94d9d73039e03539a7b99bef57db582021b2a286..46f71395ce45d7eafb7eb96a8a06e072d6a36745 100644 |
--- a/webrtc/api/rtpparameters.h |
+++ b/webrtc/api/rtpparameters.h |
@@ -16,7 +16,6 @@ |
#include <vector> |
#include "webrtc/api/mediatypes.h" |
-#include "webrtc/config.h" |
#include "webrtc/rtc_base/optional.h" |
namespace webrtc { |
@@ -85,10 +84,10 @@ struct RtcpFeedback { |
rtc::Optional<RtcpFeedbackMessageType> message_type; |
// Constructors for convenience. |
- RtcpFeedback() {} |
- explicit RtcpFeedback(RtcpFeedbackType type) : type(type) {} |
- RtcpFeedback(RtcpFeedbackType type, RtcpFeedbackMessageType message_type) |
- : type(type), message_type(message_type) {} |
+ RtcpFeedback(); |
+ explicit RtcpFeedback(RtcpFeedbackType type); |
+ RtcpFeedback(RtcpFeedbackType type, RtcpFeedbackMessageType message_type); |
+ ~RtcpFeedback(); |
bool operator==(const RtcpFeedback& o) const { |
return type == o.type && message_type == o.message_type; |
@@ -100,6 +99,9 @@ struct RtcpFeedback { |
// RtpParameters. This represents the static capabilities of an endpoint's |
// implementation of a codec. |
struct RtpCodecCapability { |
+ RtpCodecCapability(); |
+ ~RtpCodecCapability(); |
+ |
// Build MIME "type/subtype" string from |name| and |kind|. |
std::string mime_type() const { return MediaTypeToString(kind) + "/" + name; } |
@@ -196,10 +198,10 @@ struct RtpHeaderExtensionCapability { |
bool preferred_encrypt = false; |
// Constructors for convenience. |
- RtpHeaderExtensionCapability() = default; |
- explicit RtpHeaderExtensionCapability(const std::string& uri) : uri(uri) {} |
- RtpHeaderExtensionCapability(const std::string& uri, int preferred_id) |
- : uri(uri), preferred_id(preferred_id) {} |
+ RtpHeaderExtensionCapability(); |
+ explicit RtpHeaderExtensionCapability(const std::string& uri); |
+ RtpHeaderExtensionCapability(const std::string& uri, int preferred_id); |
+ ~RtpHeaderExtensionCapability(); |
bool operator==(const RtpHeaderExtensionCapability& o) const { |
return uri == o.uri && preferred_id == o.preferred_id && |
@@ -210,6 +212,83 @@ struct RtpHeaderExtensionCapability { |
} |
}; |
+// RTP header extension, see RFC 5285. |
+struct RtpExtension { |
+ RtpExtension(); |
+ RtpExtension(const std::string& uri, int id); |
+ RtpExtension(const std::string& uri, int id, bool encrypt); |
+ ~RtpExtension(); |
+ std::string ToString() const; |
+ bool operator==(const RtpExtension& rhs) const { |
+ return uri == rhs.uri && id == rhs.id && encrypt == rhs.encrypt; |
+ } |
+ static bool IsSupportedForAudio(const std::string& uri); |
+ static bool IsSupportedForVideo(const std::string& uri); |
+ // Return "true" if the given RTP header extension URI may be encrypted. |
+ static bool IsEncryptionSupported(const std::string& uri); |
+ |
+ // Returns the named header extension if found among all extensions, |
+ // nullptr otherwise. |
+ static const RtpExtension* FindHeaderExtensionByUri( |
+ const std::vector<RtpExtension>& extensions, |
+ const std::string& uri); |
+ |
+ // Return a list of RTP header extensions with the non-encrypted extensions |
+ // removed if both the encrypted and non-encrypted extension is present for |
+ // the same URI. |
+ static std::vector<RtpExtension> FilterDuplicateNonEncrypted( |
+ const std::vector<RtpExtension>& extensions); |
+ |
+ // Header extension for audio levels, as defined in: |
+ // http://tools.ietf.org/html/draft-ietf-avtext-client-to-mixer-audio-level-03 |
+ static const char kAudioLevelUri[]; |
+ static const int kAudioLevelDefaultId; |
+ |
+ // Header extension for RTP timestamp offset, see RFC 5450 for details: |
+ // http://tools.ietf.org/html/rfc5450 |
+ static const char kTimestampOffsetUri[]; |
+ static const int kTimestampOffsetDefaultId; |
+ |
+ // Header extension for absolute send time, see url for details: |
+ // http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time |
+ static const char kAbsSendTimeUri[]; |
+ static const int kAbsSendTimeDefaultId; |
+ |
+ // Header extension for coordination of video orientation, see url for |
+ // details: |
+ // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ts_126114v120700p.pdf |
+ static const char kVideoRotationUri[]; |
+ static const int kVideoRotationDefaultId; |
+ |
+ // Header extension for video content type. E.g. default or screenshare. |
+ static const char kVideoContentTypeUri[]; |
+ static const int kVideoContentTypeDefaultId; |
+ |
+ // Header extension for video timing. |
+ static const char kVideoTimingUri[]; |
+ static const int kVideoTimingDefaultId; |
+ |
+ // Header extension for transport sequence number, see url for details: |
+ // http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions |
+ static const char kTransportSequenceNumberUri[]; |
+ static const int kTransportSequenceNumberDefaultId; |
+ |
+ static const char kPlayoutDelayUri[]; |
+ static const int kPlayoutDelayDefaultId; |
+ |
+ // Encryption of Header Extensions, see RFC 6904 for details: |
+ // https://tools.ietf.org/html/rfc6904 |
+ static const char kEncryptHeaderExtensionsUri[]; |
+ |
+ // Inclusive min and max IDs for one-byte header extensions, per RFC5285. |
+ static const int kMinId; |
+ static const int kMaxId; |
+ |
+ std::string uri; |
+ int id = 0; |
+ bool encrypt = false; |
+}; |
+ |
// See webrtc/config.h. Has "uri" and "id" fields. |
// TODO(deadbeef): This is missing the "encrypt" flag, which is unimplemented. |
typedef RtpExtension RtpHeaderExtensionParameters; |
@@ -222,10 +301,10 @@ struct RtpFecParameters { |
FecMechanism mechanism = FecMechanism::RED; |
// Constructors for convenience. |
- RtpFecParameters() = default; |
- explicit RtpFecParameters(FecMechanism mechanism) : mechanism(mechanism) {} |
- RtpFecParameters(FecMechanism mechanism, uint32_t ssrc) |
- : ssrc(ssrc), mechanism(mechanism) {} |
+ RtpFecParameters(); |
+ explicit RtpFecParameters(FecMechanism mechanism); |
+ RtpFecParameters(FecMechanism mechanism, uint32_t ssrc); |
+ ~RtpFecParameters(); |
bool operator==(const RtpFecParameters& o) const { |
return ssrc == o.ssrc && mechanism == o.mechanism; |
@@ -239,14 +318,18 @@ struct RtpRtxParameters { |
rtc::Optional<uint32_t> ssrc; |
// Constructors for convenience. |
- RtpRtxParameters() = default; |
- explicit RtpRtxParameters(uint32_t ssrc) : ssrc(ssrc) {} |
+ RtpRtxParameters(); |
+ explicit RtpRtxParameters(uint32_t ssrc); |
+ ~RtpRtxParameters(); |
bool operator==(const RtpRtxParameters& o) const { return ssrc == o.ssrc; } |
bool operator!=(const RtpRtxParameters& o) const { return !(*this == o); } |
}; |
struct RtpEncodingParameters { |
+ RtpEncodingParameters(); |
+ ~RtpEncodingParameters(); |
+ |
// If unset, a value is chosen by the implementation. |
// |
// Note that the chosen value is NOT returned by GetParameters, because it |
@@ -338,6 +421,9 @@ struct RtpEncodingParameters { |
}; |
struct RtpCodecParameters { |
+ RtpCodecParameters(); |
+ ~RtpCodecParameters(); |
+ |
// Build MIME "type/subtype" string from |name| and |kind|. |
std::string mime_type() const { return MediaTypeToString(kind) + "/" + name; } |
@@ -400,6 +486,9 @@ struct RtpCodecParameters { |
// endpoint. An application can use these capabilities to construct an |
// RtpParameters. |
struct RtpCapabilities { |
+ RtpCapabilities(); |
+ ~RtpCapabilities(); |
+ |
// Supported codecs. |
std::vector<RtpCodecCapability> codecs; |
@@ -422,6 +511,9 @@ struct RtpCapabilities { |
// RtpParameters, because our API includes an additional "RtpTransport" |
// abstraction on which RTCP parameters are set. |
struct RtpParameters { |
+ RtpParameters(); |
+ ~RtpParameters(); |
+ |
// Used when calling getParameters/setParameters with a PeerConnection |
// RtpSender, to ensure that outdated parameters are not unintentionally |
// applied successfully. |