@vkontakte/videoplayer-core 2.0.123-dev.428b52a4.0 → 2.0.123-dev.43da90c8.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.js +21 -20
- package/es2015.esm.js +23 -22
- package/es2018.cjs.js +15 -14
- package/es2018.esm.js +18 -17
- package/esnext.cjs.js +20 -19
- package/esnext.esm.js +22 -21
- package/evergreen.esm.js +22 -21
- package/package.json +2 -2
- package/types/player/Player.d.ts +2 -0
- package/types/player/types.d.ts +6 -0
- package/types/providers/DashProvider/lib/player.d.ts +1 -0
- package/types/providers/DashProvider/lib/types.d.ts +1 -0
- package/types/providers/HlsLiveProvider/LiveTextManager.d.ts +39 -0
- package/types/providers/HlsLiveProvider/index.d.ts +2 -0
- package/types/providers/HlsProvider/manifestDataExtractor.d.ts +1 -1
- package/types/providers/types.d.ts +2 -0
- package/types/providers/utils/HTMLVideoElement/TextTrackManager.d.ts +2 -0
- package/types/providers/utils/StallsManager.d.ts +1 -0
- package/types/utils/tuningConfig.d.ts +6 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/videoplayer-core",
|
|
3
|
-
"version": "2.0.123-dev.
|
|
3
|
+
"version": "2.0.123-dev.43da90c8.0",
|
|
4
4
|
"author": "vk.com",
|
|
5
5
|
"description": "Videoplayer core library based on the vk.com platform",
|
|
6
6
|
"homepage": "https://vk.com",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"**/*.d.ts"
|
|
50
50
|
],
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@vkontakte/videoplayer-shared": "1.0.52-dev.
|
|
52
|
+
"@vkontakte/videoplayer-shared": "1.0.52-dev.7588f1a9.0",
|
|
53
53
|
"hls.js": "~1.4.7"
|
|
54
54
|
}
|
|
55
55
|
}
|
package/types/player/Player.d.ts
CHANGED
|
@@ -45,6 +45,7 @@ export default class Player implements IPlayer {
|
|
|
45
45
|
isEnded$: ValueSubject<boolean>;
|
|
46
46
|
isLooped$: ValueSubject<boolean>;
|
|
47
47
|
isLive$: ValueSubject<boolean | undefined>;
|
|
48
|
+
isLiveEnded$: ValueSubject<boolean | null>;
|
|
48
49
|
canChangePlaybackSpeed$: ValueSubject<boolean | undefined>;
|
|
49
50
|
atLiveEdge$: ValueSubject<boolean | undefined>;
|
|
50
51
|
atLiveDurationEdge$: ValueSubject<boolean | undefined>;
|
|
@@ -104,6 +105,7 @@ export default class Player implements IPlayer {
|
|
|
104
105
|
tuningConfigName$: ValueSubject<string[]>;
|
|
105
106
|
enableDebugTelemetry$: ValueSubject<boolean>;
|
|
106
107
|
dumpTelemetry: (receiver: (value: Record<string, any>) => void) => void;
|
|
108
|
+
getCurrentTime$: ValueSubject<null>;
|
|
107
109
|
};
|
|
108
110
|
constructor(tuning?: IOptionalTuningConfig, tracer?: ITracer);
|
|
109
111
|
initVideo(config: IConfig): IPlayer;
|
package/types/player/types.d.ts
CHANGED
|
@@ -71,6 +71,8 @@ export interface IPlayer {
|
|
|
71
71
|
tuningConfigName$: IValueSubject<string[]>;
|
|
72
72
|
enableDebugTelemetry$: IValueSubject<boolean>;
|
|
73
73
|
dumpTelemetry: (receiver: (value: Record<string, any>) => void) => void;
|
|
74
|
+
/** функция вычисления текущей позиции проигрывания из под провадера (если расчет нестандартный) */
|
|
75
|
+
getCurrentTime$: IValueSubject<(() => number) | null>;
|
|
74
76
|
};
|
|
75
77
|
}
|
|
76
78
|
/**
|
|
@@ -292,6 +294,10 @@ export interface IPlayerInfo {
|
|
|
292
294
|
* Бесконечный ли стрим
|
|
293
295
|
*/
|
|
294
296
|
isLive$: IValueObservable<boolean | undefined>;
|
|
297
|
+
/**
|
|
298
|
+
* Был ли завершен бесконечный стрим
|
|
299
|
+
*/
|
|
300
|
+
isLiveEnded$: IValueObservable<boolean | null>;
|
|
295
301
|
/**
|
|
296
302
|
* Доступно ли ускоренное воспроизведении в лайв трансляции
|
|
297
303
|
*/
|
|
@@ -53,6 +53,7 @@ export declare class Player {
|
|
|
53
53
|
isActiveLowLatency$: IValueSubject<boolean>;
|
|
54
54
|
currentStallDuration$: IValueSubject<Milliseconds>;
|
|
55
55
|
videoLastDataObtainedTimestamp$: IValueSubject<Milliseconds>;
|
|
56
|
+
liveLastPeriodDuration$: IValueSubject<Milliseconds | null>;
|
|
56
57
|
private liveBuffer;
|
|
57
58
|
private isUpdatingLive;
|
|
58
59
|
private isJumpGapAfterSeekLive;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { IInternalTextTrack } from '../../player/types';
|
|
2
|
+
import { IValueSubject, Milliseconds, IError, ISubject } from '@vkontakte/videoplayer-shared';
|
|
3
|
+
import { HLSManifestData } from '../HlsProvider/manifestDataExtractor';
|
|
4
|
+
type FetchManifestData = (url: string, init?: RequestInit) => Promise<HLSManifestData>;
|
|
5
|
+
export declare class LiveTextManager {
|
|
6
|
+
private readonly params;
|
|
7
|
+
private readonly subscription;
|
|
8
|
+
private readonly abortControllers;
|
|
9
|
+
/** в случае перемотки будет сохранена актуальная ссылка "наконечника" стрима */
|
|
10
|
+
private prepareUrl;
|
|
11
|
+
private currentTextTrackData;
|
|
12
|
+
availableTextTracks$: IValueSubject<IInternalTextTrack[] | null>;
|
|
13
|
+
getCurrentTime$: IValueSubject<(() => number) | null>;
|
|
14
|
+
error$: ISubject<IError>;
|
|
15
|
+
constructor(liveTime$: IValueSubject<Milliseconds | undefined>, video: HTMLVideoElement, fetchManifestData: FetchManifestData, sourceUrl: string, downloadThreshold: number);
|
|
16
|
+
destroy(): void;
|
|
17
|
+
/**
|
|
18
|
+
* одноименный метод из провайдера, который дергаем на перемотке,
|
|
19
|
+
* чтобы синхронизировать субтитры с видео\аудио дорожками
|
|
20
|
+
*/
|
|
21
|
+
prepare(url: string): Promise<void>;
|
|
22
|
+
/** тут, на самом деле, мы получаем ссылку на плейлисты для текстовых треков */
|
|
23
|
+
processTextTracks(textTracks: IInternalTextTrack[], baseUrl: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* @todo - пока только с 1 стримом работает
|
|
26
|
+
*/
|
|
27
|
+
private parseTextTracks;
|
|
28
|
+
/** парсим плейлист и получаем список треков */
|
|
29
|
+
private parsePlaylist;
|
|
30
|
+
/** забирает значение (value) строки в плейлисте */
|
|
31
|
+
private extractPlaylistRowValue;
|
|
32
|
+
/** обновляет ссылку на текущий сегмент субтитров для UI */
|
|
33
|
+
private processLiveTime;
|
|
34
|
+
/** догружает актуальные сабы */
|
|
35
|
+
private fetchNextManifestData;
|
|
36
|
+
private fetchManifestData;
|
|
37
|
+
private error;
|
|
38
|
+
}
|
|
39
|
+
export {};
|
|
@@ -13,6 +13,7 @@ export default class HlsLiveProvider implements IProvider {
|
|
|
13
13
|
private video;
|
|
14
14
|
private params;
|
|
15
15
|
private textTracksManager;
|
|
16
|
+
private liveTextManager;
|
|
16
17
|
private masterManifest;
|
|
17
18
|
private manifests$;
|
|
18
19
|
private maxSeekBackTime$;
|
|
@@ -26,5 +27,6 @@ export default class HlsLiveProvider implements IProvider {
|
|
|
26
27
|
private playIfAllowed;
|
|
27
28
|
private seek;
|
|
28
29
|
private syncPlayback;
|
|
30
|
+
private generateLiveUrl;
|
|
29
31
|
}
|
|
30
32
|
export {};
|
|
@@ -17,5 +17,5 @@ type ExtractHLSManifestDataConfig = {
|
|
|
17
17
|
manifestRetryInterval: number;
|
|
18
18
|
manifestRetryMaxInterval: number;
|
|
19
19
|
};
|
|
20
|
-
declare const extractHLSManifestData: (masterManifestUrl: string, baseUrl: string | undefined, config: ExtractHLSManifestDataConfig) => Promise<HLSManifestData>;
|
|
20
|
+
declare const extractHLSManifestData: (masterManifestUrl: string, baseUrl: string | undefined, config: ExtractHLSManifestDataConfig, init?: RequestInit) => Promise<HLSManifestData>;
|
|
21
21
|
export default extractHLSManifestData;
|
|
@@ -67,6 +67,7 @@ export interface IProviderOutput {
|
|
|
67
67
|
currentBuffer$: IValueSubject<IRange<Seconds> | undefined>;
|
|
68
68
|
isBuffering$: IValueSubject<boolean>;
|
|
69
69
|
isLive$: IValueSubject<boolean | undefined>;
|
|
70
|
+
isLiveEnded$: IValueSubject<boolean | null>;
|
|
70
71
|
isLowLatency$: IValueSubject<boolean | undefined>;
|
|
71
72
|
liveTime$: IValueSubject<Milliseconds | undefined>;
|
|
72
73
|
liveBufferTime$: IValueSubject<Milliseconds | undefined>;
|
|
@@ -92,4 +93,5 @@ export interface IProviderOutput {
|
|
|
92
93
|
inPiP$: IValueSubject<boolean>;
|
|
93
94
|
inFullscreen$: IValueSubject<boolean>;
|
|
94
95
|
playbackState$: IValueSubject<PlaybackState | string>;
|
|
96
|
+
getCurrentTime$: IValueSubject<(() => number) | null>;
|
|
95
97
|
}
|
|
@@ -14,6 +14,8 @@ declare class TextTrackManager {
|
|
|
14
14
|
private subscription;
|
|
15
15
|
private externalTracks;
|
|
16
16
|
private internalTracks;
|
|
17
|
+
private baseURL?;
|
|
18
|
+
constructor(baseURL?: string);
|
|
17
19
|
connect(video: HTMLVideoElement, desiredState: Pick<IDesiredState, 'externalTextTracks' | 'internalTextTracks' | 'currentTextTrack' | 'textTrackCuesSettings'>, providerOutput: Pick<IProviderOutput, 'availableTextTracks$' | 'currentTextTrack$' | 'error$'>): void;
|
|
18
20
|
private subscribe;
|
|
19
21
|
private applyCueSettings;
|
|
@@ -25,6 +25,7 @@ declare class StallsManager {
|
|
|
25
25
|
private predictedThroughputWithoutData;
|
|
26
26
|
private qualityRestrictionTimer;
|
|
27
27
|
private subscription;
|
|
28
|
+
severeStallOccurred$: IValueSubject<boolean>;
|
|
28
29
|
connect(data: IConnectData): void;
|
|
29
30
|
get videoMaxQualityLimit(): ExactVideoQuality | undefined;
|
|
30
31
|
get predictedThroughput(): Kbps;
|
|
@@ -70,7 +70,6 @@ export type ITuningConfig = {
|
|
|
70
70
|
bufferEmptinessTolerance: Milliseconds;
|
|
71
71
|
useFetchPriorityHints: boolean;
|
|
72
72
|
qualityLimitsOnStall: {
|
|
73
|
-
stallDurationBeforeQualityDecrease: Milliseconds;
|
|
74
73
|
stallDurationNoDataBeforeQualityDecrease: Milliseconds;
|
|
75
74
|
stallCountBeforeQualityDecrease: Milliseconds;
|
|
76
75
|
resetQualityRestrictionTimeout: Milliseconds;
|
|
@@ -185,7 +184,13 @@ export type ITuningConfig = {
|
|
|
185
184
|
ignoreAudioRendererError: boolean;
|
|
186
185
|
useEnableSubtitlesParam: boolean;
|
|
187
186
|
useOldMSEDetection: boolean;
|
|
187
|
+
useHlsLiveNewTextManager: boolean;
|
|
188
188
|
exposeInternalsToGlobal: boolean;
|
|
189
|
+
/**
|
|
190
|
+
* за какое время до конца текущих скачанных субтитров
|
|
191
|
+
* попробуем получить следующий сегмент субтитров
|
|
192
|
+
*/
|
|
193
|
+
hlsLiveNewTextManagerDownloadThreshold: Milliseconds;
|
|
189
194
|
};
|
|
190
195
|
export type IOptionalTuningConfig = RecursivePartial<ITuningConfig> & {
|
|
191
196
|
configName: ITuningConfig['configName'];
|