@vkontakte/videoplayer-core 2.0.157-dev.30efab63.0 → 2.0.157-dev.50bf8b6d.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.cjs +220 -0
- package/es2015.esm.js +34 -34
- package/esnext.cjs +220 -0
- package/esnext.esm.js +30 -30
- package/evergreen.esm.js +30 -30
- package/package.json +18 -7
- package/types/index.d.ts +10 -10
- package/types/player/Player.d.ts +16 -112
- package/types/player/types.d.ts +144 -103
- package/types/player/utils/defaults.d.ts +4 -0
- 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/types.d.ts +2 -0
- 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 +16 -16
- 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 +41 -25
- 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 +6 -2
- 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/StateMachine/StateMachine.d.ts +3 -2
- package/types/utils/StateMachine/comparators.d.ts +3 -0
- package/types/utils/StateMachine/types.d.ts +1 -0
- 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 +8 -4
- package/types/utils/videoFormat.d.ts +1 -1
package/package.json
CHANGED
|
@@ -1,36 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/videoplayer-core",
|
|
3
|
-
"version": "2.0.157-dev.
|
|
3
|
+
"version": "2.0.157-dev.50bf8b6d.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",
|
|
8
9
|
"module": "./esnext.esm.js",
|
|
9
10
|
"types": "./types/index.d.ts",
|
|
10
11
|
"type": "module",
|
|
11
12
|
"exports": {
|
|
12
13
|
".": {
|
|
13
14
|
"types": "./types/index.d.ts",
|
|
14
|
-
"import": "./esnext.esm.js"
|
|
15
|
+
"import": "./esnext.esm.js",
|
|
16
|
+
"require": "./esnext.cjs"
|
|
15
17
|
},
|
|
16
18
|
"./evergreen": {
|
|
17
19
|
"types": "./types/index.d.ts",
|
|
18
|
-
"import": "./evergreen.esm.js"
|
|
20
|
+
"import": "./evergreen.esm.js",
|
|
21
|
+
"require": "./evergreen.cjs"
|
|
19
22
|
},
|
|
20
23
|
"./esnext": {
|
|
21
24
|
"types": "./types/index.d.ts",
|
|
22
|
-
"import": "./esnext.esm.js"
|
|
25
|
+
"import": "./esnext.esm.js",
|
|
26
|
+
"require": "./esnext.cjs"
|
|
23
27
|
},
|
|
24
28
|
"./es2015": {
|
|
25
29
|
"types": "./types/index.d.ts",
|
|
26
|
-
"import": "./es2015.esm.js"
|
|
27
|
-
|
|
30
|
+
"import": "./es2015.esm.js",
|
|
31
|
+
"require": "./es2015.cjs"
|
|
32
|
+
},
|
|
33
|
+
"./evergreen.esm.js": "./evergeen.esm.js",
|
|
34
|
+
"./esnext.esm.js": "./esnext.esm.js",
|
|
35
|
+
"./esnext.cjs": "./esnext.cjs",
|
|
36
|
+
"./es2015.esm.js": "./es2015.esm.js",
|
|
37
|
+
"./es2015.cjs": "./es2015.cjs"
|
|
28
38
|
},
|
|
29
39
|
"files": [
|
|
40
|
+
"*.cjs",
|
|
30
41
|
"*.esm.js",
|
|
31
42
|
"**/*.d.ts"
|
|
32
43
|
],
|
|
33
44
|
"dependencies": {
|
|
34
|
-
"@vkontakte/videoplayer-shared": "1.0.86-dev.
|
|
45
|
+
"@vkontakte/videoplayer-shared": "1.0.86-dev.50bf8b6d.0"
|
|
35
46
|
}
|
|
36
47
|
}
|
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,116 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
import type
|
|
4
|
-
import {
|
|
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
|
-
}
|
|
1
|
+
import type { IOptionalTuningConfig } from "../utils/tuningConfig";
|
|
2
|
+
import type { ILogEntry, Seconds, QualityLimits, VideoQuality, ITracer } from "@vkontakte/videoplayer-shared";
|
|
3
|
+
import { type IAudioStream, type IConfig, type ICueSettings, type IExternalTextTrack, type IPlayer, type ITextTrack, type IVideoStream, type PlaybackRate, PredefinedQualityLimits, type PlayerInfoImpl, type PlayerEventsImpl, type PlayerExperimentalImpl } from "./types";
|
|
4
|
+
import type { IPlayerOptions } from "../utils/playerOptions";
|
|
112
5
|
export default class Player implements IPlayer {
|
|
113
|
-
private subscription;
|
|
6
|
+
private readonly subscription;
|
|
7
|
+
private readonly persistentSubscription;
|
|
114
8
|
private domContainer;
|
|
115
9
|
private providerContainer?;
|
|
116
10
|
private chromecastInitializer;
|
|
@@ -136,6 +30,16 @@ export default class Player implements IPlayer {
|
|
|
136
30
|
private devNullLog;
|
|
137
31
|
private collectDecodingInfoDestroyCb;
|
|
138
32
|
constructor(tuning?: IOptionalTuningConfig, tracer?: ITracer, playerOptions?: IPlayerOptions);
|
|
33
|
+
private readonly doInit;
|
|
34
|
+
/**
|
|
35
|
+
* Очищает необходимые поля при переключении на другое видео
|
|
36
|
+
*/
|
|
37
|
+
private resetDesiredState;
|
|
38
|
+
/**
|
|
39
|
+
* Возвращает плеер в начальное состояние
|
|
40
|
+
* Позвонялет переиспользовать для другого видео
|
|
41
|
+
*/
|
|
42
|
+
private reset;
|
|
139
43
|
initVideo(config: IConfig): IPlayer;
|
|
140
44
|
destroy(): void;
|
|
141
45
|
private waitInit;
|
package/types/player/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { IObservable, IValueObservable, IValueSubject, ILogEntry, Kbps, Milliseconds, Seconds, IRectangle, IError, QualityLimits, VideoQuality } from "@vkontakte/videoplayer-shared";
|
|
2
|
-
import type { Pixel } from "
|
|
1
|
+
import type { IObservable, IValueObservable, IValueSubject, ILogEntry, Kbps, Milliseconds, Seconds, IRectangle, IError, QualityLimits, VideoQuality, Subject, ValueSubject } from "@vkontakte/videoplayer-shared";
|
|
2
|
+
import type { Pixel } from "../utils/3d/types";
|
|
3
|
+
import type { dump } from "../utils/playbackTelemetry";
|
|
3
4
|
export interface StartEnd<Unit extends number> {
|
|
4
5
|
start: Unit;
|
|
5
6
|
end: Unit;
|
|
@@ -7,6 +8,7 @@ export interface StartEnd<Unit extends number> {
|
|
|
7
8
|
export interface IPlayer {
|
|
8
9
|
info: IPlayerInfo;
|
|
9
10
|
events: IPlayerEvents;
|
|
11
|
+
experimental: IPlayerExperimental;
|
|
10
12
|
/**
|
|
11
13
|
* Инициализация видео
|
|
12
14
|
*/
|
|
@@ -74,17 +76,6 @@ export interface IPlayer {
|
|
|
74
76
|
* Возвращает все логи с момента инициализации плеера
|
|
75
77
|
*/
|
|
76
78
|
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
|
-
};
|
|
88
79
|
}
|
|
89
80
|
/**
|
|
90
81
|
* События плеера.
|
|
@@ -238,233 +229,283 @@ export interface IPlayerEvents {
|
|
|
238
229
|
*/
|
|
239
230
|
severeStallOccured$: IObservable<boolean>;
|
|
240
231
|
}
|
|
241
|
-
export interface
|
|
232
|
+
export interface PlayerInfoValues {
|
|
242
233
|
/**
|
|
243
234
|
* Оптимистичный статут плеера. Так например, значение будет равно Playing сразу после вызова play().
|
|
244
235
|
* Фактическое состояние лучше отслеживать по событиям (например, playing$)
|
|
245
236
|
*/
|
|
246
|
-
playbackState$:
|
|
237
|
+
playbackState$: PlaybackState | undefined;
|
|
247
238
|
/**
|
|
248
239
|
* Текущая позиция.
|
|
249
240
|
*
|
|
250
241
|
* default value: `0`
|
|
251
242
|
*/
|
|
252
|
-
position$:
|
|
243
|
+
position$: Seconds;
|
|
253
244
|
/**
|
|
254
245
|
* Длительность видео.
|
|
255
246
|
*
|
|
256
247
|
* default value: `Infinity`
|
|
257
248
|
*/
|
|
258
|
-
duration$:
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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[]>;
|
|
249
|
+
duration$: Seconds;
|
|
250
|
+
muted$: boolean;
|
|
251
|
+
volume$: number;
|
|
252
|
+
availableVideoStreams$: IVideoStream[];
|
|
253
|
+
currentVideoStream$: IVideoStream | undefined;
|
|
254
|
+
availableVideoTracks$: IVideoTrack[];
|
|
272
255
|
/**
|
|
273
256
|
* Список доступных качеств. Отсортированы по возрастанию.
|
|
274
257
|
*
|
|
275
258
|
* default value: `[]`
|
|
276
259
|
*/
|
|
277
|
-
availableQualities$:
|
|
260
|
+
availableQualities$: VideoQuality[];
|
|
278
261
|
/**
|
|
279
262
|
* Список фпс для доступных качеств
|
|
280
263
|
*
|
|
281
264
|
* default value: `{}`
|
|
282
265
|
*/
|
|
283
|
-
availableQualitiesFps$:
|
|
284
|
-
/**
|
|
285
|
-
* Список доступных аудиодорожек
|
|
286
|
-
*
|
|
287
|
-
* default value: `[]`
|
|
288
|
-
*/
|
|
289
|
-
availableAudioTracks$: IValueSubject<IAudioTrack[]>;
|
|
290
|
-
/**
|
|
291
|
-
* Доступна ли аудио дорожка
|
|
292
|
-
*
|
|
293
|
-
* default value: true
|
|
294
|
-
*/
|
|
295
|
-
isAudioAvailable$: IValueSubject<boolean>;
|
|
266
|
+
availableQualitiesFps$: FpsByQuality;
|
|
296
267
|
/**
|
|
297
|
-
* Реальное
|
|
268
|
+
* Реальное качество; в котором сейчас воспроизводится видео.
|
|
298
269
|
*
|
|
299
270
|
* default value: `undefined`
|
|
300
271
|
*/
|
|
301
|
-
currentQuality$:
|
|
272
|
+
currentQuality$: VideoQuality | undefined;
|
|
302
273
|
/**
|
|
303
274
|
* Будет ли плеер адаптивно переключать качество в зависимости от канала пользователя
|
|
304
275
|
*/
|
|
305
|
-
isAutoQualityEnabled$:
|
|
276
|
+
isAutoQualityEnabled$: boolean;
|
|
306
277
|
/**
|
|
307
278
|
* Доступна ли установка лимитов авто качества
|
|
308
279
|
*/
|
|
309
|
-
autoQualityLimitingAvailable$:
|
|
280
|
+
autoQualityLimitingAvailable$: boolean;
|
|
310
281
|
/**
|
|
311
282
|
* Текущие лимиты авто-качества
|
|
312
283
|
*/
|
|
313
|
-
autoQualityLimits$:
|
|
284
|
+
autoQualityLimits$: QualityLimits;
|
|
314
285
|
/**
|
|
315
286
|
* Отображает тип лимитов по качеству.
|
|
316
287
|
*/
|
|
317
|
-
predefinedQualityLimitType$:
|
|
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;
|
|
318
303
|
/**
|
|
319
304
|
* Текущая скорость воспроизведения
|
|
320
305
|
*/
|
|
321
|
-
currentPlaybackRate$:
|
|
306
|
+
currentPlaybackRate$: PlaybackRate;
|
|
322
307
|
/**
|
|
323
|
-
* Текущий буффер плеера (
|
|
308
|
+
* Текущий буффер плеера (тот; который содержит текущую позицию воспроизведения)
|
|
324
309
|
*
|
|
325
310
|
* default value: `undefined`
|
|
326
311
|
*/
|
|
327
|
-
currentBuffer$:
|
|
312
|
+
currentBuffer$: StartEnd<Seconds> | undefined;
|
|
328
313
|
/**
|
|
329
|
-
* Текущий браузерный буффер (
|
|
314
|
+
* Текущий браузерный буффер (тот; который содержит текущую позицию воспроизведения)
|
|
330
315
|
*
|
|
331
316
|
* default value: `undefined`
|
|
332
317
|
*/
|
|
333
|
-
currentNativeBuffer$:
|
|
318
|
+
currentNativeBuffer$: StartEnd<Seconds> | undefined;
|
|
334
319
|
/**
|
|
335
320
|
* Статус буферизации видео. true если буфер пустой и воспроизведение прервано
|
|
336
321
|
* В отличии от isStalled показывает и буферизации на старте и после перемотки
|
|
337
322
|
*/
|
|
338
|
-
isBuffering$:
|
|
323
|
+
isBuffering$: boolean;
|
|
339
324
|
/**
|
|
340
|
-
* Статус только нежелательной
|
|
325
|
+
* Статус только нежелательной буферизации; возникает при опустошении буфера в процессе воспроизведения
|
|
341
326
|
* и не возникает при начальном наполнении буфера или после перемотки
|
|
342
327
|
*/
|
|
343
|
-
isStalled$:
|
|
328
|
+
isStalled$: boolean;
|
|
344
329
|
/**
|
|
345
330
|
* Закончилось ли видео
|
|
346
331
|
*/
|
|
347
|
-
isEnded$:
|
|
332
|
+
isEnded$: boolean;
|
|
348
333
|
/**
|
|
349
334
|
* Зациклено ли видео
|
|
350
335
|
*/
|
|
351
|
-
isLooped$:
|
|
336
|
+
isLooped$: boolean;
|
|
352
337
|
/**
|
|
353
|
-
*
|
|
338
|
+
* Является трансляцией
|
|
354
339
|
*/
|
|
355
|
-
isLive$:
|
|
340
|
+
isLive$: boolean | undefined;
|
|
356
341
|
/**
|
|
357
|
-
*
|
|
342
|
+
* Была ли завершена трансляция
|
|
358
343
|
*/
|
|
359
|
-
isLiveEnded$:
|
|
344
|
+
isLiveEnded$: boolean | null;
|
|
360
345
|
/**
|
|
361
|
-
*
|
|
346
|
+
* Может ли плеер доиграть буффер законченной трансляции при перемотке
|
|
362
347
|
*/
|
|
363
|
-
|
|
348
|
+
canPlayLiveTailBuffer$: boolean;
|
|
364
349
|
/**
|
|
365
|
-
*
|
|
350
|
+
* Доступно ли ускоренное воспроизведении в лайв трансляции
|
|
366
351
|
*/
|
|
367
|
-
|
|
352
|
+
canChangePlaybackSpeed$: boolean | undefined;
|
|
368
353
|
/**
|
|
369
|
-
*
|
|
354
|
+
* Играем ли мы сейчас самый актуальный кадр лайва
|
|
370
355
|
*/
|
|
371
|
-
|
|
356
|
+
atLiveEdge$: boolean | undefined;
|
|
372
357
|
/**
|
|
373
358
|
* Играем ли мы сейчас самый старый кадр лайва
|
|
374
359
|
*/
|
|
375
|
-
atLiveDurationEdge$:
|
|
360
|
+
atLiveDurationEdge$: boolean | undefined;
|
|
376
361
|
/**
|
|
377
362
|
* Серверное время текущего кадра
|
|
378
363
|
*/
|
|
379
|
-
liveTime$:
|
|
364
|
+
liveTime$: Milliseconds | undefined;
|
|
380
365
|
/**
|
|
381
366
|
* Буферное время текущего кадра
|
|
382
367
|
*/
|
|
383
|
-
liveBufferTime$:
|
|
368
|
+
liveBufferTime$: Milliseconds | undefined;
|
|
384
369
|
/**
|
|
385
370
|
* Задержка лайв стрима
|
|
386
371
|
*/
|
|
387
|
-
liveLatency$:
|
|
372
|
+
liveLatency$: Milliseconds | undefined;
|
|
388
373
|
/**
|
|
389
|
-
*
|
|
374
|
+
* Формат; в котором сейчас воспроизводится видео
|
|
390
375
|
*/
|
|
391
|
-
currentFormat$:
|
|
376
|
+
currentFormat$: VideoFormat | undefined;
|
|
392
377
|
/**
|
|
393
378
|
* Список всех доступных субтитров
|
|
394
379
|
*/
|
|
395
|
-
availableTextTracks$:
|
|
380
|
+
availableTextTracks$: ITextTrack[];
|
|
396
381
|
/**
|
|
397
382
|
* Выбранная и отображаемая дорожка субтитров
|
|
398
383
|
*/
|
|
399
|
-
currentTextTrack$:
|
|
384
|
+
currentTextTrack$: ITextTrack["id"] | undefined;
|
|
400
385
|
/**
|
|
401
386
|
* Рассчитанная ширина канала пользователя
|
|
402
387
|
*/
|
|
403
|
-
throughputEstimation$:
|
|
388
|
+
throughputEstimation$: Kbps | undefined;
|
|
404
389
|
/**
|
|
405
|
-
* Round-Trip-Time
|
|
390
|
+
* Round-Trip-Time; время от отправки запроса до получения ответа. Весьма неточное.
|
|
406
391
|
*/
|
|
407
|
-
rttEstimation$:
|
|
392
|
+
rttEstimation$: Milliseconds | undefined;
|
|
408
393
|
/**
|
|
409
394
|
* Битрейт текущей видео-дорожки
|
|
410
395
|
*/
|
|
411
|
-
videoBitrate$:
|
|
396
|
+
videoBitrate$: Kbps | undefined;
|
|
412
397
|
/**
|
|
413
398
|
* Хост с которого воспроизводится видео
|
|
414
399
|
*/
|
|
415
|
-
hostname$:
|
|
400
|
+
hostname$: string | undefined;
|
|
416
401
|
/**
|
|
417
402
|
* Тип HTTP соединения последнего запроса
|
|
418
403
|
*/
|
|
419
|
-
httpConnectionType$:
|
|
404
|
+
httpConnectionType$: HttpConnectionType | undefined;
|
|
420
405
|
/**
|
|
421
406
|
* Было ли переиспользовано последнее HTTP соединение
|
|
422
407
|
*/
|
|
423
|
-
httpConnectionReused$:
|
|
408
|
+
httpConnectionReused$: boolean | undefined;
|
|
424
409
|
/**
|
|
425
410
|
* Дополнительные данные-метрики по HTTP соединению
|
|
426
411
|
*/
|
|
427
|
-
httpConnectionMetrics$:
|
|
412
|
+
httpConnectionMetrics$: HttpConnectionMetrics | undefined;
|
|
428
413
|
/**
|
|
429
414
|
* Данные по загрузке по сети
|
|
430
415
|
*/
|
|
431
|
-
httpDownloadMetrics$:
|
|
416
|
+
httpDownloadMetrics$: HttpDownloadMetrics | undefined;
|
|
417
|
+
/**
|
|
418
|
+
* Где сейчас рисуется картинка
|
|
419
|
+
*/
|
|
420
|
+
surface$: Surface;
|
|
432
421
|
/**
|
|
433
422
|
* Состояние подключения Chromecast
|
|
434
423
|
*/
|
|
435
|
-
chromecastState$:
|
|
424
|
+
chromecastState$: ChromecastState;
|
|
436
425
|
/**
|
|
437
|
-
* Имя
|
|
438
|
-
* `undefined
|
|
426
|
+
* Имя устройства; куда выводится видео через Chromecast.
|
|
427
|
+
* `undefined`; если видео не играет на Chromecast устройстве
|
|
439
428
|
*/
|
|
440
|
-
chromecastDeviceName$:
|
|
429
|
+
chromecastDeviceName$: string | undefined;
|
|
441
430
|
/**
|
|
442
431
|
* Фактический размер видео
|
|
443
432
|
*/
|
|
444
|
-
intrinsicVideoSize$:
|
|
433
|
+
intrinsicVideoSize$: {
|
|
445
434
|
width: number;
|
|
446
435
|
height: number;
|
|
447
|
-
} | undefined
|
|
436
|
+
} | undefined;
|
|
448
437
|
/**
|
|
449
|
-
*
|
|
450
|
-
*/
|
|
451
|
-
is3DVideo$: IValueObservable<boolean>;
|
|
452
|
-
/**
|
|
453
|
-
* Где сейчас рисуется картинка
|
|
438
|
+
* Список всех доступных источников
|
|
454
439
|
*/
|
|
455
|
-
|
|
440
|
+
availableSources$: ISources | undefined;
|
|
456
441
|
/**
|
|
457
|
-
*
|
|
442
|
+
* Признак того; что сейчас проигрывается 3D-видео
|
|
458
443
|
*/
|
|
459
|
-
|
|
444
|
+
is3DVideo$: boolean;
|
|
460
445
|
/**
|
|
461
446
|
* Длина видео сегмента
|
|
462
447
|
*/
|
|
463
|
-
currentVideoSegmentLength$:
|
|
448
|
+
currentVideoSegmentLength$: number;
|
|
464
449
|
/**
|
|
465
450
|
* Длина аудио сегмента
|
|
466
451
|
*/
|
|
467
|
-
currentAudioSegmentLength$:
|
|
452
|
+
currentAudioSegmentLength$: number;
|
|
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 {
|
|
493
|
+
/**
|
|
494
|
+
* Элемент, который сейчас вставлен в container.
|
|
495
|
+
* Может быть видеоэлементом, iframe и вообще чем угодно в общем случае.
|
|
496
|
+
*/
|
|
497
|
+
element$: IValueObservable<HTMLVideoElement | undefined>;
|
|
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>;
|
|
468
509
|
}
|
|
469
510
|
export declare enum PlaybackState {
|
|
470
511
|
STOPPED = "stopped",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { SeekState } from "
|
|
1
|
+
import type { SeekState } from "../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";
|