import { TransportTopology } from '../classes/transport/Transport'; export type StatTransport = { timestamp: number; availableOutgoingBitrate: number; totalRoundTripTime: number; currentRoundTripTime: number; bytesSent: number; bytesReceived: number; local?: ILocalIceCandidateStat; remote?: IRemoteIceCandidateStat; averageNetStat?: AverageNetStat; }; export type AverageNetStat = { currentRoundTripTime: number; lostPercent: number; }; export interface IRemoteIceCandidateStat { type: RTCIceCandidateType; address: string; port: number; protocol: string; } export interface ILocalIceCandidateStat extends IRemoteIceCandidateStat { relayProtocol: string; networkType: RTCNetworkType; } interface StatRtpOutboundVideo { frameHeight?: number; frameWidth?: number; /** * Идентификатор потока RTP (RID). * * Используется для идентификации различных потоков видео (например, simulcast) в сессиях WebRTC. */ rid?: string; framesSent?: number; framesPerSecond?: number; targetBitrate?: number; } export interface StatRtp extends StatRtpOutboundVideo { /** * Уникальный идентификатор источника синхронизации RTP */ ssrc: number; /** * Идентификатор медиалинии (MID) * * Используется для уникальной идентификации медиалинии в рамках WebRTC-сессии. * MID помогает сопоставлять медиапотоки с их соответствующими трансиверами. */ mid?: string; /** * Тип статистики (например, inbound-rtp, outbound-rtp) */ type: string; /** * Тип медиа (например, audio, video) */ kind: string; /** * Общее количество байтов, полученных по этому потоку */ bytesReceived: number; /** * Общее количество байтов, отправленных по этому потоку */ bytesSent: number; /** * Общее количество байтов заголовков, полученных по этому потоку */ headerBytesReceived: number; /** * Общее количество байтов заголовков, отправленных по этому потоку */ headerBytesSent: number; /** * Среднее значение джиттера в секундах * Джиттер — это вариация задержки в получении пакетов данных. */ jitter: number; /** * Общее количество потерянных пакетов */ packetsLost: number; /** * Общее количество полученных пакетов */ packetsReceived: number; /** * Общее количество отправленных пакетов */ packetsSent: number; /** * Доля потерянных пакетов */ fractionLost: number; /** * Количество Picture Loss Indication (PLI) сообщений * PLI — это сообщения, указывающие на потерю кадров изображения. */ pliCount: number; /** * Количество Full Intra Request (FIR) сообщений * FIR — это запросы на отправку полного внутрикодированного кадра. */ firCount: number; /** * Количество Negative ACKnowledgement (NACK) сообщений * NACK — это сообщения, указывающие на потерю пакетов данных. */ nackCount: number; /** * Идентификатор пользователя, связанный с этим потоком */ userId?: string; /** * Пропускная способность в битах в секунду */ bandwidth?: number; /** * Процент потерянных пакетов */ packetLoss?: number; /** * Частота дискретизации в герцах * Частота дискретизации определяет качество звука. */ clockRate?: number; /** * Название кодека * @example audio/opus, video/vp8 */ mimeType?: string; /** * Библиотека, которая используется для кодека */ encoderImplementation?: string; /** * Библиотека, которая используется для декодера */ decoderImplementation?: string; /** * Параметры кодека, есть только у audio кодеков */ sdpFmtpLine?: string; /** * Общее количество декодированных кадров */ framesDecoded?: number; /** * Общее количество полученных кадров */ framesReceived?: number; /** * Общее количество отброшенных кадров */ framesDropped?: number; /** * Изменение количества отброшенных кадров */ framesDroppedDelta?: number; /** * Изменение задержки между кадрами */ interframeDelayVariance?: number; /** * Общее количество полученных аудиосэмплов */ totalSamplesReceived?: number; /** * Общее время кодирования видео в секундах. * * Показывает, сколько времени было потрачено на кодирование видео кадров. * Не применяется для аудио. */ totalEncodeTime?: number; /** * Общее количество замаскированных сэмплов */ concealedSamples?: number; /** * Количество вставленных сэмплов для замедления */ insertedSamplesForDeceleration?: number; /** * Количество удаленных сэмплов для ускорения */ removedSamplesForAcceleration?: number; /** * Количество замаскированных беззвучных сэмплов */ silentConcealedSamples?: number; /** * Количество событий маскировки */ concealmentEvents?: number; /** * Общее количество аудиоэнергии * Аудиоэнергия — это мера мощности аудиосигнала. */ totalAudioEnergy?: number; /** * Общее время замерзания в секундах */ totalFreezesDuration: number; /** * Изменение общего времени замерзания * Время замерзания — это период, в течение которого поток временно останавливается. */ totalFreezesDurationDelta?: number; /** * Количество событий замерзания */ freezeCount: number; /** * Изменение количества событий замерзания */ freezeCountDelta?: number; } export type StatItem = { timestamp: number; transport: StatTransport; rtps: StatRtp[]; remoteRtps?: StatRtp[]; }; export type StatResult = { inbound: { topology: TransportTopology; transport: StatTransport; rtps: StatRtp[]; }; outbound: { topology: TransportTopology; transport: StatTransport; rtps: StatRtp[]; }; remoteInbound: { topology: TransportTopology; transport: StatTransport; rtps: StatRtp[]; }; }; export {};