1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_RTP_RTCP_INTERFACE_RTP_RTCP_DEFINES_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_RTP_RTCP_INTERFACE_RTP_RTCP_DEFINES_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 147fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org#include <stddef.h> 157485573a0f9547055f66584680e10909c6906017stefan@webrtc.org#include <list> 167fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 17cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/modules/interface/module_common_types.h" 189858fc8df331a4111dc996469bcf027c4f986556stefan@webrtc.org#include "webrtc/system_wrappers/interface/clock.h" 19cbd78ae09f44b003a9969536b78f08cd1ff513e8pbos@webrtc.org#include "webrtc/typedefs.h" 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define RTCP_CNAME_SIZE 256 // RFC 3550 page 44, including null termination 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define IP_PACKET_SIZE 1500 // we assume ethernet 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define MAX_NUMBER_OF_PARALLEL_TELEPHONE_EVENTS 10 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define TIMEOUT_SEI_MESSAGES_MS 30000 // in milliseconds 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 267fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgnamespace webrtc { 277d91c10c601030978979529a17edbc51784866cephoglund@webrtc.org 287fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgconst int kVideoPayloadTypeFrequency = 90000; 297fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 303e4cdeca70f8a9499fb746fa4e9a094a449dda86sprang@webrtc.org// Minimum RTP header size in bytes. 313e4cdeca70f8a9499fb746fa4e9a094a449dda86sprang@webrtc.orgconst uint8_t kRtpHeaderSize = 12; 323e4cdeca70f8a9499fb746fa4e9a094a449dda86sprang@webrtc.org 337fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgstruct AudioPayload 347fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org{ 357fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org uint32_t frequency; 367fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org uint8_t channels; 377fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org uint32_t rate; 387fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org}; 397fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 407fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgstruct VideoPayload 417fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org{ 427fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org RtpVideoCodecTypes videoCodecType; 437fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org uint32_t maxRate; 447fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org}; 457fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 467fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.orgunion PayloadUnion 477fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org{ 487fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org AudioPayload Audio; 497fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org VideoPayload Video; 507fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org}; 5168950e576072fa05c5056177e16aedb430a4cb2aphoglund@webrtc.org 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTCPMethod 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpOff = 0, 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpCompound = 1, 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpNonCompound = 2 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTPAliveType 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtpDead = 0, 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtpNoRtp = 1, 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtpAlive = 2 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 66b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.orgenum ProtectionType { 67b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.org kUnprotectedPacket, 68b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.org kProtectedPacket 69b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.org}; 70b7fb080fab9a42241324a0dfc238de51ba5f911apbos@webrtc.org 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum StorageType { 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kDontStore, 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kDontRetransmit, 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kAllowRetransmission 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTPExtensionType 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtpExtensionNone, 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtpExtensionTransmissionTimeOffset, 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtpExtensionAudioLevel, 82a0b002541771f0fe945ab33493a4da940f95b7c0solenberg@webrtc.org kRtpExtensionAbsoluteSendTime 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTCPAppSubTypes 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kAppSubtypeBwe = 0x00 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RTCPPacketType 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpReport = 0x0001, 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpSr = 0x0002, 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpRr = 0x0004, 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpBye = 0x0008, 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpPli = 0x0010, 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpNack = 0x0020, 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpFir = 0x0040, 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpTmmbr = 0x0080, 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpTmmbn = 0x0100, 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpSrReq = 0x0200, 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpXrVoipMetric = 0x0400, 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpApp = 0x0800, 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpSli = 0x4000, 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpRpsi = 0x8000, 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRtcpRemb = 0x10000, 107d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org kRtcpTransmissionTimeOffset = 0x20000, 108d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org kRtcpXrReceiverReferenceTime = 0x40000, 109d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org kRtcpXrDlrrReportBlock = 0x80000 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum KeyFrameRequestMethod 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kKeyFrameReqFirRtp = 1, 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kKeyFrameReqPliRtcp = 2, 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kKeyFrameReqFirRtcp = 3 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RtpRtcpPacketType 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kPacketRtp = 0, 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kPacketKeepAlive = 1 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum NACKMethod 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kNackOff = 0, 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kNackRtcp = 2 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgenum RetransmissionMode { 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRetransmitOff = 0x0, 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRetransmitFECPackets = 0x1, 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRetransmitBaseLayer = 0x2, 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRetransmitHigherLayers = 0x4, 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kRetransmitAllPackets = 0xFF 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 139946d2407699745b512dc969150e01b1c034db0bcmikhal@webrtc.orgenum RtxMode { 14047f0c4192df67999055b47f6a5d5314ce6a4ac4bstefan@webrtc.org kRtxOff = 0x0, 14147f0c4192df67999055b47f6a5d5314ce6a4ac4bstefan@webrtc.org kRtxRetransmitted = 0x1, // Only send retransmissions over RTX. 14247f0c4192df67999055b47f6a5d5314ce6a4ac4bstefan@webrtc.org kRtxRedundantPayloads = 0x2 // Preventively send redundant payloads 14347f0c4192df67999055b47f6a5d5314ce6a4ac4bstefan@webrtc.org // instead of padding. 144946d2407699745b512dc969150e01b1c034db0bcmikhal@webrtc.org}; 145946d2407699745b512dc969150e01b1c034db0bcmikhal@webrtc.org 1467bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.orgconst int kRtxHeaderSize = 2; 1477bc7e02c4aadc8acb8fdc35a555a0cb33e566b16mflodman@webrtc.org 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstruct RTCPSenderInfo 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 150b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org uint32_t NTPseconds; 151b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org uint32_t NTPfraction; 152b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org uint32_t RTPtimeStamp; 153b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org uint32_t sendPacketCount; 154b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org uint32_t sendOctetCount; 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1577485573a0f9547055f66584680e10909c6906017stefan@webrtc.orgstruct RTCPReportBlock { 1587485573a0f9547055f66584680e10909c6906017stefan@webrtc.org RTCPReportBlock() 1597485573a0f9547055f66584680e10909c6906017stefan@webrtc.org : remoteSSRC(0), sourceSSRC(0), fractionLost(0), cumulativeLost(0), 1607485573a0f9547055f66584680e10909c6906017stefan@webrtc.org extendedHighSeqNum(0), jitter(0), lastSR(0), 1617485573a0f9547055f66584680e10909c6906017stefan@webrtc.org delaySinceLastSR(0) {} 1627485573a0f9547055f66584680e10909c6906017stefan@webrtc.org 1637485573a0f9547055f66584680e10909c6906017stefan@webrtc.org RTCPReportBlock(uint32_t remote_ssrc, 1647485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t source_ssrc, 1657485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint8_t fraction_lost, 1667485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t cumulative_lost, 1677485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t extended_high_sequence_number, 1687485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t jitter, 1697485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t last_sender_report, 1707485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t delay_since_last_sender_report) 1717485573a0f9547055f66584680e10909c6906017stefan@webrtc.org : remoteSSRC(remote_ssrc), 1727485573a0f9547055f66584680e10909c6906017stefan@webrtc.org sourceSSRC(source_ssrc), 1737485573a0f9547055f66584680e10909c6906017stefan@webrtc.org fractionLost(fraction_lost), 1747485573a0f9547055f66584680e10909c6906017stefan@webrtc.org cumulativeLost(cumulative_lost), 1757485573a0f9547055f66584680e10909c6906017stefan@webrtc.org extendedHighSeqNum(extended_high_sequence_number), 1767485573a0f9547055f66584680e10909c6906017stefan@webrtc.org jitter(jitter), 1777485573a0f9547055f66584680e10909c6906017stefan@webrtc.org lastSR(last_sender_report), 1787485573a0f9547055f66584680e10909c6906017stefan@webrtc.org delaySinceLastSR(delay_since_last_sender_report) {} 1797485573a0f9547055f66584680e10909c6906017stefan@webrtc.org 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Fields as described by RFC 3550 6.4.2. 1817485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t remoteSSRC; // SSRC of sender of this report. 1827485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t sourceSSRC; // SSRC of the RTP packet sender. 1837485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint8_t fractionLost; 1847485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t cumulativeLost; // 24 bits valid. 1857485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t extendedHighSeqNum; 1867485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t jitter; 1877485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t lastSR; 1887485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint32_t delaySinceLastSR; 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 191d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.orgstruct RtcpReceiveTimeInfo { 192d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org // Fields as described by RFC 3611 4.5. 193d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org uint32_t sourceSSRC; 194d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org uint32_t lastRR; 195d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org uint32_t delaySinceLastRR; 196d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org}; 197d6da239905c84110a7c90789df70238afd0f64b6asapersson@webrtc.org 1987485573a0f9547055f66584680e10909c6906017stefan@webrtc.orgtypedef std::list<RTCPReportBlock> ReportBlockList; 1997485573a0f9547055f66584680e10909c6906017stefan@webrtc.org 2002fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.orgstruct RtpState { 2012fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org RtpState() 2022fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org : sequence_number(0), 2032fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org start_timestamp(0), 2042fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org timestamp(0), 2052fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org capture_time_ms(-1), 206f147639fcf3f45fdf764480834a483eb88b1cf2astefan@webrtc.org last_timestamp_time_ms(-1), 207f147639fcf3f45fdf764480834a483eb88b1cf2astefan@webrtc.org media_has_been_sent(false) {} 2082fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org uint16_t sequence_number; 2092fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org uint32_t start_timestamp; 2102fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org uint32_t timestamp; 2112fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org int64_t capture_time_ms; 2122fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org int64_t last_timestamp_time_ms; 213f147639fcf3f45fdf764480834a483eb88b1cf2astefan@webrtc.org bool media_has_been_sent; 2142fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org}; 2152fd91bd35094b909b4b3cce636454426fc893ac2pbos@webrtc.org 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtpData 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 219aa445e7b214e654e680158e78cba82376198ee4fstefan@webrtc.org virtual ~RtpData() {} 220aa445e7b214e654e680158e78cba82376198ee4fstefan@webrtc.org 221b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual int32_t OnReceivedPayloadData( 222b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t* payloadData, 223b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t payloadSize, 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const WebRtcRTPHeader* rtpHeader) = 0; 2257fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 2267fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org virtual bool OnRecoveredPacket(const uint8_t* packet, 2277fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org int packet_length) = 0; 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtcpFeedback 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 233b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnApplicationDataReceived(const int32_t /*id*/, 234b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t /*subType*/, 235b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint32_t /*name*/, 236b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t /*length*/, 237b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t* /*data*/) {}; 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnXRVoIPMetricReceived( 240b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const int32_t /*id*/, 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const RTCPVoIPMetric* /*metric*/) {}; 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 243b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnReceiveReportReceived(const int32_t id, 244b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint32_t senderSSRC) {}; 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected: 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~RtcpFeedback() {} 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtpFeedback 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 253aa445e7b214e654e680158e78cba82376198ee4fstefan@webrtc.org virtual ~RtpFeedback() {} 254aa445e7b214e654e680158e78cba82376198ee4fstefan@webrtc.org 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Receiving payload change or SSRC change. (return success!) 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /* 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * channels - number of channels in codec (1 = mono, 2 = stereo) 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 259b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual int32_t OnInitializeDecoder( 260b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const int32_t id, 261b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const int8_t payloadType, 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char payloadName[RTP_PAYLOAD_NAME_SIZE], 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const int frequency, 264b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t channels, 265b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint32_t rate) = 0; 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 267b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnIncomingSSRCChanged( const int32_t id, 268a20e2d4c9ae860db62de6e304bfdf517c049ec3dstefan@webrtc.org const uint32_t ssrc) = 0; 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 270b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnIncomingCSRCChanged( const int32_t id, 271b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint32_t CSRC, 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const bool added) = 0; 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 274a20e2d4c9ae860db62de6e304bfdf517c049ec3dstefan@webrtc.org virtual void ResetStatistics(uint32_t ssrc) = 0; 275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtpAudioFeedback { 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 280b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnPlayTelephoneEvent(const int32_t id, 281b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t event, 282b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t lengthMs, 283b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t volume) = 0; 284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected: 285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~RtpAudioFeedback() {} 286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtcpIntraFrameObserver { 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnReceivedIntraFrameRequest(uint32_t ssrc) = 0; 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnReceivedSLI(uint32_t ssrc, 293b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint8_t picture_id) = 0; 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 295b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnReceivedRPSI(uint32_t ssrc, 296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org uint64_t picture_id) = 0; 297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc) = 0; 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~RtcpIntraFrameObserver() {} 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtcpBandwidthObserver { 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // REMB or TMMBR 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnReceivedEstimatedBitrate(const uint32_t bitrate) = 0; 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void OnReceivedRtcpReceiverReport( 3097485573a0f9547055f66584680e10909c6906017stefan@webrtc.org const ReportBlockList& report_blocks, 3107485573a0f9547055f66584680e10909c6906017stefan@webrtc.org uint16_t rtt, 3117485573a0f9547055f66584680e10909c6906017stefan@webrtc.org int64_t now_ms) = 0; 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~RtcpBandwidthObserver() {} 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 316c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.orgclass RtcpRttStats { 317e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org public: 318e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org virtual void OnRttUpdate(uint32_t rtt) = 0; 319e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org 320c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org virtual uint32_t LastProcessedRtt() const = 0; 321c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org 322c4af4cf7814bb773d838aefa476c196e5f1bc360asapersson@webrtc.org virtual ~RtcpRttStats() {}; 323e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org}; 324e296783ae1fd7fa8a52582c8bb63a570e625532amflodman@webrtc.org 325cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org// Null object version of RtpFeedback. 326cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.orgclass NullRtpFeedback : public RtpFeedback { 327cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org public: 328cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org virtual ~NullRtpFeedback() {} 329cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org 330b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual int32_t OnInitializeDecoder( 331b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const int32_t id, 332b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const int8_t payloadType, 333cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org const char payloadName[RTP_PAYLOAD_NAME_SIZE], 334cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org const int frequency, 335b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t channels, 3369d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org const uint32_t rate) OVERRIDE { 337db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org return 0; 338db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org } 339cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org 3407fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org virtual void OnIncomingSSRCChanged(const int32_t id, 341a20e2d4c9ae860db62de6e304bfdf517c049ec3dstefan@webrtc.org const uint32_t ssrc) OVERRIDE {} 342cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org 343db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org virtual void OnIncomingCSRCChanged(const int32_t id, 344db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org const uint32_t CSRC, 345db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org const bool added) OVERRIDE {} 3467fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 347db74c61ddfa26c23d3e392b241c983010e10b1c5stefan@webrtc.org virtual void ResetStatistics(uint32_t ssrc) OVERRIDE {} 348cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org}; 349cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org 350cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org// Null object version of RtpData. 351cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.orgclass NullRtpData : public RtpData { 352cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org public: 353cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org virtual ~NullRtpData() {} 3547fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 355b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual int32_t OnReceivedPayloadData( 356b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t* payloadData, 357b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t payloadSize, 3589d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org const WebRtcRTPHeader* rtpHeader) OVERRIDE { 3597fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org return 0; 3607fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org } 3617fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org 3627fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org virtual bool OnRecoveredPacket(const uint8_t* packet, 3636dc729b3239305d0f8edd2ecf6bef2e2f6bd661astefan@webrtc.org int packet_length) OVERRIDE { 3647fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org return true; 3657fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org } 366cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org}; 367cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org 368cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org// Null object version of RtpAudioFeedback. 369cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.orgclass NullRtpAudioFeedback : public RtpAudioFeedback { 370cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org public: 371cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org virtual ~NullRtpAudioFeedback() {} 372cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org 373b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org virtual void OnPlayTelephoneEvent(const int32_t id, 374b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint8_t event, 375b57da6501f9db93536f51f7a64abf27306a7af04pbos@webrtc.org const uint16_t lengthMs, 3769d71e286a6c8fa79d30fc6f55e0e6071de5d37e3pbos@webrtc.org const uint8_t volume) OVERRIDE {} 377cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org}; 378cd29867e6b49df11e565dcb1d64dbe92751b509cphoglund@webrtc.org 3793b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 380b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_RTP_RTCP_INTERFACE_RTP_RTCP_DEFINES_H_ 381