blob: 1a710576117e72debbdfb925ec3a225d8afcd9ed [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellander1afca732016-02-07 20:46:45 -08002 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellander1afca732016-02-07 20:46:45 -08004 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
kjellandera96e2d72016-02-04 23:52:28 -080011#ifndef WEBRTC_MEDIA_BASE_RTPUTILS_H_
12#define WEBRTC_MEDIA_BASE_RTPUTILS_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000014#include "webrtc/base/byteorder.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000015
Sergey Ulanovdc305db2016-01-14 17:14:54 -080016namespace rtc {
17struct PacketTimeUpdateParams;
18} // namespace rtc
19
henrike@webrtc.org28e20752013-07-10 00:45:36 +000020namespace cricket {
21
22const size_t kMinRtpPacketLen = 12;
23const size_t kMaxRtpPacketLen = 2048;
24const size_t kMinRtcpPacketLen = 4;
25
26struct RtpHeader {
27 int payload_type;
28 int seq_num;
Peter Boström0c4e06b2015-10-07 12:23:21 +020029 uint32_t timestamp;
30 uint32_t ssrc;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000031};
32
33enum RtcpTypes {
34 kRtcpTypeSR = 200, // Sender report payload type.
35 kRtcpTypeRR = 201, // Receiver report payload type.
36 kRtcpTypeSDES = 202, // SDES payload type.
37 kRtcpTypeBye = 203, // BYE payload type.
38 kRtcpTypeApp = 204, // APP payload type.
39 kRtcpTypeRTPFB = 205, // Transport layer Feedback message payload type.
40 kRtcpTypePSFB = 206, // Payload-specific Feedback message payload type.
41};
42
henrike@webrtc.org28e20752013-07-10 00:45:36 +000043bool GetRtpPayloadType(const void* data, size_t len, int* value);
44bool GetRtpSeqNum(const void* data, size_t len, int* value);
Peter Boström0c4e06b2015-10-07 12:23:21 +020045bool GetRtpTimestamp(const void* data, size_t len, uint32_t* value);
46bool GetRtpSsrc(const void* data, size_t len, uint32_t* value);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000047bool GetRtpHeaderLen(const void* data, size_t len, size_t* value);
48bool GetRtcpType(const void* data, size_t len, int* value);
Peter Boström0c4e06b2015-10-07 12:23:21 +020049bool GetRtcpSsrc(const void* data, size_t len, uint32_t* value);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000050bool GetRtpHeader(const void* data, size_t len, RtpHeader* header);
51
Peter Boström0c4e06b2015-10-07 12:23:21 +020052bool SetRtpSsrc(void* data, size_t len, uint32_t value);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000053// Assumes version 2, no padding, no extensions, no csrcs.
54bool SetRtpHeader(void* data, size_t len, const RtpHeader& header);
55
buildbot@webrtc.org1ef789d2014-06-19 23:54:12 +000056bool IsRtpPacket(const void* data, size_t len);
pkasting@chromium.orge9facf82015-02-17 20:36:28 +000057
58// True if |payload type| is 0-127.
59bool IsValidRtpPayloadType(int payload_type);
60
Sergey Ulanovdc305db2016-01-14 17:14:54 -080061// Verifies that a packet has a valid RTP header.
62bool ValidateRtpHeader(const uint8_t* rtp,
63 size_t length,
64 size_t* header_length);
65
66// Helper method which updates the absolute send time extension if present.
67bool UpdateRtpAbsSendTimeExtension(uint8_t* rtp,
68 size_t length,
69 int extension_id,
70 uint64_t time_us);
71
72// Applies specified |options| to the packet. It updates the absolute send time
73// extension header if it is present present then updates HMAC.
74bool ApplyPacketOptions(uint8_t* data,
75 size_t length,
76 const rtc::PacketTimeUpdateParams& packet_time_params,
77 uint64_t time_us);
78
79
henrike@webrtc.org28e20752013-07-10 00:45:36 +000080} // namespace cricket
81
kjellandera96e2d72016-02-04 23:52:28 -080082#endif // WEBRTC_MEDIA_BASE_RTPUTILS_H_