import type { VideoEffects } from '@vkontakte/calls-video-effects'; import type { EffectVoiceChange } from '@vkontakte/calls-audio-effects'; import type * as Vmoji from '@vkontakte/calls-vmoji'; import { IAsrData } from '../types/Asr'; import { ConversationData } from '../types/Conversation'; import HangupReason from '../classes/HangupReason'; import { MediaTrackKind } from '../classes/MediaSource'; import ChatRoomEventType from '../enums/ChatRoomEventType'; import ConversationOption from '../enums/ConversationOption'; import FatalError from '../enums/FatalError'; import MediaOption from '../enums/MediaOption'; import RoomsEventType from '../enums/RoomsEventType'; import UserRole from '../enums/UserRole'; import { IFeaturesPerRole } from '../types/ConversationFeature'; import { ExternalId, ExternalParticipant, ExternalParticipantId, ExternalParticipantListChunk, ExternalParticipantListMarkers } from '../types/ExternalId'; import { IFeedbackExternal } from '../types/Feedback'; import IceServer from '../types/IceServer'; import MediaModifiers from '../types/MediaModifiers'; import MediaSettings from '../types/MediaSettings'; import { IOnRemoteMovieData, ISharedMovieInfo, ISharedMovieState, ISharedMovieStoppedInfo } from '../types/MovieShare'; import MuteStates from '../types/MuteStates'; import { ParticipantsStateList, ParticipantStateMapped } from '../types/Participant'; import { MediaType } from '../types/ParticipantStreamDescription'; import { IRoomId, Room, RoomParticipantUpdate, Rooms, RoomsUpdate } from '../types/Room'; import { IAPIBaseUrl, IApiEnv } from '../types/Params'; import { VmojiError } from '../types/Vmoji'; import { DebugMessageType } from './Debug'; import { ParticipantStatus } from './External'; import { JSONObject } from './Json'; import { ParticipantCapabilities } from './SignalingCapabilities'; import { FacingMode } from './WebRTCUtils'; /** * Параметры инициализации */ export type ParamsObject = { /** @hidden */ platform: string; /** @hidden */ clientStatsPlatform: string; /** @hidden */ clientType: string; /** @hidden */ externalUserType: string; /** @hidden */ device: string; /** * API ключ приложения */ apiKey: string; /** @hidden */ apiEnv: IApiEnv; /** * Базовый урл для запросов к API одноклассников * Позволяет задать значение независимо от apiEnv * @hidden */ apiBaseUrl: IAPIBaseUrl; /** @hidden */ apiAuth?: { sessionKey?: string; sessionSecretKey?: string; accessToken?: string; }; /** * Токен авторизации */ authToken: string; /** * Токен анонимной авторизации */ anonymToken: string; /** * Домен, чтобы попасть в тестовую группу. Для тестирования экспериментальных улучшений существуют отдельные сервера, чтобы собирать фидбек и уже потом раскатывать на всех юзеров. Если передать сюда специальный ключ, то конверсейшн будет обрабатываться на таком сервере. */ domain: string; /** * Домен, куда будет ходить Ok api за данными * @hidden */ externalDomain: string; /** @hidden */ iceServers: IceServer[]; /** @hidden */ wssBase: string; /** @hidden */ wtsBase: string; /** @hidden */ wssToken: string; /** @hidden */ signalingReconnectDelay: number; /** @hidden */ signalingReconnectMaxDelay: number; /** @hidden */ signalingReconnectMaxCount: number; /** @hidden */ waitConnectionDelay: number; /** @hidden */ waitResponseDelay: number; /** @hidden */ waitMessageDelay: number; /** @hidden */ waitAnotherTabDelay: number; /** @hidden */ debugLog: boolean; /** @hidden */ debug: boolean; /** * Выставляет таймаут в ms для fetch запросов от sdk * По умолчанию 5000 ms * @hidden */ apiTimeout: number; /** * Количество ретраев прежде чем сбросить ошибку * @hidden */ apiMaxAttempt: number; /** * Не отправлять в ICE-кандидатах персональные IP-адреса * @see [RTCIceTransportPolicy](https://www.w3.org/TR/webrtc/#rtcicetransportpolicy-enum) * * _По умолчанию: `false`_ */ forceRelayPolicy: boolean; /** * Минимальная ширина видео в пикселях * * _По умолчанию: `428`_ */ videoMinWidth: number; /** * Максимальная ширина видео в пикселях * * _По умолчанию: `1280`_ */ videoMaxWidth: number; /** * Минимальная высота видео в пикселях * * _По умолчанию: `240`_ */ videoMinHeight: number; /** * Максимальная высота видео в пикселях * * _По умолчанию: `720`_ */ videoMaxHeight: number; /** * Соотношение сторон видео * * _По умолчанию: `16/9`_ */ videoAspectRatio: number; /** * FPS видео * * _По умолчанию: `25`_ */ videoFrameRate: number; /** * Какую камеру получать с мобильного устройства * * _По умолчанию: `FacingMode.USER` для мобильных устройств и `null` для остальных_ */ videoFacingMode: FacingMode | null; /** * FPS трансляции экрана * * _По умолчанию: `15`_ */ screenFrameRate: number; /** * Вариант захвата экрана. Поддерживается в Chrome 107+ * @see https://developer.chrome.com/docs/web-platform/screen-sharing-controls/ * @hidden */ displaySurface: DisplayCaptureSurfaceType; /** * Экземпляр класса `VideoEffects` из [`@vkontakte/calls-video-effects`](https://npmjs.com/package/@vkontakte/calls-video-effects) * * Можно установить позднее методом `setVideoEffects` */ videoEffects: VideoEffects | null; /** * Экземпляр класса `AudioEffects` из [`@vkontakte/calls-audio-effects`](https://npmjs.com/package/@vkontakte/calls-audio-effects) * * Можно установить позднее методом `setAudioEffects` */ audioEffects: EffectVoiceChange | null; /** * Максимальная ширина видео в пикселях для видео эффекта * * _По умолчанию: `640`_ */ videoEffectMaxWidth: number; /** * Максимальная высота видео в пикселях для видео эффекта * * _По умолчанию: `360`_ */ videoEffectMaxHeight: number; /** * Экземпляр класса `Vmoji` из [`@vkontakte/calls-vmoji`](https://npmjs.com/package/@vkontakte/calls-vmoji) * * Можно установить позднее методом `setVmoji` */ vmoji: typeof Vmoji | null; /** * Настройки Vmoji */ vmojiOptions: { protocolVersion: Vmoji.AnimojiVersion; renderingOptions: Partial; } | null; /** @hidden */ iceRestartWaitTime: number; /** @hidden */ transportConnectionWaitTime: number; /** * Частота получения статистики в миллисекундах * * _По умолчанию: `5000`_ */ statisticsInterval: number; /** * Частота отправки сообщения bad-net в p2p звонке * * _По умолчанию: `20000`_ * @hidden */ networkStatisticsInterval: number; /** * Параметры детектора голоса * * @property **speakerLevelMultiplier**: _number_ * * Множитель уровня громкости при переключении активного говорящего * * _По умолчанию: `1.8`_ * * @property **smoothing**: _number_ * * Значение сглаживания громкости [0..1] * * _По умолчанию: `0.8`_ */ voiceParams: { [key: string]: number; }; /** @hidden */ specListenerParams: { [key: string]: number; }; /** @hidden */ perfStatReportEnabled: boolean; /** @hidden */ callStatReportEnabled: boolean; /** * Включает логирование событий продуктовой статистики. * * _По умолчанию: `false`_ * @hidden */ clientEventsLoggingEnabled: boolean; /** * Отдавать приоритет кодеку H264 для исходящего видео * * _По умолчанию: `false`_ */ preferH264: boolean; /** * Отдавать приоритет кодеку VP9 для исходящего видео, * если preferH264 тоже выставлен в true то первый приоритет будет у VP9, второй у H264 * * _По умолчанию: `false`_ */ preferVP9: boolean; /** @hidden */ audioNack: boolean; /** @hidden */ asrDataChannel: boolean; /** * Размер пакета для отправки трансляции экрана в датаканал в байтах. * Максимальный размер пакета 65536 bytes в хроме, но по стандарту лучше максимум 16 Кб. * @hidden */ consumerScreenDataChannelPacketSize: number; /** @hidden */ screenShareWebmBuilder: boolean; /** @hidden */ noiseSuppression: boolean; /** * Количество входящих видео-треков. * * Только для звонков с серверной топологией. * Для прямых peer-to-peer звонков эта настройка не используется. * * При значении 0 количество треков меняется динамически * в зависимости от количества участников звонка. * * При значении отличном от 0 количество треков фиксировано, * при этом клиент должен уведомлять сервер о том, каких участников звонка * он хочет видеть, через вызов updateDisplayLayout * * _По умолчанию: `30`_ */ videoTracksCount: number; /** @hidden */ movieShare: boolean; /** @hidden */ breakVideoPayloadTypes: boolean; /** * Включить звонки контактам * * _По умолчанию: `false`_ * @hidden */ useCallsToContacts: boolean; /** * Включить постраничный вывод участников. Работает только если включено videoTracksCount (слоты) * * _По умолчанию: `false`_ */ useParticipantListChunk: boolean; /** * Включить сессионные залы * * _По умолчанию: `false`_ */ useRooms: boolean; /** * Включить чат румы * * _По умолчанию: `false`_ */ useChatRooms: boolean; /** * Включить поддержку добавления участника в разговор */ addParticipant: boolean; /** * Включает поддержку режима WAIT_FOR_ADMIN в звонках. */ waitForAdminInGroupCalls: boolean; hold: boolean; /** * Индекс участника для первого chunk'а который придет при установке соединения с сервером * * _По умолчанию: `0`_ */ participantListChunkInitIndex: number; /** * Количество участников которые придут в первом chunk'е при установке соединения с сервером * если параметр не проставлен то будет использоваться значение по умолчанию установленное на сервере */ participantListChunkInitCount: number | null; /** * Разрешить вход в звонок одним пользователем с разных устройств одновременно * * _По умолчанию: `false`_ */ joinFromMultipleDevices: boolean; /** * Фильтровать наблюдателей во всех колбэках * @hidden */ filterObservers: boolean; /** * Отключить звук собеседников * @hidden */ muteMode: boolean; /** * Сохранять (не удалять) аудио дорожки в стримах, поступающих клиенту * Позволяет клиенту получать и сохранять аудио данные * Внимание: может привести к "двойному" звуку при проигрывании * @hidden */ preserveAudioTracks: boolean; /** * Использовать congestion control для шаринга * @hidden */ screenShareCongestionControl: boolean; /** * Порог задержки (мс), выше которого включается congestion control для шаринга * @hidden */ screenShareCongestionControlThreshold: number; /** * Включить возможность захвата звука при трансляции экрана * * _По умолчанию: `false`_ */ audioShare: boolean; /** * Включить возможность захвата звука системы при трансляции окна * * _По умолчанию: `false`_ * @hidden */ audioShareWindowInclude: boolean; /** * Включить возможность захвата звука системы при трансляции всего экрана * * _По умолчанию: `false`_ * @hidden */ audioShareSystemInclude: boolean; /** * Включить поддержку динамического контента при трансляция экрана * * _По умолчанию: `false`_ */ fastScreenShare: boolean; /** @hidden */ fastScreenShareFrameRate: number; /** @hidden */ fastScreenShareWidth: number; /** @hidden */ fastScreenShareHeight: number; /** * Включить отправку быстрой шары с клиента по RTP * * _По умолчанию: `false`_ */ consumerFastScreenShare: boolean; /** * Включает отправку сервером нотификации video-quality-update * * _По умолчанию: `false`_ */ consumerFastScreenShareQualityOnDemand: boolean; /** * Включить поддержку приостановки видео в плохой сети. * * _По умолчанию: `false`_ */ videoSuspend: boolean; /** * Задержка обновления списка устройств после подключения/отключения камеры или микрофона * @hidden */ enumerateDevicesDelay: number; /** * Включает логгирование статистики webrtc * * _По умолчанию: `false`_ */ enableLogPerfStatReport: boolean; /** * Поддержка переключения качества видео в зависимости от сети * Только для режима p2p * * _По умолчанию: `false`_ */ switchVideoAtBadNetwork: boolean; /** * Включает деградацию фпс для видео с камеры при низком фпс с включенными вирт фонами * * _По умолчанию: `false`_ */ enableVideoEffectsFpsDegradation: boolean; /** * Включить поддержку simulcast на отправке * * _По умолчанию: `false`_ */ simulcast: boolean; /** * Включить поддержку webtransport для сигналинга * * _По умолчанию: `false`_ */ webtransport: boolean; /** * Включить поддержку webtransport для сигналинга в FireFox * Отдельная ручка, так как есть проблемы сейчас с FF * * _По умолчанию: `false`_ */ webtransportFF: boolean; /** * Включить поддержку прозрачного аудио * * _По умолчанию: `false`_ */ transparentAudio: boolean; /** * Получен локальный стрим с камеры/микрофона */ onLocalStream?: (stream: MediaStream | null, mediaSettings: MediaSettings) => void; /** * Локальный стрим изменился */ onLocalStreamUpdate?: (mediaSettings: MediaSettings, kind: MediaTrackKind) => void; /** * Локальный стрим с экрана добавлен/удалён */ onScreenStream?: (stream: MediaStream | null, mediaSettings: MediaSettings) => void; /** * Локальный стрим вимоджи добавлен/удалён */ onVmojiStream?: (stream: MediaStream | null, mediaSettings: MediaSettings) => void; /** * Произошла ошибка вимоджи */ onVmojiError?: (error: VmojiError) => void; /** * Изменился статус локального соединения */ onLocalStatus?: (status: ParticipantStatus) => void; /** * Получен стрим собеседника. * Если сервер закончил стримить собеседника, вместо стрима будет передан null */ onRemoteStream?: (userId: ExternalParticipantId, stream: MediaStream | null) => void; /** * Cтрим собеседника приостановлен/возобновлен. */ onRemoteStreamSuspended?: (userId: ExternalParticipantId, mediaType: MediaType, suspended: boolean) => void; /** * Получен стрим с экрана собеседника. * Если сервер закончил стримить экран собеседника, вместо стрима будет передан null */ onRemoteScreenStream?: (userId: ExternalParticipantId, stream: MediaStream | null) => void; /** * Получен стрим вимоджи собеседника. * Если сервер закончил стримить вимоджи собеседника, вместо стрима будет передан null */ onRemoteVmojiStream?: (userId: ExternalParticipantId, stream: MediaStream | null) => void; /** * Получен стрим трансляция или мувик от собеседника. * Если сервер закончил стримить экран собеседника, вместо стрима будет передан null */ onRemoteLive?: (userId: ExternalParticipantId, data: IOnRemoteMovieData) => void; /** * Получен собственный стрим трансляция или мувик. * Если сервер закончил стримить экран собеседника, вместо стрима будет передан null */ onLocalLive?: (userId: ExternalParticipantId, data: IOnRemoteMovieData) => void; /** * Получено обновление стрима или лайва от собеседника. */ onRemoteLiveUpdate?: (userId: ExternalParticipantId, data: ISharedMovieState) => void; /** * Получено обновление собственного стрима или лайва. */ onLocalLiveUpdate?: (userId: ExternalParticipantId, data: ISharedMovieState) => void; /** * Начат звонок */ onConversation?: (userId: ExternalParticipantId, mediaModifiers: MediaModifiers, muteStates: MuteStates, participants: ExternalParticipant[], rooms?: Rooms) => void; /** * Начальный список участников для постраничного звонка */ onConversationParticipantListChunk?: (chunk: ExternalParticipantListChunk) => void; /** * Изменились данные стрима собеседника */ onRemoteMediaSettings?: (userId: ExternalParticipantId, mediaSettings: MediaSettings, markers: ExternalParticipantListMarkers | null) => void; /** * Изменились данные стрима собеседника */ onLocalMediaSettings?: (userId: ExternalParticipantId, mediaSettings: MediaSettings) => void; /** * Полученны данные по стримам (лайв/мувик) от собеседника */ onRemoteSharedMovieInfo?: (userId: ExternalParticipantId, sharedMovieInfo: ISharedMovieInfo, roomId?: IRoomId) => void; /** * Полученны данные по остановленным стримам (лайв/мувик) от собеседника */ onRemoteSharedMovieStoppedInfo?: (userId: ExternalParticipantId, sharedMovieStoppedInfo: ISharedMovieStoppedInfo, roomId?: IRoomId) => void; /** * Полученны данные по собственным стримам (лайв/мувик) */ onLocalSharedMovieInfo?: (userId: ExternalParticipantId, sharedMovieInfo: ISharedMovieInfo, roomId?: IRoomId) => void; /** * Полученны данные по собственным остановленным стримам (лайв/мувик) */ onLocalSharedMovieStoppedInfo?: (userId: ExternalParticipantId, sharedMovieStoppedInfo: ISharedMovieStoppedInfo, roomId?: IRoomId) => void; /** * Добавили участника */ onParticipantAdded?: (userId: ExternalParticipantId, markers: ExternalParticipantListMarkers | null) => void; /** * Участник присоединился к звонку */ onParticipantJoined?: (userId: ExternalParticipantId, markers: ExternalParticipantListMarkers) => void; /** * Получены данные по изменению локальных состояний со стороны админа * Например, принудительно опущена рука * * @param participantState Полный объект состояния участника, полученный от SDK/сервера. * @param global `true` – действие глобальное (для всех участников), `false` – действие локальное (только у текущего пользователя). */ onLocalParticipantState?: (participantState: ParticipantStateMapped, global: boolean) => void; /** * Изменились данные состояний собеседника */ onRemoteParticipantState?: (userId: ExternalParticipantId, participantState: ParticipantStateMapped, markers: ExternalParticipantListMarkers | null) => void; /** * Изменились данные состояний нескольких собеседников */ onRemoteParticipantsState?: (stateList: ParticipantsStateList, roomId?: IRoomId) => void; /** * Изменился статус соединения собеседников */ onRemoteStatus?: (userIds: ExternalParticipantId[], status: ParticipantStatus, data: any) => void; /** * Разрешения на доступы были запрошены в браузере */ onPermissionsRequested?: () => void; /** * Ошибка получения трека с камеры или микрофона */ onPermissionsError?: (error: FatalError, original: Error) => void; /** * Пользователь отключился от звонка */ onRemoteRemoved?: (userId: ExternalParticipantId, markers: ExternalParticipantListMarkers | null) => void; /** * Изменилось состояние звонка */ onCallState?: (isCallActive: boolean, canAddParticipants: boolean, conversation: ConversationData) => void; /** * Изменилось состояние камеры или микрофона */ onDeviceSwitched?: (mediaOption: MediaOption, enabled: boolean) => void; /** * Изменились состояния устройств пользователя или разрешения включать камеру/микрофон */ onMuteStates?: (muteStates: MuteStates, unmuteOptions: MediaOption[], mediaOptions: MediaOption[], muteAll: boolean, unmute: boolean, userId: ExternalParticipantId | null, adminId: ExternalParticipantId | null, stateUpdated?: boolean, requestedMedia?: MediaOption[], roomId?: number | null) => void; /** * Изменились роли собеседника в звонке */ onRolesChanged?: (userId: ExternalParticipantId, roles: UserRole[], isInitial?: boolean) => void; /** * Изменились свои роли в звонке */ onLocalRolesChanged?: (roles: UserRole[], isInitial?: boolean) => void; /** * Закрепляет/открепляет собеседника для всех */ onPinnedParticipant?: (userId: ExternalParticipantId, unpin: boolean, markers: ExternalParticipantListMarkers | null, roomId?: number | null) => void; /** * Закрепляет/открепляет текущего пользователя у других собеседников */ onLocalPin?: (unpin: boolean) => void; /** * Изменились опции звонка */ onOptionsChanged?: (options: ConversationOption[]) => void; onRateNeeded?: Function; /** * Изменился говорящий в звонке */ onSpeakerChanged?: (userId: ExternalParticipantId) => void; /** * Громкость собеседников */ onVolumesDetected?: (volumes: { uid: ExternalParticipantId; volume: number; }[]) => void; /** * Громкость своего микрофона */ onLocalVolume?: (volume: number, isMicEnabled: boolean) => void; onJoinStatus?: Function; /** * Звонок был завершен */ onHangup?: (type: HangupReason | Error, conversationId: string | null) => void; /** * Входящий звонок был принят мной */ onCallAccepted?: () => void; /** * Исходящий звонок был принят кем-то * @param userId */ onAcceptedCall?: (userId: ExternalParticipantId, capabilities: ParticipantCapabilities) => void; /** * Список устройств изменился */ onDeviceChange?: () => void; onMultipartyChatCreated?: (conversation: ConversationData) => void; /** * Изменилась подпись звонка 1:1 */ onFingerprintChange?: (fingerprint: string) => void; /** * Требуется обновление токена */ onTokenExpired?: () => void; /** * Получено сообщение чата */ onChatMessage?: (message: string, from: ExternalParticipantId, direct: boolean) => void; /** * Получены данные от собеседника */ onCustomData?: (data: JSONObject, from: ExternalParticipantId, direct: boolean) => void; /** * Начата трансляция/запись звонка */ onRecordStarted?: (initiator: ExternalParticipantId, movieId: number, startTime: number, type: 'STREAM' | 'RECORD', externalMovieId?: string, externalOwnerId?: string, roomId?: number | null) => void; /** * Закончена трансляция/запись звонка */ onRecordStopped?: (roomId: number | null, stopBy: ExternalParticipantId | null) => void; /** * Состояние своей сети * * @param rating Оценка качества соединения от 0 до 1 */ onLocalNetworkStatusChanged?: (rating: number) => void; /** * Состояние сети участников * * @param status Оценки качества соединения участников от 0 до 1 */ onNetworkStatusChanged?: (status: { uid: ExternalParticipantId; rating: number; }[]) => void; /** * Получено отладочное сообщение. Работает только при выключенном режиме отладки */ onDebugMessage?: (type: DebugMessageType, ...args: any[]) => void; /** * Статистика звонка */ onStatistics?: (stats: {}) => void; /** * Ошибка воспроизведения звука */ onAutoplayError?: () => void; /** * Изменилось состояние зала ожидания/зала в режиме Audience * * @param eventType Тип события * @param totalCount Количество ожидающих/слушателей * @param firstParticipants Первые несколько ожидающих в зале * @param addedParticipantIds Некоторое количество участников, добавленных в зал * @param removedParticipantIds Некоторое количество участников, убранных из зала */ onChatRoomUpdated?: (eventType: ChatRoomEventType, totalCount: number, firstParticipants: ExternalId[], addedParticipantIds: ExternalId[], removedParticipantIds: ExternalId[]) => void; /** * Получен микшированный аудио стрим. * @hidden * @param stream стрим от WebRTC */ onRemoteMixedAudioStream?: (stream: MediaStream) => void; /** * Получена новая ссылка на звонок * @param joinLink токен присоединения к звонку */ onJoinLinkChanged?: (joinLink: string) => void; /** * Получено обновление списка сессионных залов * @param updates список обновлений по залам */ onRoomsUpdated?: (updates: Partial>) => void; /** * Получено обновление сессионных зало * @param eventTypes список событий * @param roomId номер сессионного зала * @param room сессионный зал */ onRoomUpdated?: (eventTypes: RoomsEventType[], roomId: number, room: Room | null, deactivate: boolean | null) => void; /** * Получение обновление списка участников в сессионном зале * @param update обновление списка участников */ onRoomParticipantsUpdated?: (update: RoomParticipantUpdate) => void; /** * Получение информации о смене зала * @param roomId номер сессионного зала */ onRoomSwitched?: (roomId: number | null) => void; /** * Установить id сессионного зала на старте звонка * @param roomId номер сессионного зала */ onRoomStart?: (roomId: number | null) => void; /** * Получены новые реакции в звонке * @param feedback массив с реакциями */ onFeedback?: (feedback: IFeedbackExternal[], roomId: number | null) => void; /** * Изменился список ролей, которым доступны ConversationFeatures * * @param featuresPerRole Объект вида ключ: ConversationFeature = значение: UserRole[] * (если ключ фичи отсутствует, или в ролях пустой массив, считаем фичу доступной для всех пользователей) */ onFeaturesPerRoleChanged?: (featuresPerRole: IFeaturesPerRole) => void; /** * Изменился Vmoji-аватар пользователя * @param externalId Id пользователя, у которого изменился аватар */ onParticipantVmojiUpdate?: (externalId: ExternalParticipantId) => void; /** * Начата текстовая расшифровка звонка * @param initiatorId Id пользователя, запустившего расшифровку звонка * @param movieId Id расшифровки * @param roomId Id комнаты */ onAsrStarted?: (initiatorId: ExternalParticipantId, movieId: number, roomId: number | null) => void; /** * Закончена текстовая расшифровка звонка * @param roomId Id комнаты */ onAsrStopped?: (roomId: number | null) => void; /** * Получена расшифровка речи * @param id Id пользователя, произнесшего реплику * @param text Текст расшифровки * @param timestamp Время расшифровки * @param duration Длительность реплики в расшифровке */ onAsrTranscription?: (id: ExternalParticipantId, text: string, timestamp: number, duration: number) => void; /** * Установка начальных параметров текстовой расшифровки звонка. (Используется при входе в звонок/ смене комнаты) * @param data Начальная информация по ASR * @param roomId Id Комнаты */ onAsrSet?: (data: IAsrData | null, roomId: number | null) => void; /** * Админ начал/остановил совместное использование стороннего web-приложения * @param userId id участника-админа * @param sharedUrl url страницы */ onRemoteSharedUrl?: (userId: ExternalParticipantId, sharedUrl: string | undefined, roomId: IRoomId) => void; /** * Изменился id участника (деанонимизация) * @param prevId * @param newId */ onParticipantIdChanged?: (prevId: ExternalParticipantId, newId: ExternalParticipantId) => void; /** * Предложение включить режим автоматического отключения приёма видео * в плохой сети * @param bandwidth текущая полоса пропускания, kbps */ onVideoSuspendSuggest?: (bandwidth: number) => void; /** * Одобрено повышение пользователя в зале ожидания/зале в режиме Audience * * @param adminParticipantId админ, одобривший повышение */ onPromotionApproved?: (adminParticipantId: ExternalParticipantId) => void; /** * Участник повышен/разжалован в зале ожидания/зале в режиме Audience * * @param demoted участник разжалован */ onPromoted?: (demoted: boolean) => void; /** * Собеседник подключился к сигналлингу */ onPeerRegistered?: () => void; }; export default abstract class Params { private static _params; static set(data: { [key: string]: any; }): void; static getScreenFrameRate(fastScreenShare: boolean): number; static get(name: N): ParamsObject[N]; static get appName(): string; static get appVersion(): number; static get sdkVersion(): string; static get debug(): boolean; static get protocolVersion(): 5 | 6; static get platform(): string; static set platform(value: string); static get clientStatsPlatform(): string; static set clientStatsPlatform(value: string); static get clientType(): string; static set clientType(value: string); static get externalUserType(): string; static set externalUserType(value: string); static get device(): string; static get apiKey(): string; static get apiEnv(): IApiEnv; static get apiBaseUrl(): IAPIBaseUrl; static set apiBaseUrl(apiBaseUrl: IAPIBaseUrl); static apiEndpoint(apiEnv?: IApiEnv): string; static get apiTimeout(): number; static get apiMaxAttempt(): number; static get authToken(): string; static set authToken(value: string); static get anonymToken(): string; static set anonymToken(value: string); static get domain(): string; static get externalDomain(): string; static get iceServers(): IceServer[]; static set iceServers(value: IceServer[]); static get wssBase(): string; static set wssBase(value: string); static get wtsBase(): string; static set wtsBase(value: string); static get wssToken(): string; static set wssToken(value: string); static get signalingReconnectDelay(): number; static get signalingReconnectMaxDelay(): number; static get signalingReconnectMaxCount(): number; static get waitConnectionDelay(): number; static get waitResponseDelay(): number; static get waitMessageDelay(): number; static get waitAnotherTabDelay(): number; static get debugLog(): boolean; static get forceRelayPolicy(): boolean; static set forceRelayPolicy(value: boolean); static get videoMinWidth(): number; static get videoMaxWidth(): number; static set videoMaxWidth(value: number); static get videoMinHeight(): number; static get videoMaxHeight(): number; static set videoMaxHeight(value: number); static get videoAspectRatio(): number; static get videoFrameRate(): number; static get videoFacingMode(): FacingMode | null; static set videoFacingMode(value: FacingMode | null); static get displaySurface(): DisplayCaptureSurfaceType; static get audioEffects(): EffectVoiceChange | null; static set audioEffects(value: EffectVoiceChange | null); static get videoEffects(): VideoEffects | null; static set videoEffects(value: VideoEffects | null); static get videoEffectMaxWidth(): number; static set videoEffectMaxWidth(value: number); static get videoEffectMaxHeight(): number; static set videoEffectMaxHeight(value: number); static get vmoji(): typeof Vmoji | null; static set vmoji(value: typeof Vmoji | null); static get vmojiOptions(): NonNullable; static set vmojiOptions(value: ParamsObject['vmojiOptions']); static get voiceParams(): { [key: string]: number; }; static get specListenerParams(): { [key: string]: number; }; static get iceRestartWaitTime(): number; static get transportConnectionWaitTime(): number; static get statisticsInterval(): number; static set statisticsInterval(value: number); static get networkStatisticsInterval(): number; static get perfStatReportEnabled(): boolean; static get callStatReportEnabled(): boolean; static get clientEventsLoggingEnabled(): boolean; static get enableLogPerfStatReport(): boolean; static get asrDataChannel(): boolean; static get consumerScreenDataChannelPacketSize(): number; static get screenShareWebmBuilder(): boolean; static get noiseSuppression(): boolean; static get preferH264(): boolean; static get preferVP9(): boolean; static get audioNack(): boolean; static get movieShare(): boolean; static get videoTracksCount(): number; static get breakVideoPayloadTypes(): boolean; static get useCallsToContacts(): boolean; static get useParticipantListChunk(): boolean; static get useRooms(): boolean; static get useChatRooms(): boolean; static get addParticipant(): boolean; static get waitForAdminInGroupCalls(): boolean; static get hold(): boolean; static get participantListChunkInitIndex(): number; static get participantListChunkInitCount(): number | null; static get filterObservers(): boolean; static get muteMode(): boolean; static get preserveAudioTracks(): boolean; static get audioShare(): boolean; static get audioShareWindowInclude(): boolean; static get audioShareSystemInclude(): boolean; static get fastScreenShare(): boolean; static get screenShareCongestionControl(): boolean; static get screenShareCongestionControlThreshold(): number; static get fastScreenShareWidth(): number; static get fastScreenShareHeight(): number; static get consumerFastScreenShare(): boolean; static get consumerFastScreenShareQualityOnDemand(): boolean; static get videoSuspend(): boolean; static get enumerateDevicesDelay(): number; static get switchVideoAtBadNetwork(): boolean; static get enableVideoEffectsFpsDegradation(): boolean; static get simulcast(): boolean; static get webtransport(): boolean; static get webtransportFF(): boolean; static get transparentAudio(): boolean; static toJSON(): { apiKey: string; apiEnv: string; audioShare: boolean; audioShareWindowInclude: boolean; audioShareSystemInclude: boolean; useCallsToContacts: boolean; useParticipantListChunk: boolean; useRooms: boolean; useChatRooms: boolean; addParticipant: boolean; fastScreenShare: boolean; participantListChunkInitCount: number | null; screenShareCongestionControl: boolean; screenShareCongestionControlThreshold: number; videoTracksCount: number; asrDataChannel: boolean; videoMaxHeight: number; videoMaxWidth: number; videoEffectMaxHeight: number; videoEffectMaxWidth: number; videoSuspend: boolean; debugLog: boolean; callStatReportEnabled: boolean; joinFromMultipleDevices: boolean; movieShare: boolean; clientType: string; clientStatsPlatform: string; consumerScreenDataChannelPacketSize: number; switchVideoAtBadNetwork: boolean; simulcast: boolean; webtransport: boolean; webtransportFF: boolean; transparentAudio: boolean; }; }