import type { ISDKConfig } from "../config"; import type { LanguageConfig } from "../translation/types"; import type { IUpdatableVKVideoPlayerConfig, IVideoData, IVKVideoPlayerConfig } from "../types"; import { type QualityLimits, type Seconds } from "@vkontakte/videoplayer-shared"; import type { InterfaceLanguage } from "@vkontakte/videoplayer-shared"; import type { PlaybackRate } from "@vkontakte/videoplayer-core"; import { type IStatContext } from "@vkontakte/videoplayer-statistics"; import { ThinOneStat } from "@vkontakte/videoplayer-statistics"; import { AnnotationsApi } from "../utils/webAPI/annotationsApi/annotationsApi"; import type { AdditionalContextMenuItem, AdditionalSettingsMenuItem } from "../components/Menus/subMenuTabs/types"; import type { AdditionalButton } from "../components/Controls/types"; import { SlotsApi } from "../utils/webAPI/slotsApi"; import { HTMLElement } from "./HTMLElement"; export declare class VKVideoPlayer extends HTMLElement { private svelteStubComponent?; private svelteRootComponent?; /** * Слой, который живет на протяжении жизни плеера, не уничтожается между переключениями видео. */ private sveltePersistentLayerComponent?; private svelteErrorComponent?; private store?; private statistics?; private appTracer?; private admanWrapper?; private _shadowRoot; private playerContainer; private rootContainer; private stateContainer; private shadowRootContainer; private playerId; private uiConfig; private coreConfig; private statisticsConfig; private metaConfig; private interactiveController; private interactiveContainer; private graphMadePause; private currentPlayingVideoIndex; private needToRepeatPlaylist; private videoConfig; private pictureInPictureApi; private mediaSessionApi; private unsubscribePlayerPhaseSubscription; private readonly logger; private readonly log; private readonly subscription; private readonly interactiveSubscription; annotationsApi: AnnotationsApi | undefined; slotsApi: SlotsApi | undefined; private focusManager; private prevIsid; private isInited; private videoStarted; private postponedInitParams; private internalsExposure; private shadowDOMCallbacksDisabled; private readonly fatalError$; constructor(); private connectedCallback; private updatePersistentLayerProps; private disconnectedCallback; private initPlayerRootContainers; private needToShowNextPrevButtons; private isNextButtonActive; private isPrevButtonActive; private isControlDisabled; private getNextVideoInfo; private readonly createOneStat; private createThinOneStat; private createStatisticsForVideo; private createAppTracerForVideo; private createAdsParamsForVideo; private createPlayer; private readonly handleDomReady; private readonly firstStart; private initVideo; private initQualitySettings; private get shouldLoop(); private get isMobile(); private get useMinimalViewForDpip(); get shouldKeepPlayerElement(): boolean; get shouldUseDpip(): boolean; private addPlayerInfoSubscriptions; playNextVideo(): void; playPrevVideo(): void; toggleFullscreen(): void; /** * !!! Сейчас нее будет полноценно работать, * потому что часть полей которые реально относятся к видео передаются в videoConfig * А videoConfig формируется в слое интеграции. * В частности: adsParams, canDownload, failoverHosts, volumeMultiplier... * @private */ private updatePlayerWithCurrentVideo; private createPlayerWithCurrentVideo; private playPrevChapter; private seekToInteractive; private initInteractives; private checkVideosList; /** * Lagacy comment: * А это из-за проблем архитектуры * videoConfig - настройки экземпляра плеера для конкретного видео, sdkConfig.ui – настройки поведения плеера для всех * Фичи включаются как суперпозиция этих двух конфигов. * Из-за того что Root и Store – два источника правды синхронизировать конфиги придётся здесь переопределением дописывая поля из sdkConfig в videoConfig * TODO: структурировать поток данных в рамках VP-958: Конфиги -> стор -> Root */ private overrideVideoConfigFromUIConfig; initPlayer(videoConfig: IVKVideoPlayerConfig, sdkConfig?: Partial): void; updatePlayer(videoConfig: IUpdatableVKVideoPlayerConfig): void; private isOneVideoPlaylist; private updateRootPropsAfterPlaylistChanged; private updateVideos; /** * Обновление плейлиста. Будут перезаписаны все видео до текущего */ updatePrevVideos(videos: IVideoData[]): void; /** * Обновление плейлиста. Будут перезаписаны все видео после текущего */ updateNextVideos(videos: IVideoData[]): void; private initMediaSession; private setupMediaSessionForVideo; private setupMediaSessionForAds; moveTo(container: HTMLElement): void; play(): void; pause(): void; stop(): void; setMuted(muted: boolean): void; toggleSubtitle(): void; changeSubtitle(enabled: boolean, id?: string): void; hideControls(): void; showControls(): void; setPiPEnabled(enabled: boolean): void; setVolume(volume: number): void; setRepeat(repeat: boolean): void; seekTime(time: number): void; private readonly seekTimeInternal; seekEpisodeStartTime(time: number): void; returnFocusToEpisodes(): void; setPlaybackRate(playbackRate: PlaybackRate): void; setAutoQualityLimits(limits: QualityLimits): void; /** включение режима автоматического качества (это не тоггл!) */ setAutoQuality(): void; /** * __тоггл режима экономии трафика__ * * - при включении так же будет включен режим автоматического качества * (если был выключен, например, ручным выбором качества пользователем) */ toggleTrafficSaving(value: boolean): void; /** * __тоггл режима высокого качества__ * * - при включении так же будет включен режим автоматического качества * (если был выключен, например, ручным выбором качества пользователем) */ toggleHighQuality(value: boolean): void; changeAudioStream(id: string): void; addLanguage(config: LanguageConfig): void; setLanguage(language: InterfaceLanguage | string): Promise; private replaceVideoDataInConfig; setLiveStart(videoData: IVideoData): void; setLiveWaitingStart(): void; /** * Идёт доигрывание трансляции */ private isLiveTailPlaying; /** * @param forceImmediate Позволяет немедленно показать состояние ожидания, не дожидаясь окончания доигрывания буффера и попыток получить поток */ setLiveWaitingRecover(forceImmediate?: boolean): void; setLiveWaitingRecord(): void; setLiveEnd(videoData: IVideoData, autoplay?: boolean): void; setLiveLowLatency(isLowLatency: boolean): void; setLooped(looped: boolean): void; getDebugData(): string; getDeviceId(): string | undefined; replayInteractiveVideo(): void; replayInteractiveChapter(callback?: () => void): Promise; showInteractiveIndicatorTooltip(newValue: boolean, useTimeout?: boolean): void; switchToActiveLive(): void; updateAdditionalSettingsItem(itemId: string, fields: Partial>): void; addAdditionalSettingsItem(newItem: AdditionalSettingsMenuItem): void; removeAdditionalSettingsItem(itemId: string): void; updateAdditionalContextItem(itemId: string, fields: Partial>): void; addAdditionalContextItem(newItem: AdditionalContextMenuItem): void; removeAdditionalContextItem(itemId: string): void; updateAdditionalButton(itemId: string, fields: Partial>): void; addAdditionalButton(newButton: AdditionalButton): void; removeAdditionalButton(itemId: string): void; updateStatContext(statContext: Partial): void; handleTimerNextVideo(state: boolean): void; togglePictureInPicture(): void; focus(): void; /** * Восстанавливает фокус на последнем сфокусированном элементе в плеере. */ restoreFocus(): void; /** * Обработка внешнего события клавиатуры. * Метод preventDefault не будет вызван при обработке внешего события. * @param {KeyboardEvent} event Событие из внешнего обработчика * @returns {boolean} Было ли событие обработано внутри плеера */ handleExternalKeyboardEvent(event: KeyboardEvent): boolean; setAutoplayNext(autoplayNext: boolean): void; getTotalViewTime(): Seconds | undefined; private unmountComponent; }