Amazon Kinesis Webrtc C SDK
 
Loading...
Searching...
No Matches
Rtcp.h
Go to the documentation of this file.
1#ifndef __KINESIS_VIDEO_WEBRTC_CLIENT_PEERCONNECTION_RTCP__
2#define __KINESIS_VIDEO_WEBRTC_CLIENT_PEERCONNECTION_RTCP__
3
4#pragma once
5
6#ifdef __cplusplus
7extern "C" {
8#endif
9
17
48
49// https://tools.ietf.org/html/rfc4585#section-6.3.1: header, sender SSRC, media SSRC, no FCI
50#define RTCP_PLI_PACKET_LEN (RTCP_PACKET_HEADER_LEN + 2 * SIZEOF(UINT32))
51
52// https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01
53// Deltas are represented as multiples of 250us:
54#define TWCC_TICKS_PER_SECOND (1000000LL / 250)
55#define MICROSECONDS_PER_SECOND 1000000LL
56#define MILLISECONDS_PER_SECOND 1000LL
57#define TWCC_PACKET_LOST_TIME ((UINT64) (-1LL))
58#define TWCC_PACKET_UNITIALIZED_TIME 0
59// Max packet age in the TWCC hash table. If feedback is not received within this
60// window, the entry is evicted. Entries are also evicted once we receive feedback.
61#define TWCC_ESTIMATOR_TIME_WINDOW (4 * HUNDREDS_OF_NANOS_IN_A_SECOND)
62// Hard upper bound on packets reported in a single TWCC feedback to prevent
63// too large allocations via crafted packetStatusCount (UINT16 field).
64// 2048 is well above any legitimate report (~270 pkts/sec at typical rates)
65// while capping allocation to ~45 KB instead of ~1.4 MB at UINT16 max.
66#define TWCC_MAX_PACKET_STATUS_COUNT 2048
67// Minimum payload length for a TWCC feedback packet (two SSRCs + base seq + status count + ref time + fb pkt count)
68#define TWCC_FB_PAYLOAD_MIN_LEN 16
69
70// Trendline estimation parameters
71#define TWCC_TRENDLINE_SMOOTHING_FACTOR 0.2
72
78
79#define TWCC_FB_PACKETCHUNK_SIZE 2
80#define IS_TWCC_RUNLEN(packetChunk) ((((packetChunk) >> 15u) & 1u) == 0)
81#define TWCC_RUNLEN_STATUS_SYMBOL(packetChunk) (((packetChunk) >> 13u) & 3u)
82#define TWCC_RUNLEN_GET(packetChunk) ((packetChunk) & 0x1fffu)
83#define TWCC_IS_NOTRECEIVED(statusSymbol) ((statusSymbol) == TWCC_STATUS_SYMBOL_NOTRECEIVED)
84#define TWCC_ISRECEIVED(statusSymbol) ((statusSymbol) == TWCC_STATUS_SYMBOL_SMALLDELTA || (statusSymbol) == TWCC_STATUS_SYMBOL_LARGEDELTA)
85#define TWCC_RUNLEN_ISRECEIVED(packetChunk) TWCC_ISRECEIVED(TWCC_RUNLEN_STATUS_SYMBOL(packetChunk))
86#define TWCC_STATUSVECTOR_IS_2BIT(packetChunk) (((packetChunk) >> 14u) & 1u)
87#define TWCC_STATUSVECTOR_SSIZE(packetChunk) (TWCC_STATUSVECTOR_IS_2BIT(packetChunk) ? 2u : 1u)
88#define TWCC_STATUSVECTOR_SMASK(packetChunk) (TWCC_STATUSVECTOR_IS_2BIT(packetChunk) ? 2u : 1u)
89#define TWCC_STATUSVECTOR_STATUS(packetChunk, i) \
90 (((packetChunk) >> (14u - (i) * TWCC_STATUSVECTOR_SSIZE(packetChunk))) & TWCC_STATUSVECTOR_SMASK(packetChunk))
91#define TWCC_STATUSVECTOR_COUNT(packetChunk) (TWCC_STATUSVECTOR_IS_2BIT(packetChunk) ? 7 : 14)
92#define TWCC_PACKET_STATUS_COUNT(payload) (getUnalignedInt16BigEndian((payload) + 10))
93
94#ifdef __cplusplus
95}
96#endif
97#endif /* __KINESIS_VIDEO_WEBRTC_CLIENT_PEERCONNECTION_RTCP__ */
TWCC_STATUS_SYMBOL
Definition Rtcp.h:73
@ TWCC_STATUS_SYMBOL_LARGEDELTA
Definition Rtcp.h:76
@ TWCC_STATUS_SYMBOL_NOTRECEIVED
Definition Rtcp.h:74
@ TWCC_STATUS_SYMBOL_SMALLDELTA
Definition Rtcp.h:75
STATUS updateTwccHashTable(PTwccManager, PINT64, PUINT64, PUINT64, PUINT64, PUINT64)
Definition Rtcp.c:482
STATUS createRtcpPLIPacket(UINT32, UINT32, PBYTE, PUINT32)
Definition Rtcp.c:808
STATUS onRtcpTwccPacket(PRtcpPacket, PKvsPeerConnection)
Definition Rtcp.c:562
STATUS onRtcpRembPacket(PRtcpPacket, PKvsPeerConnection)
Definition Rtcp.c:755
STATUS computeTwccTrendline(PTwccManager, PDOUBLE, PDOUBLE)
Estimates network congestion trend using least-squares linear regression on accumulated one-way delay...
Definition Rtcp.c:404
STATUS onRtcpPacket(PKvsPeerConnection, PBYTE, UINT32)
Definition Rtcp.c:693
STATUS onRtcpPLIPacket(PRtcpPacket, PKvsPeerConnection)
Definition Rtcp.c:783
STATUS parseRtcpTwccPacket(PRtcpPacket, PTwccManager)
Definition Rtcp.c:194
@ RTC_RTP_TRANSCEIVER_DIRECTION_UNINITIALIZED
Will use the default "sendrecv" after initialization.
Definition Include.h:1061
Definition PeerConnection.h:81
Definition RtcpPacket.h:85
Definition PeerConnection.h:64