@class AVCStatisticsCollector; @interface VCNWConnectionCongestionDetector : NSObject { struct tagVCStatisticsMessage { int type; int priority; double arrivalTime; BOOL isVCRCInternal; BOOL shouldFlushAndProcess; BOOL shouldDrainAndProcess; BOOL statisticsUpdateOnly; union { struct { unsigned int queueDepth1; unsigned int queueDepth2; unsigned int txBitrate; unsigned int averageBitrate; unsigned int averageBitrateShort; unsigned int averageBitrateLong; double averageQueueDepth; double expectedQueuingDelay; double bdcd; double normalizedBDCD; double normalizedDelay; char bbString[64]; int radioTechnology; } baseband; struct { unsigned int sendTimestamp; unsigned int queuingDelay; unsigned int remoteBWEstimation; unsigned int remoteBWEStability; unsigned int maxVideoBurstyLoss; unsigned int audioConsecutiveLoss; unsigned int mostBurstyLoss; unsigned int audioReceivedPackets; unsigned int videoReceivedPackets; unsigned int totalSentPackets; unsigned int echoedSendTimestamp; unsigned int mediaTimestamp; double owrd; double packetLossRate; unsigned int actualBitrate; unsigned int instantBitrate; double roundTripTime; unsigned int receiveQueueTarget; BOOL isPacketReceivedValid; struct { int packetType; unsigned int packetId; unsigned int sampleRate; unsigned int totalPacketsReceived; double receiveTimestamp; double owrd; double targetJitterQueueSize; unsigned int bandwidthEstimation; unsigned int localBurstyLoss; } packetReceived; struct { unsigned short sequenceNumber; BOOL isDuplicatePacket; BOOL isReceivedOnPrimary; unsigned int connectionStatsBuffer; } connectionStats; struct tagVCStatisticsECNStats { unsigned short ecnECT1Count; unsigned short ecnCECount; } ecnStats; struct tagVCStatisticsECNStats { unsigned short ecnECT1Count; unsigned short ecnCECount; } ecnRecvd; BOOL isECNEnabled; } feedback; struct { double packetLossPercentage; double packetLossPercentageAudio; double packetLossPercentageVideo; unsigned int burstPacketLoss; unsigned int roundTripTimeMilliseconds; unsigned int isNetworkCongested; unsigned int owrd; unsigned int targetBitrate; unsigned long long statisticsID; unsigned int videoPacketsReceived; } network; struct { unsigned int estimatorID; BOOL deregisterEstimator; BOOL isProbingSequence; BOOL isEndOfProbingSequence; unsigned int probingSequenceID; unsigned int messageLength; double arrivalTime; unsigned int mediaTimestamp; BOOL isPacketReceivedValid; struct { int packetType; unsigned int packetId; unsigned int sampleRate; unsigned int totalPacketsReceived; double receiveTimestamp; double owrd; double targetJitterQueueSize; unsigned int bandwidthEstimation; unsigned int localBurstyLoss; } packetReceived; } probing; struct { unsigned char linkID; unsigned int sendTimestamp; unsigned int receiveTimestamp; unsigned int totalPacketSent; unsigned int totalPacketReceived; unsigned int totalByteSent; unsigned int totalByteReceived; unsigned int serverStatsByteUsed; unsigned int bandwidthSample; unsigned int bandwidthEstimation; double roundTripTime; double owrd; double packetLossRate; double packetLossRateShortWindow; unsigned int actualBitrate; unsigned int instantBitrate; unsigned int serverStatsBitrate; unsigned int expectedBitrate; } serverStats; struct { unsigned int packetId; unsigned int totalPacketsSent; unsigned int totalBytesSent; double sendTimestamp; } packetSent; struct { int packetType; unsigned int packetId; unsigned int sampleRate; unsigned int totalPacketsReceived; double receiveTimestamp; double owrd; double targetJitterQueueSize; unsigned int bandwidthEstimation; unsigned int localBurstyLoss; } packetReceived; struct { unsigned int ssrc; unsigned int packetLossPercentage; unsigned int lastSequenceNumber; unsigned int roundTripTimeMilliseconds; } rtcpRR; struct { unsigned int mode; unsigned int remoteRadioAccessTechnology; unsigned int localRadioAccessTechnology; unsigned int maxBitrate; unsigned int minBitrate; unsigned int initialBitrate; BOOL isTrafficBursty; unsigned int featureFlags; } config; struct { unsigned int mediaEventType; unsigned int additionalFlushCount; unsigned int transactionID; unsigned int audioStallBitrate; float audioErasure; BOOL isKeyFrame; BOOL isTransitionToFEC; double videoStallTimeDelta; double videoStallTimeTotal; unsigned int refreshFrameTimestamp; unsigned int refreshFramePayloadType; unsigned int refreshFramePacketCount; unsigned long long idsParticipantID; } mediaEvent; struct { unsigned char version; unsigned char direction; unsigned char interfaceType; unsigned long long timestamp; unsigned long long maxThroughputBps; unsigned long long totalByteCount; unsigned int flushableQueueSize; unsigned int nonFlushableQueueSize; unsigned int averageDelayMillisecond; unsigned long long averageThroughputBps; int rateTrendSuggestion; unsigned int packetLossPerFrame; union { struct { unsigned char frequencyBand; unsigned char intermittentState; unsigned short estimatedIntermittentPeriod; unsigned short singleOutagePeriod; unsigned char btCoex; unsigned char radioCoex; unsigned char qualityScoreDelayRx; unsigned char qualityScoreDelayTx; unsigned char qualityScoreLossRx; unsigned char qualityScoreLossTx; unsigned char qualityScoreChannel; float offChannelTimeRatio; BOOL detectedFrequentOffChannelActivity; unsigned short wlanDutyCycle; unsigned int wifiObservedTxBitrate[6]; } wifi; struct { unsigned char radioAccessTechnology; short referenceSignalLevel; short signalLevel; char signalQuality; unsigned char uplinkBLER; unsigned char downlinkBLER; unsigned char bandwidthLimitationIndication; unsigned char cdrxState; unsigned short cdrxCycle; unsigned short estimatedOutagePeriod; unsigned char outageState; } baseband; } ; } nwConnection; struct tagVCStatisticsVideoLossFeedback { unsigned int frameRTPTimestamp; unsigned short packetsReceived; unsigned char frameSize; unsigned char packetsLost; } videoLossFeedback; } ; } _previousStatistics; void *_logNWDump; unsigned int _lastTimestampWithPacketDrop; unsigned int _packetDropCountPerFrame; BOOL _didSendCongestionEvent; } @property (retain, nonatomic) AVCStatisticsCollector *statisticsCollector; @property (readonly) unsigned int averageThroughputBps; @property (readonly) unsigned int averagePacketDelayMs; @property unsigned int maxAveragePacketDelayMs; @property (readonly) unsigned int packetDropCount; - (void)dealloc; - (void)enableNWLogDump:(void *)a0; - (BOOL)processNWConnectionNotification:(struct ifnet_interface_advisory { union { struct { unsigned char x0; unsigned char x1; unsigned short x2; int x3; unsigned long long x4; unsigned long long x5; unsigned long long x6; unsigned long long x7; unsigned int x8; unsigned int x9; unsigned int x10; unsigned char x11; unsigned char x12; unsigned short x13; unsigned short x14; unsigned char x15; unsigned char x16; unsigned char x17; unsigned char x18; } x0; struct { struct ifnet_interface_advisory_header { unsigned char x0; unsigned char x1; unsigned char x2; unsigned char x3; } x0; struct ifnet_interface_advisory_capacity { int x0; unsigned long long x1; unsigned long long x2; unsigned long long x3; unsigned long long x4; unsigned int x5; unsigned int x6; unsigned int x7; } x1; union { struct ifnet_interface_advisory_wifi_context { unsigned char x0; unsigned char x1; unsigned short x2; unsigned short x3; unsigned char x4; unsigned char x5; unsigned char x6; unsigned char x7; unsigned char x8; unsigned short x9; unsigned int x10[6]; } x0; struct ifnet_interface_advisory_cell_context { unsigned char x0; short x1; short x2; char x3; unsigned char x4; unsigned char x5; unsigned char x6; unsigned char x7; unsigned short x8; unsigned short x9; unsigned char x10; unsigned char x11; } x1; } x2; } x1; } x0; } *)a0; - (BOOL)processNWConnectionPacketEvent:(struct packet_id { unsigned char x0; unsigned char x1; unsigned short x2; unsigned int x3; unsigned int x4; unsigned int x5; } *)a0 eventType:(int)a1; - (void)sendCongestionEventWithTimestamp:(unsigned int)a0; @end