| /* |
| * Copyright (c) 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 API_RTP_HEADERS_H_ |
| #define API_RTP_HEADERS_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| #include <string> |
| |
| #include "absl/types/optional.h" |
| #include "api/array_view.h" |
| #include "api/units/timestamp.h" |
| #include "api/video/color_space.h" |
| #include "api/video/video_content_type.h" |
| #include "api/video/video_frame_marking.h" |
| #include "api/video/video_rotation.h" |
| #include "api/video/video_timing.h" |
| #include "common_types.h" // NOLINT(build/include) |
| |
| namespace webrtc { |
| |
| struct FeedbackRequest { |
| // Determines whether the recv delta as specified in |
| // https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01 |
| // should be included. |
| bool include_timestamps; |
| // Include feedback of received packets in the range [sequence_number - |
| // sequence_count + 1, sequence_number]. That is, no feedback will be sent if |
| // sequence_count is zero. |
| int sequence_count; |
| }; |
| |
| struct RTPHeaderExtension { |
| RTPHeaderExtension(); |
| RTPHeaderExtension(const RTPHeaderExtension& other); |
| RTPHeaderExtension& operator=(const RTPHeaderExtension& other); |
| |
| static constexpr int kAbsSendTimeFraction = 18; |
| |
| Timestamp GetAbsoluteSendTimestamp() const { |
| RTC_DCHECK(hasAbsoluteSendTime); |
| RTC_DCHECK(absoluteSendTime < (1ul << 24)); |
| return Timestamp::us((absoluteSendTime * 1000000L) / |
| (1 << kAbsSendTimeFraction)); |
| } |
| |
| bool hasTransmissionTimeOffset; |
| int32_t transmissionTimeOffset; |
| bool hasAbsoluteSendTime; |
| uint32_t absoluteSendTime; |
| bool hasTransportSequenceNumber; |
| uint16_t transportSequenceNumber; |
| absl::optional<FeedbackRequest> feedback_request; |
| |
| // Audio Level includes both level in dBov and voiced/unvoiced bit. See: |
| // https://tools.ietf.org/html/rfc6464#section-3 |
| bool hasAudioLevel; |
| bool voiceActivity; |
| uint8_t audioLevel; |
| |
| // For Coordination of Video Orientation. See |
| // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/ |
| // ts_126114v120700p.pdf |
| bool hasVideoRotation; |
| VideoRotation videoRotation; |
| |
| // TODO(ilnik): Refactor this and one above to be absl::optional() and remove |
| // a corresponding bool flag. |
| bool hasVideoContentType; |
| VideoContentType videoContentType; |
| |
| bool has_video_timing; |
| VideoSendTiming video_timing; |
| |
| bool has_frame_marking; |
| FrameMarking frame_marking; |
| |
| PlayoutDelay playout_delay = {-1, -1}; |
| |
| // For identification of a stream when ssrc is not signaled. See |
| // https://tools.ietf.org/html/draft-ietf-avtext-rid-09 |
| // TODO(danilchap): Update url from draft to release version. |
| std::string stream_id; |
| std::string repaired_stream_id; |
| |
| // For identifying the media section used to interpret this RTP packet. See |
| // https://tools.ietf.org/html/draft-ietf-mmusic-sdp-bundle-negotiation-38 |
| std::string mid; |
| |
| absl::optional<ColorSpace> color_space; |
| }; |
| |
| enum { kRtpCsrcSize = 15 }; // RFC 3550 page 13 |
| |
| struct RTPHeader { |
| RTPHeader(); |
| RTPHeader(const RTPHeader& other); |
| RTPHeader& operator=(const RTPHeader& other); |
| |
| bool markerBit; |
| uint8_t payloadType; |
| uint16_t sequenceNumber; |
| uint32_t timestamp; |
| uint32_t ssrc; |
| uint8_t numCSRCs; |
| uint32_t arrOfCSRCs[kRtpCsrcSize]; |
| size_t paddingLength; |
| size_t headerLength; |
| int payload_type_frequency; |
| RTPHeaderExtension extension; |
| }; |
| |
| // RTCP mode to use. Compound mode is described by RFC 4585 and reduced-size |
| // RTCP mode is described by RFC 5506. |
| enum class RtcpMode { kOff, kCompound, kReducedSize }; |
| |
| enum NetworkState { |
| kNetworkUp, |
| kNetworkDown, |
| }; |
| |
| } // namespace webrtc |
| |
| #endif // API_RTP_HEADERS_H_ |