• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef MEDIA_BASE_RTP_UTILS_H_
12 #define MEDIA_BASE_RTP_UTILS_H_
13 
14 #include "absl/strings/string_view.h"
15 #include "api/array_view.h"
16 #include "rtc_base/byte_order.h"
17 #include "rtc_base/system/rtc_export.h"
18 
19 namespace rtc {
20 struct PacketTimeUpdateParams;
21 }  // namespace rtc
22 
23 namespace cricket {
24 
25 const size_t kMinRtpPacketLen = 12;
26 const size_t kMaxRtpPacketLen = 2048;
27 const size_t kMinRtcpPacketLen = 4;
28 
29 enum RtcpTypes {
30   kRtcpTypeSR = 200,     // Sender report payload type.
31   kRtcpTypeRR = 201,     // Receiver report payload type.
32   kRtcpTypeSDES = 202,   // SDES payload type.
33   kRtcpTypeBye = 203,    // BYE payload type.
34   kRtcpTypeApp = 204,    // APP payload type.
35   kRtcpTypeRTPFB = 205,  // Transport layer Feedback message payload type.
36   kRtcpTypePSFB = 206,   // Payload-specific Feedback message payload type.
37 };
38 
39 enum class RtpPacketType {
40   kRtp,
41   kRtcp,
42   kUnknown,
43 };
44 
45 bool GetRtcpType(const void* data, size_t len, int* value);
46 bool GetRtcpSsrc(const void* data, size_t len, uint32_t* value);
47 
48 // Checks the packet header to determine if it can be an RTP or RTCP packet.
49 RtpPacketType InferRtpPacketType(rtc::ArrayView<const char> packet);
50 // True if |payload type| is 0-127.
51 bool IsValidRtpPayloadType(int payload_type);
52 
53 // True if `size` is appropriate for the indicated packet type.
54 bool IsValidRtpPacketSize(RtpPacketType packet_type, size_t size);
55 
56 // Returns "RTCP", "RTP" or "Unknown" according to `packet_type`.
57 absl::string_view RtpPacketTypeToString(RtpPacketType packet_type);
58 
59 // Verifies that a packet has a valid RTP header.
60 bool RTC_EXPORT ValidateRtpHeader(const uint8_t* rtp,
61                                   size_t length,
62                                   size_t* header_length);
63 
64 // Helper method which updates the absolute send time extension if present.
65 bool UpdateRtpAbsSendTimeExtension(uint8_t* rtp,
66                                    size_t length,
67                                    int extension_id,
68                                    uint64_t time_us);
69 
70 // Applies specified `options` to the packet. It updates the absolute send time
71 // extension header if it is present present then updates HMAC.
72 bool RTC_EXPORT
73 ApplyPacketOptions(uint8_t* data,
74                    size_t length,
75                    const rtc::PacketTimeUpdateParams& packet_time_params,
76                    uint64_t time_us);
77 
78 }  // namespace cricket
79 
80 #endif  // MEDIA_BASE_RTP_UTILS_H_
81