import type { IEffect } from '@vkontakte/calls-video-effects'; import EventEmitter from '../classes/EventEmitter'; import MediaOption from '../enums/MediaOption'; import MediaSettings, { IVideoDimentions } from '../types/MediaSettings'; import { ScreenCaptureSettings } from '../types/ScreenCaptureSettings'; export declare const enum MediaSourceEvent { SOURCE_CHANGED = "SOURCE_CHANGED", SOURCE_READY = "SOURCE_READY", TRACK_REPLACED = "TRACK_REPLACED", SCREEN_STATUS = "SCREEN_STATUS", ANIMOJI_STATUS = "ANIMOJI_STATUS" } /** * Тип трека */ export declare const enum MediaTrackKind { 'audio' = "audio", 'video' = "video", 'screen' = "screen", 'audioshare' = "audioshare" } interface AudioEffectParams { effects: string[]; isPreset?: boolean; } /** * тип источника (для сервера) */ export declare enum MediaSourceType { CAMERA = 1, SCREEN = 2 } export declare class MediaSource extends EventEmitter { /** Стрим с камеры и микрофона пользователя */ protected _stream: MediaStream | null; private _screenTrack; private _audioShareTrack; private _screenShareTrack; /** Трек для отправки в медиа-канал. Может отличаться при скриншаринге в дата-канал */ private _sendVideoTrack; /** Трек с камеры. В стриме будет другой трек при включенных видео эффектах */ private _cameraVideoTrack; /** Трек с микрофона. В стриме будет другой трек при включенных аудио эффектах */ private _micAudioTrack; /** Трек аудио эффектов. Не изменяется на протяжении всего времени */ private _audioEffectsTrack; private _mediaSettings; private _videoStatusOnScreenCapturingEnabled; private _effect; private _audioEffectParams; private _onDeviceChange; /** Состояние выключателя Animoji в UI */ private _animojiEnabled; /** вычисляем низкую производительность видео эффектов */ private readonly _videoEffectsFpsLimiter?; constructor(); get cameraVideoTrack(): MediaStreamTrack | null; set cameraVideoTrack(track: MediaStreamTrack | null); request(mediaOptions?: MediaOption[], needEmptyTracks?: boolean): Promise; getStream(): MediaStream | null; getScreenTrack(): MediaStreamTrack | null; getSendVideoTrack(noDataChannel?: boolean): MediaStreamTrack | null; getSendAudioTrack(): MediaStreamTrack | null; get isAnimojiRequested(): boolean; addTrackToPeerConnection(pc: RTCPeerConnection, observer: boolean, noDataChannel: boolean): void; getMediaSettings(): MediaSettings; changeDevice(kind: MediaDeviceKind): Promise; /** * Установка кастомного стрима для видео, например внешний шаринг экрана * или стрим из canvas * Нужно для работы в electron, там устройства шаринга отдают сразу стрим * @hidden */ setVideoStream(stream: MediaStream, isScreen: boolean): Promise; private _initDeviceChangeListener; private _destroyDeviceChangeListener; private _changeVideoInput; /** * Установка кастомного стрима для аудио, например аудио-трек вместо звука с микрофона. * Может использоваться для тестирования. */ setAudioStream(stream: MediaStream): Promise; private _changeAudioInput; private _changeScreen; private _disableScreenCapture; private stopAudioShareTrack; private _applyAudioEffect; protected getSilentAudioShareTrack(): MediaStreamTrack; protected getBlackScreenShareTrack(): MediaStreamTrack; protected _replaceLocalTrack(newTrack: MediaStreamTrack, sendTrack?: MediaStreamTrack): Promise; private _setEffect; private _stopEffect; destroy(): void; toggleScreenCapturing(settings: ScreenCaptureSettings): Promise; disableScreenCapturing(): Promise; private videoTrackMuteHandler; toggleVideo(enabled: boolean): Promise; toggleAudio(enabled: boolean): Promise; toggleAnimojiCapturing(enabled: boolean): void; onAnimojiSender(created: boolean): void; setResolution({ video, effect }: { video: IVideoDimentions; effect?: IVideoDimentions; }): Promise; getCameraVideoTrack(): MediaStreamTrack | null; updateNoiseSuppression(): Promise; videoEffect(effect: IEffect | null): Promise; audioEffect(audioEffectParams: AudioEffectParams | null): Promise; getAudioShareTrack(): MediaStreamTrack | null; private handleVideoEffectsLowFps; private get _frameRate(); private _applyVideoConstraints; getScreenShareTrack(): MediaStreamTrack | null; } export {};