import type { ParsedInboundAudioStreamStats, ParsedInboundVideoStreamStats } from 'webrtc-issue-detector'; import type EnhancedEventEmitter from '../EnhancedEventEmitter'; import type { MOSScores } from '../qoe/types'; import type { PeerTrackInfo, PreferredLayersParams, SpatialLayerParams, TrackLabel } from './common'; import type { PeerConsumer } from './peerConsumer'; /** * Карта событий удалённого трека, доступная через `peerTrack.observer`. */ export interface PeerTrackObserverEvents { 'track-start': [PeerTrack]; 'track-end': [PeerTrack]; 'track-failed': [PeerTrack]; 'track-paused': [PeerTrack]; 'track-resumed': [PeerTrack]; 'volume-changed': [{ value: number; }]; } /** * Публичная форма удалённого трека, который SDK возвращает через `peer.tracks`. * * Экземпляры создаются и управляются самим SDK, а приложение получает их для * управления удалённым медиа, чтения статистики и подписки на события трека. */ export interface PeerTrack { readonly label: TrackLabel; readonly observer: EnhancedEventEmitter; readonly mediaStreamTrack: MediaStreamTrack; readonly kind: 'audio' | 'video'; readonly isPaused: boolean; readonly isMuted: boolean; readonly isRemote: boolean; readonly consumerId?: string; readonly currentSpatialLayer: number; readonly volume: number; readonly connectionScores: MOSScores; readonly audioWebRTCStats?: ParsedInboundAudioStreamStats; readonly videoWebRTCStats?: ParsedInboundVideoStreamStats; close: (params?: { closeRemote?: boolean; }) => Promise; mute: () => Promise; unmute: () => Promise; pause: (pauseRemote?: boolean) => Promise; resume: (resumeRemote?: boolean) => Promise; requestVideoPreferredLayers: (params: PreferredLayersParams) => Promise; requestKeyFrame: () => Promise; getVideoAvailableLayers: () => SpatialLayerParams[] | undefined; getInfo: () => Promise; readonly consumer: PeerConsumer | undefined; setVolume: (value: number) => void; }