@vkontakte/videoplayer-core 2.0.157-dev.b8834f3f.0 → 2.0.157-dev.baccd7d5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es2015.esm.js +36 -37
- package/esnext.esm.js +36 -37
- package/evergreen.esm.js +7 -7
- package/package.json +7 -30
- package/types/index.d.ts +10 -10
- package/types/player/Player.d.ts +112 -16
- package/types/player/types.d.ts +103 -144
- package/types/player/utils/optimisticPosition.d.ts +2 -2
- package/types/player/utils/selectContainer.d.ts +1 -1
- package/types/providers/ChromecastPresentationApiProvider/ChromecastPresentationApiInitializer.d.ts +1 -1
- package/types/providers/ChromecastProvider/ChromecastInitializer/index.d.ts +1 -1
- package/types/providers/ChromecastProvider/ChromecastInitializer/types.d.ts +1 -1
- package/types/providers/ChromecastProvider/types.d.ts +1 -1
- package/types/providers/DashLiveProvider/DashLiveProvider.d.ts +2 -2
- package/types/providers/DashLiveProvider/utils/LiveDashPlayer.d.ts +3 -3
- package/types/providers/DashProvider/baseDashProvider.d.ts +10 -10
- package/types/providers/DashProvider/lib/LiveTextManager.d.ts +1 -1
- package/types/providers/DashProvider/lib/buffer.d.ts +2 -2
- package/types/providers/DashProvider/lib/fetcher.d.ts +3 -3
- package/types/providers/DashProvider/lib/player.d.ts +6 -6
- package/types/providers/DashProvider/lib/types.d.ts +3 -3
- package/types/providers/DashProvider/lib/utils.d.ts +2 -2
- package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +12 -12
- package/types/providers/DashProviderVirtual/dashCmafLiveProvider.d.ts +1 -1
- package/types/providers/DashProviderVirtual/dashProvider.d.ts +1 -1
- package/types/providers/DashProviderVirtual/lib/LiveTextManager.d.ts +2 -2
- package/types/providers/DashProviderVirtual/lib/buffer/types.d.ts +3 -3
- package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/baseVirtualBufferManager.d.ts +6 -6
- package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/byteRangeVirtualBufferManager.d.ts +5 -5
- package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/liveVirtualBuffer.d.ts +5 -5
- package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/templateVirtualBufferManager.d.ts +5 -5
- package/types/providers/DashProviderVirtual/lib/buffer/virtualBuffer/virtualBufferFactory.d.ts +3 -3
- package/types/providers/DashProviderVirtual/lib/fetcher.d.ts +3 -3
- package/types/providers/DashProviderVirtual/lib/player/basePlayer.d.ts +10 -10
- package/types/providers/DashProviderVirtual/lib/player/livePlayer.d.ts +8 -8
- package/types/providers/DashProviderVirtual/lib/player/player.d.ts +2 -2
- package/types/providers/DashProviderVirtual/lib/player/types.d.ts +3 -3
- package/types/providers/DashProviderVirtual/lib/types.d.ts +3 -3
- package/types/providers/DashProviderVirtual/lib/utils.d.ts +2 -2
- package/types/providers/HlsLiveProvider/LiveTextManager.d.ts +1 -1
- package/types/providers/HlsLiveProvider/index.d.ts +3 -3
- package/types/providers/HlsProvider/index.d.ts +2 -2
- package/types/providers/HlsProvider/manifestDataExtractor.d.ts +1 -1
- package/types/providers/MpegProvider/index.d.ts +1 -1
- package/types/providers/ProviderContainer/index.d.ts +3 -3
- package/types/providers/ProviderContainer/types.d.ts +1 -1
- package/types/providers/ProviderContainer/utils/formatsSupport.d.ts +2 -2
- package/types/providers/ProviderContainer/utils/playbackHangup.d.ts +3 -3
- package/types/providers/WebRTCLiveProvider/WebRTCLiveClient.d.ts +1 -1
- package/types/providers/WebRTCLiveProvider/WebRTCLiveProvider.d.ts +2 -2
- package/types/providers/types.d.ts +8 -8
- package/types/providers/utils/Abr/abrController.d.ts +3 -3
- package/types/providers/utils/Abr/abrManager.d.ts +3 -3
- package/types/providers/utils/Abr/controllers/stallsController.d.ts +2 -2
- package/types/providers/utils/Abr/rules/audio/audioThroughputRule.d.ts +4 -4
- package/types/providers/utils/Abr/rules/audio/minAudioForVideoRule.d.ts +4 -4
- package/types/providers/utils/Abr/rules/baseRule.d.ts +2 -2
- package/types/providers/utils/Abr/rules/limitAboveRule.d.ts +3 -3
- package/types/providers/utils/Abr/rules/limitBelowRule.d.ts +3 -3
- package/types/providers/utils/Abr/rules/video/bufferRule.d.ts +4 -4
- package/types/providers/utils/Abr/rules/video/fitsContainerRule.d.ts +4 -4
- package/types/providers/utils/Abr/rules/video/lowerLimitRule.d.ts +3 -3
- package/types/providers/utils/Abr/rules/video/stallsRule.d.ts +4 -4
- package/types/providers/utils/Abr/rules/video/throughputRule.d.ts +4 -4
- package/types/providers/utils/Abr/rules/video/upperLimitRule.d.ts +3 -3
- package/types/providers/utils/Abr/trackHistory.d.ts +4 -4
- package/types/providers/utils/Abr/types.d.ts +3 -3
- package/types/providers/utils/Abr/utils.d.ts +2 -2
- package/types/providers/utils/HTMLVideoElement/DroppedFramesManager.d.ts +3 -3
- package/types/providers/utils/HTMLVideoElement/ElementSizeManager.d.ts +1 -1
- package/types/providers/utils/HTMLVideoElement/TextTrackManager.d.ts +2 -2
- package/types/providers/utils/HTMLVideoElement/observable.d.ts +1 -1
- package/types/providers/utils/HTMLVideoElement/pool.d.ts +1 -1
- package/types/providers/utils/StallsManager.d.ts +2 -2
- package/types/providers/utils/extractConnectionHeaders.d.ts +1 -1
- package/types/providers/utils/parsers/types.d.ts +1 -1
- package/types/providers/utils/syncDesiredState.d.ts +2 -2
- package/types/providers/utils/syncPlaybackState.d.ts +2 -2
- package/types/providers/utils/videoStreamRepresentaionsFilter.d.ts +1 -1
- package/types/utils/3d/Camera3D.d.ts +1 -1
- package/types/utils/3d/CameraRotationManager.d.ts +2 -2
- package/types/utils/3d/Scene3D.d.ts +1 -1
- package/types/utils/ClientChecker/services/AudioChecker.d.ts +1 -1
- package/types/utils/ClientChecker/services/BrowserChecker.d.ts +2 -2
- package/types/utils/ClientChecker/services/DeviceChecker.d.ts +3 -3
- package/types/utils/ClientChecker/services/DisplayChecker.d.ts +1 -1
- package/types/utils/ClientChecker/services/VideoChecker.d.ts +2 -2
- package/types/utils/ThroughputEstimator.d.ts +1 -1
- package/types/utils/VolumeMultiplierManager/VolumeMultiplierManager.d.ts +2 -2
- package/types/utils/autoSelectTrack.d.ts +2 -2
- package/types/utils/qualityLimits.d.ts +2 -2
- package/types/utils/setStateWithSubscribe.d.ts +1 -1
- package/types/utils/smoothedValue/baseSmoothedValue.d.ts +1 -1
- package/types/utils/smoothedValue/emaAndMaSmoothedValue.d.ts +2 -2
- package/types/utils/smoothedValue/emaTopExtremumValue.d.ts +2 -2
- package/types/utils/smoothedValue/smoothedValueFactory.d.ts +2 -2
- package/types/utils/smoothedValue/twoEmaSmoothedValue.d.ts +2 -2
- package/types/utils/tuningConfig.d.ts +4 -8
- package/types/utils/videoFormat.d.ts +1 -1
- package/es2015.cjs +0 -221
- package/es2018.cjs +0 -221
- package/es2018.esm.js +0 -221
- package/es2024.cjs +0 -221
- package/es2024.esm.js +0 -221
- package/esnext.cjs +0 -221
- package/types/player/utils/defaults.d.ts +0 -2
package/package.json
CHANGED
|
@@ -1,59 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/videoplayer-core",
|
|
3
|
-
"version": "2.0.157-dev.
|
|
3
|
+
"version": "2.0.157-dev.baccd7d5.0",
|
|
4
4
|
"author": "vk.com",
|
|
5
5
|
"description": "Videoplayer core library based on the vk.com platform",
|
|
6
6
|
"homepage": "https://vk.com",
|
|
7
7
|
"license": "GPL-3.0",
|
|
8
|
-
"main": "./esnext.cjs",
|
|
9
8
|
"module": "./esnext.esm.js",
|
|
10
9
|
"types": "./types/index.d.ts",
|
|
11
10
|
"type": "module",
|
|
12
11
|
"exports": {
|
|
13
12
|
".": {
|
|
14
13
|
"types": "./types/index.d.ts",
|
|
15
|
-
"import": "./esnext.esm.js"
|
|
16
|
-
"require": "./esnext.cjs"
|
|
14
|
+
"import": "./esnext.esm.js"
|
|
17
15
|
},
|
|
18
16
|
"./evergreen": {
|
|
19
17
|
"types": "./types/index.d.ts",
|
|
20
|
-
"import": "./evergreen.esm.js"
|
|
21
|
-
"require": "./evergreen.cjs"
|
|
18
|
+
"import": "./evergreen.esm.js"
|
|
22
19
|
},
|
|
23
20
|
"./esnext": {
|
|
24
21
|
"types": "./types/index.d.ts",
|
|
25
|
-
"import": "./esnext.esm.js"
|
|
26
|
-
"require": "./esnext.cjs"
|
|
27
|
-
},
|
|
28
|
-
"./es2024": {
|
|
29
|
-
"types": "./types/index.d.ts",
|
|
30
|
-
"import": "./es2024.esm.js",
|
|
31
|
-
"require": "./es2024.cjs"
|
|
32
|
-
},
|
|
33
|
-
"./es2018": {
|
|
34
|
-
"types": "./types/index.d.ts",
|
|
35
|
-
"import": "./es2018.esm.js",
|
|
36
|
-
"require": "./es2018.cjs"
|
|
22
|
+
"import": "./esnext.esm.js"
|
|
37
23
|
},
|
|
38
24
|
"./es2015": {
|
|
39
25
|
"types": "./types/index.d.ts",
|
|
40
|
-
"import": "./es2015.esm.js"
|
|
41
|
-
|
|
42
|
-
},
|
|
43
|
-
"./evergreen.esm.js": "./evergeen.esm.js",
|
|
44
|
-
"./esnext.esm.js": "./esnext.esm.js",
|
|
45
|
-
"./esnext.cjs": "./esnext.cjs",
|
|
46
|
-
"./es2018.esm.js": "./es2018.esm.js",
|
|
47
|
-
"./es2018.cjs": "./es2018.cjs",
|
|
48
|
-
"./es2015.esm.js": "./es2015.esm.js",
|
|
49
|
-
"./es2015.cjs": "./es2015.cjs"
|
|
26
|
+
"import": "./es2015.esm.js"
|
|
27
|
+
}
|
|
50
28
|
},
|
|
51
29
|
"files": [
|
|
52
|
-
"*.cjs",
|
|
53
30
|
"*.esm.js",
|
|
54
31
|
"**/*.d.ts"
|
|
55
32
|
],
|
|
56
33
|
"dependencies": {
|
|
57
|
-
"@vkontakte/videoplayer-shared": "1.0.86-dev.
|
|
34
|
+
"@vkontakte/videoplayer-shared": "1.0.86-dev.baccd7d5.0"
|
|
58
35
|
}
|
|
59
36
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { VERSION } from "
|
|
2
|
-
import type { IMpegSource, IDashSource, IHLSSource, IDashURLSource, IHLSLiveSource, ISeekRequest, URLSource, RawSource, URLSourceWithSeek } from "
|
|
3
|
-
import { VideoFormat, Surface, PredefinedQualityLimits, VideoCodec } from "
|
|
4
|
-
import Player from "
|
|
5
|
-
import type { IPlayer, IPlayerInfo, IPlayerEvents, IConfig, ISources, ICueSettings, IExternalTextTrack, ITextTrack, PlaybackRate, IVideoStream, IAudioStream } from "
|
|
6
|
-
import { PlaybackState, ChromecastState, HttpConnectionType } from "
|
|
7
|
-
import type { IOptionalTuningConfig } from "
|
|
8
|
-
export { clientChecker, isMobile } from "
|
|
9
|
-
export { areValidLiveRecordSources } from "
|
|
10
|
-
export { WebmCodecStrategy } from "
|
|
1
|
+
import { VERSION } from "#/env";
|
|
2
|
+
import type { IMpegSource, IDashSource, IHLSSource, IDashURLSource, IHLSLiveSource, ISeekRequest, URLSource, RawSource, URLSourceWithSeek } from "#/player/types";
|
|
3
|
+
import { VideoFormat, Surface, PredefinedQualityLimits, VideoCodec } from "#/player/types";
|
|
4
|
+
import Player from "#/player/Player";
|
|
5
|
+
import type { IPlayer, IPlayerInfo, IPlayerEvents, IConfig, ISources, ICueSettings, IExternalTextTrack, ITextTrack, PlaybackRate, IVideoStream, IAudioStream } from "#/player/types";
|
|
6
|
+
import { PlaybackState, ChromecastState, HttpConnectionType } from "#/player/types";
|
|
7
|
+
import type { IOptionalTuningConfig } from "#/utils/tuningConfig";
|
|
8
|
+
export { clientChecker, isMobile } from "#/utils/ClientChecker";
|
|
9
|
+
export { areValidLiveRecordSources } from "#/utils/videoFormat";
|
|
10
|
+
export { WebmCodecStrategy } from "#/enums/WebmCodecStrategy";
|
|
11
11
|
import type { ISubscription, IUnsubscriber, IEmitter, IObservable, IValueObservable, IValue, IOperator, IListener, ILogEntry, IRange, ExactVideoQuality } from "@vkontakte/videoplayer-shared";
|
|
12
12
|
import { Subscription, Observable, Subject, ValueSubject, VideoQuality } from "@vkontakte/videoplayer-shared";
|
|
13
13
|
/**
|
package/types/player/Player.d.ts
CHANGED
|
@@ -1,10 +1,116 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { dump } from "#/utils/playbackTelemetry";
|
|
2
|
+
import type { IOptionalTuningConfig } from "#/utils/tuningConfig";
|
|
3
|
+
import type { IError, ILogEntry, Kbps, Milliseconds, Seconds, QualityLimits, VideoQuality, ITracer } from "@vkontakte/videoplayer-shared";
|
|
4
|
+
import { Subject, ValueSubject } from "@vkontakte/videoplayer-shared";
|
|
5
|
+
import { ChromecastState, type FpsByQuality, type HttpConnectionType, type HttpConnectionMetrics, type HttpDownloadMetrics, type IAudioStream, type IAudioTrack, type IConfig, type ICueSettings, type IExternalTextTrack, type IPlayer, type ISeekRequest, type ISources, type ITextTrack, type IVideoStream, type IVideoTrack, type PlaybackRate, PlaybackState, PredefinedQualityLimits, type StartEnd, Surface, type VideoFormat } from "./types";
|
|
6
|
+
import type { IPlayerOptions } from "#/utils/playerOptions";
|
|
7
|
+
/** Конкретный тип для Player.info с ValueSubject вместо IValueObservable */
|
|
8
|
+
interface PlayerInfoImpl {
|
|
9
|
+
playbackState$: ValueSubject<PlaybackState | undefined>;
|
|
10
|
+
position$: ValueSubject<number>;
|
|
11
|
+
duration$: ValueSubject<number>;
|
|
12
|
+
muted$: ValueSubject<boolean>;
|
|
13
|
+
volume$: ValueSubject<number>;
|
|
14
|
+
availableVideoStreams$: ValueSubject<IVideoStream[]>;
|
|
15
|
+
currentVideoStream$: ValueSubject<IVideoStream | undefined>;
|
|
16
|
+
availableVideoTracks$: ValueSubject<IVideoTrack[]>;
|
|
17
|
+
availableQualities$: ValueSubject<VideoQuality[]>;
|
|
18
|
+
availableQualitiesFps$: ValueSubject<FpsByQuality>;
|
|
19
|
+
currentQuality$: ValueSubject<VideoQuality | undefined>;
|
|
20
|
+
isAutoQualityEnabled$: ValueSubject<boolean>;
|
|
21
|
+
autoQualityLimitingAvailable$: ValueSubject<boolean>;
|
|
22
|
+
autoQualityLimits$: ValueSubject<QualityLimits>;
|
|
23
|
+
predefinedQualityLimitType$: ValueSubject<PredefinedQualityLimits>;
|
|
24
|
+
availableAudioStreams$: ValueSubject<IAudioStream[]>;
|
|
25
|
+
currentAudioStream$: ValueSubject<IVideoStream | undefined>;
|
|
26
|
+
availableAudioTracks$: ValueSubject<IAudioTrack[]>;
|
|
27
|
+
isAudioAvailable$: ValueSubject<boolean>;
|
|
28
|
+
currentPlaybackRate$: ValueSubject<PlaybackRate>;
|
|
29
|
+
currentBuffer$: ValueSubject<StartEnd<Seconds>>;
|
|
30
|
+
currentNativeBuffer$: ValueSubject<StartEnd<Seconds>>;
|
|
31
|
+
isBuffering$: ValueSubject<boolean>;
|
|
32
|
+
isStalled$: ValueSubject<boolean>;
|
|
33
|
+
isEnded$: ValueSubject<boolean>;
|
|
34
|
+
isLooped$: ValueSubject<boolean>;
|
|
35
|
+
isLive$: ValueSubject<boolean | undefined>;
|
|
36
|
+
isLiveEnded$: ValueSubject<boolean | null>;
|
|
37
|
+
canPlayLiveTailBuffer$: ValueSubject<boolean>;
|
|
38
|
+
canChangePlaybackSpeed$: ValueSubject<boolean | undefined>;
|
|
39
|
+
atLiveEdge$: ValueSubject<boolean | undefined>;
|
|
40
|
+
atLiveDurationEdge$: ValueSubject<boolean | undefined>;
|
|
41
|
+
liveTime$: ValueSubject<Milliseconds | undefined>;
|
|
42
|
+
liveBufferTime$: ValueSubject<Milliseconds | undefined>;
|
|
43
|
+
liveLatency$: ValueSubject<Milliseconds | undefined>;
|
|
44
|
+
currentFormat$: ValueSubject<VideoFormat | undefined>;
|
|
45
|
+
availableTextTracks$: ValueSubject<ITextTrack[]>;
|
|
46
|
+
currentTextTrack$: ValueSubject<ITextTrack["id"] | undefined>;
|
|
47
|
+
throughputEstimation$: ValueSubject<Kbps | undefined>;
|
|
48
|
+
rttEstimation$: ValueSubject<Milliseconds | undefined>;
|
|
49
|
+
videoBitrate$: ValueSubject<Kbps | undefined>;
|
|
50
|
+
hostname$: ValueSubject<string | undefined>;
|
|
51
|
+
httpConnectionType$: ValueSubject<HttpConnectionType | undefined>;
|
|
52
|
+
httpConnectionReused$: ValueSubject<boolean | undefined>;
|
|
53
|
+
httpConnectionMetrics$: ValueSubject<HttpConnectionMetrics | undefined>;
|
|
54
|
+
httpDownloadMetrics$: ValueSubject<HttpDownloadMetrics | undefined>;
|
|
55
|
+
surface$: ValueSubject<Surface>;
|
|
56
|
+
chromecastState$: ValueSubject<ChromecastState>;
|
|
57
|
+
chromecastDeviceName$: ValueSubject<string | undefined>;
|
|
58
|
+
intrinsicVideoSize$: ValueSubject<{
|
|
59
|
+
width: number;
|
|
60
|
+
height: number;
|
|
61
|
+
} | undefined>;
|
|
62
|
+
availableSources$: ValueSubject<ISources | undefined>;
|
|
63
|
+
is3DVideo$: ValueSubject<boolean>;
|
|
64
|
+
currentVideoSegmentLength$: ValueSubject<number>;
|
|
65
|
+
currentAudioSegmentLength$: ValueSubject<number>;
|
|
66
|
+
}
|
|
67
|
+
/** Конкретный тип для Player.events с Subject вместо IObservable */
|
|
68
|
+
interface PlayerEventsImpl {
|
|
69
|
+
inited$: Subject<void>;
|
|
70
|
+
ready$: Subject<void>;
|
|
71
|
+
started$: Subject<void>;
|
|
72
|
+
playing$: Subject<void>;
|
|
73
|
+
paused$: Subject<void>;
|
|
74
|
+
stopped$: Subject<void>;
|
|
75
|
+
willReady$: Subject<void>;
|
|
76
|
+
willStart$: Subject<void>;
|
|
77
|
+
willResume$: Subject<void>;
|
|
78
|
+
willPause$: Subject<void>;
|
|
79
|
+
willStop$: Subject<void>;
|
|
80
|
+
willDestruct$: Subject<void>;
|
|
81
|
+
watchCoverageRecord$: Subject<StartEnd<Seconds>>;
|
|
82
|
+
watchCoverageLive$: Subject<StartEnd<Milliseconds>>;
|
|
83
|
+
managedError$: Subject<IError>;
|
|
84
|
+
fatalError$: Subject<IError>;
|
|
85
|
+
fetcherRecoverableError$: Subject<IError>;
|
|
86
|
+
ended$: Subject<void>;
|
|
87
|
+
looped$: Subject<Seconds>;
|
|
88
|
+
seeked$: Subject<void>;
|
|
89
|
+
willSeek$: Subject<ISeekRequest>;
|
|
90
|
+
autoplaySoundProhibited$: Subject<void>;
|
|
91
|
+
manifestRequested$: Subject<void>;
|
|
92
|
+
firstBytesManifest$: Subject<void>;
|
|
93
|
+
manifestReceived$: Subject<void>;
|
|
94
|
+
firstBytesRequested$: Subject<void>;
|
|
95
|
+
firstBytesReceived$: Subject<void>;
|
|
96
|
+
firstBytes$: Subject<Milliseconds>;
|
|
97
|
+
loadedMetadata$: Subject<void>;
|
|
98
|
+
firstFrame$: Subject<Milliseconds>;
|
|
99
|
+
canplay$: Subject<Milliseconds>;
|
|
100
|
+
log$: Subject<ILogEntry>;
|
|
101
|
+
fetcherError$: Subject<IError>;
|
|
102
|
+
severeStallOccured$: Subject<boolean>;
|
|
103
|
+
}
|
|
104
|
+
/** Конкретный тип для Player.experimental */
|
|
105
|
+
interface PlayerExperimentalImpl {
|
|
106
|
+
element$: ValueSubject<HTMLVideoElement | undefined>;
|
|
107
|
+
enableDebugTelemetry$: ValueSubject<boolean>;
|
|
108
|
+
dumpTelemetry: typeof dump;
|
|
109
|
+
getCurrentTime$: ValueSubject<(() => number) | null>;
|
|
110
|
+
skipVideoElVolumeSync$: ValueSubject<boolean>;
|
|
111
|
+
}
|
|
5
112
|
export default class Player implements IPlayer {
|
|
6
|
-
private
|
|
7
|
-
private readonly persistentSubscription;
|
|
113
|
+
private subscription;
|
|
8
114
|
private domContainer;
|
|
9
115
|
private providerContainer?;
|
|
10
116
|
private chromecastInitializer;
|
|
@@ -30,16 +136,6 @@ export default class Player implements IPlayer {
|
|
|
30
136
|
private devNullLog;
|
|
31
137
|
private collectDecodingInfoDestroyCb;
|
|
32
138
|
constructor(tuning?: IOptionalTuningConfig, tracer?: ITracer, playerOptions?: IPlayerOptions);
|
|
33
|
-
private readonly doInit;
|
|
34
|
-
/**
|
|
35
|
-
* Очищает необходимые поля при переключении на другое видео
|
|
36
|
-
*/
|
|
37
|
-
private resetDesiredState;
|
|
38
|
-
/**
|
|
39
|
-
* Возвращает плеер в начальное состояние
|
|
40
|
-
* Позвонялет переиспользовать для другого видео
|
|
41
|
-
*/
|
|
42
|
-
private reset;
|
|
43
139
|
initVideo(config: IConfig): IPlayer;
|
|
44
140
|
destroy(): void;
|
|
45
141
|
private waitInit;
|
package/types/player/types.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { IObservable, IValueObservable, IValueSubject, ILogEntry, Kbps, Milliseconds, Seconds, IRectangle, IError, QualityLimits, VideoQuality
|
|
2
|
-
import type { Pixel } from "
|
|
3
|
-
import type { dump } from "../utils/playbackTelemetry";
|
|
1
|
+
import type { IObservable, IValueObservable, IValueSubject, ILogEntry, Kbps, Milliseconds, Seconds, IRectangle, IError, QualityLimits, VideoQuality } from "@vkontakte/videoplayer-shared";
|
|
2
|
+
import type { Pixel } from "#/utils/3d/types";
|
|
4
3
|
export interface StartEnd<Unit extends number> {
|
|
5
4
|
start: Unit;
|
|
6
5
|
end: Unit;
|
|
@@ -8,7 +7,6 @@ export interface StartEnd<Unit extends number> {
|
|
|
8
7
|
export interface IPlayer {
|
|
9
8
|
info: IPlayerInfo;
|
|
10
9
|
events: IPlayerEvents;
|
|
11
|
-
experimental: IPlayerExperimental;
|
|
12
10
|
/**
|
|
13
11
|
* Инициализация видео
|
|
14
12
|
*/
|
|
@@ -76,6 +74,17 @@ export interface IPlayer {
|
|
|
76
74
|
* Возвращает все логи с момента инициализации плеера
|
|
77
75
|
*/
|
|
78
76
|
getAllLogs(): ILogEntry[];
|
|
77
|
+
experimental: {
|
|
78
|
+
/**
|
|
79
|
+
* Элемент, который сейчас вставлен в container.
|
|
80
|
+
* Может быть видеоэлементом, iframe и вообще чем угодно в общем случае.
|
|
81
|
+
*/
|
|
82
|
+
element$: IValueObservable<HTMLVideoElement | undefined>;
|
|
83
|
+
enableDebugTelemetry$: IValueSubject<boolean>;
|
|
84
|
+
dumpTelemetry: (receiver: (value: Record<string, any>) => void) => void;
|
|
85
|
+
/** функция вычисления текущей позиции проигрывания из под провадера (если расчет нестандартный) */
|
|
86
|
+
getCurrentTime$: IValueSubject<(() => number) | null>;
|
|
87
|
+
};
|
|
79
88
|
}
|
|
80
89
|
/**
|
|
81
90
|
* События плеера.
|
|
@@ -229,283 +238,233 @@ export interface IPlayerEvents {
|
|
|
229
238
|
*/
|
|
230
239
|
severeStallOccured$: IObservable<boolean>;
|
|
231
240
|
}
|
|
232
|
-
export interface
|
|
241
|
+
export interface IPlayerInfo {
|
|
233
242
|
/**
|
|
234
243
|
* Оптимистичный статут плеера. Так например, значение будет равно Playing сразу после вызова play().
|
|
235
244
|
* Фактическое состояние лучше отслеживать по событиям (например, playing$)
|
|
236
245
|
*/
|
|
237
|
-
playbackState$: PlaybackState | undefined
|
|
246
|
+
playbackState$: IValueObservable<PlaybackState | undefined>;
|
|
238
247
|
/**
|
|
239
248
|
* Текущая позиция.
|
|
240
249
|
*
|
|
241
250
|
* default value: `0`
|
|
242
251
|
*/
|
|
243
|
-
position$: Seconds
|
|
252
|
+
position$: IValueObservable<Seconds>;
|
|
244
253
|
/**
|
|
245
254
|
* Длительность видео.
|
|
246
255
|
*
|
|
247
256
|
* default value: `Infinity`
|
|
248
257
|
*/
|
|
249
|
-
duration$: Seconds
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
258
|
+
duration$: IValueObservable<Seconds>;
|
|
259
|
+
/**
|
|
260
|
+
* default value: `false`
|
|
261
|
+
*/
|
|
262
|
+
muted$: IValueObservable<boolean>;
|
|
263
|
+
/**
|
|
264
|
+
* default value: `1`
|
|
265
|
+
*/
|
|
266
|
+
volume$: IValueObservable<number>;
|
|
267
|
+
currentVideoStream$: IValueObservable<IVideoStream | undefined>;
|
|
268
|
+
availableVideoStreams$: IValueObservable<IVideoStream[]>;
|
|
269
|
+
availableVideoTracks$: IValueObservable<IVideoTrack[]>;
|
|
270
|
+
currentAudioStream$: IValueObservable<IAudioStream | undefined>;
|
|
271
|
+
availableAudioStreams$: IValueObservable<IAudioStream[]>;
|
|
255
272
|
/**
|
|
256
273
|
* Список доступных качеств. Отсортированы по возрастанию.
|
|
257
274
|
*
|
|
258
275
|
* default value: `[]`
|
|
259
276
|
*/
|
|
260
|
-
availableQualities$: VideoQuality[]
|
|
277
|
+
availableQualities$: IValueObservable<VideoQuality[]>;
|
|
261
278
|
/**
|
|
262
279
|
* Список фпс для доступных качеств
|
|
263
280
|
*
|
|
264
281
|
* default value: `{}`
|
|
265
282
|
*/
|
|
266
|
-
availableQualitiesFps$: FpsByQuality
|
|
283
|
+
availableQualitiesFps$: IValueObservable<FpsByQuality>;
|
|
284
|
+
/**
|
|
285
|
+
* Список доступных аудиодорожек
|
|
286
|
+
*
|
|
287
|
+
* default value: `[]`
|
|
288
|
+
*/
|
|
289
|
+
availableAudioTracks$: IValueSubject<IAudioTrack[]>;
|
|
290
|
+
/**
|
|
291
|
+
* Доступна ли аудио дорожка
|
|
292
|
+
*
|
|
293
|
+
* default value: true
|
|
294
|
+
*/
|
|
295
|
+
isAudioAvailable$: IValueSubject<boolean>;
|
|
267
296
|
/**
|
|
268
|
-
* Реальное
|
|
297
|
+
* Реальное качество, в котором сейчас воспроизводится видео.
|
|
269
298
|
*
|
|
270
299
|
* default value: `undefined`
|
|
271
300
|
*/
|
|
272
|
-
currentQuality$: VideoQuality | undefined
|
|
301
|
+
currentQuality$: IValueObservable<VideoQuality | undefined>;
|
|
273
302
|
/**
|
|
274
303
|
* Будет ли плеер адаптивно переключать качество в зависимости от канала пользователя
|
|
275
304
|
*/
|
|
276
|
-
isAutoQualityEnabled$: boolean
|
|
305
|
+
isAutoQualityEnabled$: IValueObservable<boolean>;
|
|
277
306
|
/**
|
|
278
307
|
* Доступна ли установка лимитов авто качества
|
|
279
308
|
*/
|
|
280
|
-
autoQualityLimitingAvailable$: boolean
|
|
309
|
+
autoQualityLimitingAvailable$: IValueObservable<boolean>;
|
|
281
310
|
/**
|
|
282
311
|
* Текущие лимиты авто-качества
|
|
283
312
|
*/
|
|
284
|
-
autoQualityLimits$: QualityLimits
|
|
313
|
+
autoQualityLimits$: IValueObservable<QualityLimits>;
|
|
285
314
|
/**
|
|
286
315
|
* Отображает тип лимитов по качеству.
|
|
287
316
|
*/
|
|
288
|
-
predefinedQualityLimitType$: PredefinedQualityLimits
|
|
289
|
-
availableAudioStreams$: IAudioStream[];
|
|
290
|
-
currentAudioStream$: IVideoStream | undefined;
|
|
291
|
-
/**
|
|
292
|
-
* Список доступных аудиодорожек
|
|
293
|
-
*
|
|
294
|
-
* default value: `[]`
|
|
295
|
-
*/
|
|
296
|
-
availableAudioTracks$: IAudioTrack[];
|
|
297
|
-
/**
|
|
298
|
-
* Доступна ли аудио дорожка
|
|
299
|
-
*
|
|
300
|
-
* default value: true
|
|
301
|
-
*/
|
|
302
|
-
isAudioAvailable$: boolean;
|
|
317
|
+
predefinedQualityLimitType$: IValueObservable<PredefinedQualityLimits>;
|
|
303
318
|
/**
|
|
304
319
|
* Текущая скорость воспроизведения
|
|
305
320
|
*/
|
|
306
|
-
currentPlaybackRate$: PlaybackRate
|
|
321
|
+
currentPlaybackRate$: IValueObservable<PlaybackRate>;
|
|
307
322
|
/**
|
|
308
|
-
* Текущий буффер плеера (
|
|
323
|
+
* Текущий буффер плеера (тот, который содержит текущую позицию воспроизведения)
|
|
309
324
|
*
|
|
310
325
|
* default value: `undefined`
|
|
311
326
|
*/
|
|
312
|
-
currentBuffer$: StartEnd<Seconds>;
|
|
327
|
+
currentBuffer$: IValueObservable<StartEnd<Seconds> | undefined>;
|
|
313
328
|
/**
|
|
314
|
-
* Текущий браузерный буффер (
|
|
329
|
+
* Текущий браузерный буффер (тот, который содержит текущую позицию воспроизведения)
|
|
315
330
|
*
|
|
316
331
|
* default value: `undefined`
|
|
317
332
|
*/
|
|
318
|
-
currentNativeBuffer$: StartEnd<Seconds>;
|
|
333
|
+
currentNativeBuffer$: IValueObservable<StartEnd<Seconds> | undefined>;
|
|
319
334
|
/**
|
|
320
335
|
* Статус буферизации видео. true если буфер пустой и воспроизведение прервано
|
|
321
336
|
* В отличии от isStalled показывает и буферизации на старте и после перемотки
|
|
322
337
|
*/
|
|
323
|
-
isBuffering$: boolean
|
|
338
|
+
isBuffering$: IValueObservable<boolean>;
|
|
324
339
|
/**
|
|
325
|
-
* Статус только нежелательной
|
|
340
|
+
* Статус только нежелательной буферизации, возникает при опустошении буфера в процессе воспроизведения
|
|
326
341
|
* и не возникает при начальном наполнении буфера или после перемотки
|
|
327
342
|
*/
|
|
328
|
-
isStalled$: boolean
|
|
343
|
+
isStalled$: IValueObservable<boolean>;
|
|
329
344
|
/**
|
|
330
345
|
* Закончилось ли видео
|
|
331
346
|
*/
|
|
332
|
-
isEnded$: boolean
|
|
347
|
+
isEnded$: IValueObservable<boolean>;
|
|
333
348
|
/**
|
|
334
349
|
* Зациклено ли видео
|
|
335
350
|
*/
|
|
336
|
-
isLooped$: boolean
|
|
337
|
-
/**
|
|
338
|
-
* Является трансляцией
|
|
339
|
-
*/
|
|
340
|
-
isLive$: boolean | undefined;
|
|
351
|
+
isLooped$: IValueObservable<boolean>;
|
|
341
352
|
/**
|
|
342
|
-
*
|
|
353
|
+
* Бесконечный ли стрим
|
|
343
354
|
*/
|
|
344
|
-
|
|
355
|
+
isLive$: IValueObservable<boolean | undefined>;
|
|
345
356
|
/**
|
|
346
|
-
*
|
|
357
|
+
* Был ли завершен бесконечный стрим
|
|
347
358
|
*/
|
|
348
|
-
|
|
359
|
+
isLiveEnded$: IValueObservable<boolean | null>;
|
|
349
360
|
/**
|
|
350
361
|
* Доступно ли ускоренное воспроизведении в лайв трансляции
|
|
351
362
|
*/
|
|
352
|
-
canChangePlaybackSpeed$: boolean | undefined
|
|
363
|
+
canChangePlaybackSpeed$: IValueObservable<boolean | undefined>;
|
|
353
364
|
/**
|
|
354
365
|
* Играем ли мы сейчас самый актуальный кадр лайва
|
|
355
366
|
*/
|
|
356
|
-
atLiveEdge$: boolean | undefined
|
|
367
|
+
atLiveEdge$: IValueObservable<boolean | undefined>;
|
|
368
|
+
/**
|
|
369
|
+
* Может ли плеер доиграть буффер законченной трансляции при перемотке
|
|
370
|
+
*/
|
|
371
|
+
canPlayLiveTailBuffer$: IValueObservable<boolean>;
|
|
357
372
|
/**
|
|
358
373
|
* Играем ли мы сейчас самый старый кадр лайва
|
|
359
374
|
*/
|
|
360
|
-
atLiveDurationEdge$: boolean | undefined
|
|
375
|
+
atLiveDurationEdge$: IValueObservable<boolean | undefined>;
|
|
361
376
|
/**
|
|
362
377
|
* Серверное время текущего кадра
|
|
363
378
|
*/
|
|
364
|
-
liveTime$: Milliseconds | undefined
|
|
379
|
+
liveTime$: IValueObservable<Milliseconds | undefined>;
|
|
365
380
|
/**
|
|
366
381
|
* Буферное время текущего кадра
|
|
367
382
|
*/
|
|
368
|
-
liveBufferTime$: Milliseconds | undefined
|
|
383
|
+
liveBufferTime$: IValueObservable<Milliseconds | undefined>;
|
|
369
384
|
/**
|
|
370
385
|
* Задержка лайв стрима
|
|
371
386
|
*/
|
|
372
|
-
liveLatency$: Milliseconds | undefined
|
|
387
|
+
liveLatency$: IValueObservable<Milliseconds | undefined>;
|
|
373
388
|
/**
|
|
374
|
-
*
|
|
389
|
+
* Формат, в котором сейчас воспроизводится видео
|
|
375
390
|
*/
|
|
376
|
-
currentFormat$: VideoFormat | undefined
|
|
391
|
+
currentFormat$: IValueObservable<VideoFormat | undefined>;
|
|
377
392
|
/**
|
|
378
393
|
* Список всех доступных субтитров
|
|
379
394
|
*/
|
|
380
|
-
availableTextTracks$: ITextTrack[]
|
|
395
|
+
availableTextTracks$: IValueObservable<ITextTrack[]>;
|
|
381
396
|
/**
|
|
382
397
|
* Выбранная и отображаемая дорожка субтитров
|
|
383
398
|
*/
|
|
384
|
-
currentTextTrack$: ITextTrack["id"] | undefined
|
|
399
|
+
currentTextTrack$: IValueObservable<ITextTrack["id"] | undefined>;
|
|
385
400
|
/**
|
|
386
401
|
* Рассчитанная ширина канала пользователя
|
|
387
402
|
*/
|
|
388
|
-
throughputEstimation$: Kbps | undefined
|
|
403
|
+
throughputEstimation$: IValueObservable<Kbps | undefined>;
|
|
389
404
|
/**
|
|
390
|
-
* Round-Trip-Time
|
|
405
|
+
* Round-Trip-Time, время от отправки запроса до получения ответа. Весьма неточное.
|
|
391
406
|
*/
|
|
392
|
-
rttEstimation$: Milliseconds | undefined
|
|
407
|
+
rttEstimation$: IValueObservable<Milliseconds | undefined>;
|
|
393
408
|
/**
|
|
394
409
|
* Битрейт текущей видео-дорожки
|
|
395
410
|
*/
|
|
396
|
-
videoBitrate$: Kbps | undefined
|
|
411
|
+
videoBitrate$: IValueObservable<Kbps | undefined>;
|
|
397
412
|
/**
|
|
398
413
|
* Хост с которого воспроизводится видео
|
|
399
414
|
*/
|
|
400
|
-
hostname$: string | undefined
|
|
415
|
+
hostname$: IValueObservable<string | undefined>;
|
|
401
416
|
/**
|
|
402
417
|
* Тип HTTP соединения последнего запроса
|
|
403
418
|
*/
|
|
404
|
-
httpConnectionType$: HttpConnectionType | undefined
|
|
419
|
+
httpConnectionType$: IValueObservable<HttpConnectionType | undefined>;
|
|
405
420
|
/**
|
|
406
421
|
* Было ли переиспользовано последнее HTTP соединение
|
|
407
422
|
*/
|
|
408
|
-
httpConnectionReused$: boolean | undefined
|
|
423
|
+
httpConnectionReused$: IValueObservable<boolean | undefined>;
|
|
409
424
|
/**
|
|
410
425
|
* Дополнительные данные-метрики по HTTP соединению
|
|
411
426
|
*/
|
|
412
|
-
httpConnectionMetrics$: HttpConnectionMetrics | undefined
|
|
427
|
+
httpConnectionMetrics$: IValueSubject<HttpConnectionMetrics | undefined>;
|
|
413
428
|
/**
|
|
414
429
|
* Данные по загрузке по сети
|
|
415
430
|
*/
|
|
416
|
-
httpDownloadMetrics$: HttpDownloadMetrics | undefined
|
|
417
|
-
/**
|
|
418
|
-
* Где сейчас рисуется картинка
|
|
419
|
-
*/
|
|
420
|
-
surface$: Surface;
|
|
431
|
+
httpDownloadMetrics$: IValueObservable<HttpDownloadMetrics | undefined>;
|
|
421
432
|
/**
|
|
422
433
|
* Состояние подключения Chromecast
|
|
423
434
|
*/
|
|
424
|
-
chromecastState$: ChromecastState
|
|
435
|
+
chromecastState$: IValueObservable<ChromecastState>;
|
|
425
436
|
/**
|
|
426
|
-
* Имя
|
|
427
|
-
* `undefined
|
|
437
|
+
* Имя устройства, куда выводится видео через Chromecast.
|
|
438
|
+
* `undefined`, если видео не играет на Chromecast устройстве
|
|
428
439
|
*/
|
|
429
|
-
chromecastDeviceName$: string | undefined
|
|
440
|
+
chromecastDeviceName$: IValueObservable<string | undefined>;
|
|
430
441
|
/**
|
|
431
442
|
* Фактический размер видео
|
|
432
443
|
*/
|
|
433
|
-
intrinsicVideoSize$: {
|
|
444
|
+
intrinsicVideoSize$: IValueObservable<{
|
|
434
445
|
width: number;
|
|
435
446
|
height: number;
|
|
436
|
-
} | undefined
|
|
447
|
+
} | undefined>;
|
|
437
448
|
/**
|
|
438
|
-
*
|
|
449
|
+
* Признак того, что сейчас проигрывается 3D-видео
|
|
439
450
|
*/
|
|
440
|
-
|
|
451
|
+
is3DVideo$: IValueObservable<boolean>;
|
|
441
452
|
/**
|
|
442
|
-
*
|
|
453
|
+
* Где сейчас рисуется картинка
|
|
443
454
|
*/
|
|
444
|
-
|
|
455
|
+
surface$: IValueObservable<Surface | undefined>;
|
|
445
456
|
/**
|
|
446
|
-
*
|
|
457
|
+
* Список всех доступных источников
|
|
447
458
|
*/
|
|
448
|
-
|
|
459
|
+
availableSources$: IValueObservable<ISources | undefined>;
|
|
449
460
|
/**
|
|
450
|
-
* Длина
|
|
461
|
+
* Длина видео сегмента
|
|
451
462
|
*/
|
|
452
|
-
|
|
453
|
-
}
|
|
454
|
-
export type IPlayerInfo = { [K in keyof PlayerInfoValues] : IValueObservable<PlayerInfoValues[K]> };
|
|
455
|
-
export type PlayerInfoImpl = { [K in keyof PlayerInfoValues] : ValueSubject<PlayerInfoValues[K]> };
|
|
456
|
-
export interface PlayerEventsImpl {
|
|
457
|
-
inited$: Subject<void>;
|
|
458
|
-
ready$: Subject<void>;
|
|
459
|
-
started$: Subject<void>;
|
|
460
|
-
playing$: Subject<void>;
|
|
461
|
-
paused$: Subject<void>;
|
|
462
|
-
stopped$: Subject<void>;
|
|
463
|
-
willReady$: Subject<void>;
|
|
464
|
-
willStart$: Subject<void>;
|
|
465
|
-
willResume$: Subject<void>;
|
|
466
|
-
willPause$: Subject<void>;
|
|
467
|
-
willStop$: Subject<void>;
|
|
468
|
-
willDestruct$: Subject<void>;
|
|
469
|
-
watchCoverageRecord$: Subject<StartEnd<Seconds>>;
|
|
470
|
-
watchCoverageLive$: Subject<StartEnd<Milliseconds>>;
|
|
471
|
-
managedError$: Subject<IError>;
|
|
472
|
-
fatalError$: Subject<IError>;
|
|
473
|
-
fetcherRecoverableError$: Subject<IError>;
|
|
474
|
-
ended$: Subject<void>;
|
|
475
|
-
looped$: Subject<Seconds>;
|
|
476
|
-
seeked$: Subject<void>;
|
|
477
|
-
willSeek$: Subject<ISeekRequest>;
|
|
478
|
-
autoplaySoundProhibited$: Subject<void>;
|
|
479
|
-
manifestRequested$: Subject<void>;
|
|
480
|
-
firstBytesManifest$: Subject<void>;
|
|
481
|
-
manifestReceived$: Subject<void>;
|
|
482
|
-
firstBytesRequested$: Subject<void>;
|
|
483
|
-
firstBytesReceived$: Subject<void>;
|
|
484
|
-
firstBytes$: Subject<Milliseconds>;
|
|
485
|
-
loadedMetadata$: Subject<void>;
|
|
486
|
-
firstFrame$: Subject<Milliseconds>;
|
|
487
|
-
canplay$: Subject<Milliseconds>;
|
|
488
|
-
log$: Subject<ILogEntry>;
|
|
489
|
-
fetcherError$: Subject<IError>;
|
|
490
|
-
severeStallOccured$: Subject<boolean>;
|
|
491
|
-
}
|
|
492
|
-
interface IPlayerExperimental {
|
|
463
|
+
currentVideoSegmentLength$: IValueSubject<number>;
|
|
493
464
|
/**
|
|
494
|
-
*
|
|
495
|
-
* Может быть видеоэлементом, iframe и вообще чем угодно в общем случае.
|
|
465
|
+
* Длина аудио сегмента
|
|
496
466
|
*/
|
|
497
|
-
|
|
498
|
-
enableDebugTelemetry$: IValueSubject<boolean>;
|
|
499
|
-
dumpTelemetry: (receiver: (value: Record<string, any>) => void) => void;
|
|
500
|
-
/** функция вычисления текущей позиции проигрывания из под провадера (если расчет нестандартный) */
|
|
501
|
-
getCurrentTime$: IValueSubject<(() => number) | null>;
|
|
502
|
-
}
|
|
503
|
-
export interface PlayerExperimentalImpl {
|
|
504
|
-
element$: ValueSubject<HTMLVideoElement | undefined>;
|
|
505
|
-
enableDebugTelemetry$: ValueSubject<boolean>;
|
|
506
|
-
dumpTelemetry: typeof dump;
|
|
507
|
-
getCurrentTime$: ValueSubject<(() => number) | null>;
|
|
508
|
-
skipVideoElVolumeSync$: ValueSubject<boolean>;
|
|
467
|
+
currentAudioSegmentLength$: IValueSubject<number>;
|
|
509
468
|
}
|
|
510
469
|
export declare enum PlaybackState {
|
|
511
470
|
STOPPED = "stopped",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { SeekState } from "
|
|
1
|
+
import type { SeekState } from "#/player/types";
|
|
2
2
|
import type { IObservable, IValueObservable, Seconds } from "@vkontakte/videoplayer-shared";
|
|
3
|
-
import type { IStateMachine } from "
|
|
3
|
+
import type { IStateMachine } from "#/utils/StateMachine/types";
|
|
4
4
|
interface IParams {
|
|
5
5
|
seekState: IStateMachine<SeekState>;
|
|
6
6
|
position$: IValueObservable<Seconds>;
|
package/types/providers/ChromecastPresentationApiProvider/ChromecastPresentationApiInitializer.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChromecastState } from "
|
|
1
|
+
import { ChromecastState } from "#/player/types";
|
|
2
2
|
import type { IError, IValueSubject, ISubject } from "@vkontakte/videoplayer-shared";
|
|
3
3
|
import type { IChromecastConnection } from "../ChromecastProvider/ChromecastInitializer/types";
|
|
4
4
|
import { ChromecastPresentationApiConnector } from "./ChromecastPresentationApiConnector";
|