@vkontakte/videoplayer-core 2.0.171-dev.c1327f3bc.0 → 2.0.171-dev.cb6e2e206.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 +57 -53
- package/es2015.esm.js +48 -44
- package/esnext.cjs +48 -44
- package/esnext.esm.js +59 -55
- package/evergreen.esm.js +59 -55
- package/package.json +2 -2
- package/types/providers/DashLiveProvider/utils/LiveDashPlayer.d.ts +9 -1
- package/types/providers/DashProvider/baseDashProvider.d.ts +2 -0
- package/types/providers/DashProvider/lib/sourceBufferTaskQueue.d.ts +2 -1
- package/types/providers/DashProviderVirtual/baseDashProvider.d.ts +1 -0
- package/types/providers/DashProviderVirtual/lib/buffer/nativeBufferManager.d.ts +1 -1
- package/types/providers/DashProviderVirtual/lib/buffer/sourceBufferTaskQueue.d.ts +2 -1
- package/types/providers/ProviderContainer/Mayday/heuristics/HangupHeuristic.d.ts +3 -2
- package/types/providers/ProviderContainer/index.d.ts +1 -0
- package/types/providers/utils/Abr/rules/video/failedVideoTrackRule.d.ts +14 -0
- package/types/providers/utils/Abr/types.d.ts +2 -0
- package/types/providers/utils/HTMLVideoElement/destroy.d.ts +1 -1
- package/types/providers/utils/HTMLVideoElement/pool.d.ts +3 -2
- package/types/utils/autoSelectTrack.d.ts +4 -3
- package/types/utils/tuningConfig.d.ts +16 -8
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/videoplayer-core",
|
|
3
|
-
"version": "2.0.171-dev.
|
|
3
|
+
"version": "2.0.171-dev.cb6e2e206.0",
|
|
4
4
|
"author": "vk.ru",
|
|
5
5
|
"description": "Videoplayer core library based on the vk.ru platform",
|
|
6
6
|
"homepage": "https://vk.ru",
|
|
@@ -42,6 +42,6 @@
|
|
|
42
42
|
"**/*.d.ts"
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@vkontakte/videoplayer-shared": "1.0.100-dev.
|
|
45
|
+
"@vkontakte/videoplayer-shared": "1.0.100-dev.cb6e2e206.0"
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -49,7 +49,6 @@ export default class LiveDashPlayer {
|
|
|
49
49
|
private bufferStates;
|
|
50
50
|
private downloadRate?;
|
|
51
51
|
private sourceJitter;
|
|
52
|
-
private srcToken;
|
|
53
52
|
private chunkRateEstimator;
|
|
54
53
|
private manifestUrl;
|
|
55
54
|
private urlResolver;
|
|
@@ -58,6 +57,7 @@ export default class LiveDashPlayer {
|
|
|
58
57
|
*/
|
|
59
58
|
private waitingForFirstBufferAfterSrcChange;
|
|
60
59
|
private params;
|
|
60
|
+
private playbackStateSubscription;
|
|
61
61
|
soundProhibitedEvent$: Subject<void>;
|
|
62
62
|
constructor(params: IParams);
|
|
63
63
|
attachSource(manifestUrl: string): void;
|
|
@@ -99,6 +99,14 @@ export default class LiveDashPlayer {
|
|
|
99
99
|
* send buffering notification to player
|
|
100
100
|
*/
|
|
101
101
|
private _notifyBuffering;
|
|
102
|
+
private _notifyLoadStart;
|
|
103
|
+
/**
|
|
104
|
+
* Лоадер для случая, когда play запрошен до завершения подготовки видео:
|
|
105
|
+
* syncPlayback при этом умирает на раннем выходе по активному videoState-переходу и не вызывает play().
|
|
106
|
+
* Смотрим только переходы подготовки (MANIFEST_READY/READY): переход PAUSED→PLAYING создаётся
|
|
107
|
+
* syncPlayback позже (debounce(0)), поэтому обычный resume сюда не попадает.
|
|
108
|
+
*/
|
|
109
|
+
private _syncBufferingWithDesiredPlayback;
|
|
102
110
|
/**
|
|
103
111
|
* initialize video tag, add necessary event listeners
|
|
104
112
|
* @private
|
|
@@ -16,6 +16,7 @@ import { ElementSizeManager } from "../utils/HTMLVideoElement/ElementSizeManager
|
|
|
16
16
|
type IParams = IProviderParams<IDashURLSource> & {
|
|
17
17
|
sourceHls?: IHLSSource;
|
|
18
18
|
forceVideoCodec?: VideoCodec;
|
|
19
|
+
failedVideoTrack?: Nullable<IVideoTrack>;
|
|
19
20
|
isOnDemand?: boolean;
|
|
20
21
|
dashMaxTvVideoQuality?: Nullable<ExactVideoQuality>;
|
|
21
22
|
};
|
|
@@ -33,6 +34,7 @@ export default abstract class BaseDashProvider implements IProvider {
|
|
|
33
34
|
protected stallsManager: StallsManager;
|
|
34
35
|
protected elementSizeManager: ElementSizeManager;
|
|
35
36
|
protected abrManager: AbrManager;
|
|
37
|
+
protected failedVideoTrack: Nullable<IVideoTrack>;
|
|
36
38
|
protected videoTracksMap: Map<IVideoTrack, {
|
|
37
39
|
stream: Stream;
|
|
38
40
|
representation: Representation;
|
|
@@ -7,7 +7,8 @@ declare class SourceBufferTaskQueue {
|
|
|
7
7
|
private currentTask;
|
|
8
8
|
private destroyed;
|
|
9
9
|
private abortRequested;
|
|
10
|
-
|
|
10
|
+
private isAbortFixEnabled;
|
|
11
|
+
constructor(buffer: SourceBuffer, isAbortFixEnabled?: boolean);
|
|
11
12
|
append(data: BufferSource, signal?: AbortSignal): Promise<boolean>;
|
|
12
13
|
remove(from: Milliseconds, to: Milliseconds, signal?: AbortSignal): Promise<boolean>;
|
|
13
14
|
abort(init?: BufferSource): Promise<boolean>;
|
|
@@ -16,6 +16,7 @@ import { AbrManager } from "../utils/Abr/abrManager";
|
|
|
16
16
|
type IParams = IProviderParams<IDashURLSource> & {
|
|
17
17
|
sourceHls?: IHLSSource;
|
|
18
18
|
forceVideoCodec?: VideoCodec;
|
|
19
|
+
failedVideoTrack?: Nullable<IVideoTrack>;
|
|
19
20
|
isOnDemand?: boolean;
|
|
20
21
|
dashMaxTvVideoQuality?: Nullable<ExactVideoQuality>;
|
|
21
22
|
};
|
|
@@ -7,7 +7,7 @@ export declare class NativeBufferManager {
|
|
|
7
7
|
private sourceBufferTaskQueue;
|
|
8
8
|
private subscription;
|
|
9
9
|
constructor(mediaSource: MediaSource);
|
|
10
|
-
init(mime: string, codecs: string): void;
|
|
10
|
+
init(mime: string, codecs: string, useAbortMSEFix?: boolean): void;
|
|
11
11
|
addInitSegment(initView: BufferSource, signal?: AbortSignal): Promise<boolean>;
|
|
12
12
|
append(segmentView: BufferSource, signal?: AbortSignal): Promise<boolean>;
|
|
13
13
|
remove(from: Milliseconds, to: Milliseconds, signal?: AbortSignal): Promise<boolean>;
|
|
@@ -7,7 +7,8 @@ declare class SourceBufferTaskQueue {
|
|
|
7
7
|
private currentTask;
|
|
8
8
|
private destroyed;
|
|
9
9
|
private abortRequested;
|
|
10
|
-
|
|
10
|
+
private isAbortFixEnabled;
|
|
11
|
+
constructor(buffer: SourceBuffer, isAbortFixEnabled?: boolean);
|
|
11
12
|
append(data: BufferSource, signal?: AbortSignal): Promise<boolean>;
|
|
12
13
|
remove(from: Milliseconds, to: Milliseconds, signal?: AbortSignal): Promise<boolean>;
|
|
13
14
|
abort(init?: BufferSource): Promise<boolean>;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { Subject } from "@vkontakte/videoplayer-shared";
|
|
1
2
|
import type { IError } from "@vkontakte/videoplayer-shared";
|
|
2
|
-
import type { IHeuristicDeps } from "../types";
|
|
3
|
+
import type { IHeuristicDeps, IMaydayEvent } from "../types";
|
|
3
4
|
import type { IAsyncHeuristic, HeuristicResult } from "./IHeuristic";
|
|
4
5
|
export declare class HangupHeuristic implements IAsyncHeuristic {
|
|
5
6
|
private deps;
|
|
6
7
|
static readonly heuristicName = "HangupHeuristic";
|
|
7
8
|
readonly type = "async";
|
|
8
|
-
readonly recommendation
|
|
9
|
+
readonly recommendation$: Subject<IMaydayEvent>;
|
|
9
10
|
private timerId;
|
|
10
11
|
private sub;
|
|
11
12
|
private error;
|
|
@@ -35,6 +35,7 @@ export default class ProviderContainer implements IProviderContainer {
|
|
|
35
35
|
private tracer;
|
|
36
36
|
private params;
|
|
37
37
|
private currentProviderStarted;
|
|
38
|
+
private currentFailedVideoTrack;
|
|
38
39
|
private volumeMultiplierManager;
|
|
39
40
|
private dashMaxTvVideoQuality;
|
|
40
41
|
private mayday;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IAbrRule, IAbrRuleResolution, IRuleInitContext, IVideoAbrContext } from "../../types";
|
|
2
|
+
import type { IVideoTrack } from "../../../../../player/types";
|
|
3
|
+
import type { Nullable } from "@vkontakte/videoplayer-shared";
|
|
4
|
+
import { LimitAboveRule } from "../limitAboveRule";
|
|
5
|
+
import type { RulePhaseConfig } from "../../controllers/abrPhaseController";
|
|
6
|
+
type FailedVideoTracLogsArgs = [banTrack: Nullable<IVideoTrack>];
|
|
7
|
+
export declare class FailedVideoTrackRule extends LimitAboveRule<IVideoTrack, IVideoAbrContext, FailedVideoTracLogsArgs> implements IAbrRule<IVideoTrack, IVideoAbrContext> {
|
|
8
|
+
protected banTrack: Nullable<IVideoTrack>;
|
|
9
|
+
constructor(phaseConfig: RulePhaseConfig);
|
|
10
|
+
init(initContext: IRuleInitContext): void;
|
|
11
|
+
execute(context: IVideoAbrContext): IAbrRuleResolution<IVideoTrack>;
|
|
12
|
+
protected createLogMessage(selectedTrack: IVideoTrack, banTrack: Nullable<IVideoTrack>): string;
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -15,6 +15,7 @@ export declare enum VideoRuleName {
|
|
|
15
15
|
Buffer = "buffer_rule",
|
|
16
16
|
Bola = "bola_rule",
|
|
17
17
|
FitsContainer = "fits_container_rule",
|
|
18
|
+
FailedVideoTrack = "failed_video_track_rule",
|
|
18
19
|
TvDisabledVideoTrack = "tv_disabled_video_track_rule",
|
|
19
20
|
Stalls = "stalls_rule",
|
|
20
21
|
LowerLimit = "lower_limit_rule",
|
|
@@ -58,6 +59,7 @@ export interface IInitAbrManagerContext {
|
|
|
58
59
|
rtt$: IValueSubject<Milliseconds>;
|
|
59
60
|
throughputVariance$?: IValueSubject<number>;
|
|
60
61
|
element: HTMLMediaElement;
|
|
62
|
+
failedVideoTrack: Nullable<IVideoTrack>;
|
|
61
63
|
abrLogger: IComponentLogger;
|
|
62
64
|
panelSize?: IRectangle;
|
|
63
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const destroy: (video: HTMLMediaElement) => void;
|
|
1
|
+
export declare const destroy: (video: HTMLMediaElement, clearVideoElementInnerHTML: boolean) => void;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ITuningConfig } from "../../../utils/tuningConfig";
|
|
2
|
-
type
|
|
3
|
-
|
|
2
|
+
export type AllocateConstraints = Pick<ITuningConfig, "audioVideoSyncRate" | "disableYandexPiP" | "clearVideoElementInnerHTML" | "reuseOwnVideoElement">;
|
|
3
|
+
type DisposeConstraints = Pick<ITuningConfig, "keepVideoElement" | "clearVideoElementInnerHTML" | "reuseOwnVideoElement">;
|
|
4
|
+
export declare const allocate: (container: HTMLElement, { audioVideoSyncRate, disableYandexPiP, clearVideoElementInnerHTML, reuseOwnVideoElement }: ITuningConfig) => HTMLVideoElement;
|
|
4
5
|
export declare const initializeAudio: (element: HTMLAudioElement) => HTMLAudioElement;
|
|
5
6
|
export declare const dispose: (element: HTMLMediaElement, constraints: DisposeConstraints) => void;
|
|
6
7
|
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ITuningConfig } from "./tuningConfig";
|
|
2
|
-
import type { Kbps, Milliseconds, IRectangle, QualityLimits, IComponentLogger } from "@vkontakte/videoplayer-shared";
|
|
2
|
+
import type { Kbps, Milliseconds, IRectangle, QualityLimits, IComponentLogger, Nullable } from "@vkontakte/videoplayer-shared";
|
|
3
3
|
import { type ExactVideoQuality } from "@vkontakte/videoplayer-shared";
|
|
4
4
|
import type { IAudioTrack, IBaseTrack, IVideoTrack } from "../player/types";
|
|
5
5
|
interface IConstraints<T extends IBaseTrack> {
|
|
@@ -11,6 +11,7 @@ interface IConstraints<T extends IBaseTrack> {
|
|
|
11
11
|
playbackRate?: number;
|
|
12
12
|
forwardBufferHealth?: number;
|
|
13
13
|
current?: T;
|
|
14
|
+
failedVideoTrack?: Nullable<T>;
|
|
14
15
|
visible?: boolean;
|
|
15
16
|
history?: TrackHistory<T>;
|
|
16
17
|
droppedVideoMaxQualityLimit?: ExactVideoQuality;
|
|
@@ -29,8 +30,8 @@ export declare class TrackHistory<T extends IBaseTrack> {
|
|
|
29
30
|
export declare const defaultEmptyArrayErrorMessage = "Assertion \"ABR Tracks is empty array\" failed";
|
|
30
31
|
export declare const getMinPossibleAudioForVideoOld: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
|
|
31
32
|
export declare const getMinPossibleAudioForVideoNew: (videoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], minVideoAudioRatio: number) => IAudioTrack | undefined;
|
|
32
|
-
export declare const autoSelectVideoTrackNew: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize }: IConstraints<IVideoTrack>) => IVideoTrack;
|
|
33
|
-
export declare const autoSelectVideoTrackOld: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize }: IConstraints<IVideoTrack>) => IVideoTrack;
|
|
33
|
+
export declare const autoSelectVideoTrackNew: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, failedVideoTrack, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize }: IConstraints<IVideoTrack>) => IVideoTrack;
|
|
34
|
+
export declare const autoSelectVideoTrackOld: (videoTracks: IVideoTrack[], { container, estimatedThroughput, tuning, limits, reserve, forwardBufferHealth, playbackRate, current, failedVideoTrack, history, visible, droppedVideoMaxQualityLimit, stallsVideoMaxQualityLimit, stallsPredictedThroughput, abrLogger, panelSize }: IConstraints<IVideoTrack>) => IVideoTrack;
|
|
34
35
|
export declare const autoSelectAudioTrackForVideoOld: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
|
|
35
36
|
export declare const autoSelectAudioTrackForVideoNew: (selectedVideoTrack: IVideoTrack, videoTracks: IVideoTrack[], audioTracks: IAudioTrack[], { estimatedThroughput, tuning, playbackRate, forwardBufferHealth, history, abrLogger, stallsPredictedThroughput }: IConstraints<IAudioTrack>) => IAudioTrack | undefined;
|
|
36
37
|
export {};
|
|
@@ -15,6 +15,19 @@ export type ITuningConfig = {
|
|
|
15
15
|
heuristics: string[];
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
|
+
* Если true, внутренний video элемент не будет уничтожаться при реините провайдера
|
|
19
|
+
* и при создании нового экземляра Player.
|
|
20
|
+
* Будет веcти себя аналогично элементу переданному снаружи
|
|
21
|
+
* Для кейса прямого использовани ядра
|
|
22
|
+
*/
|
|
23
|
+
keepVideoElement: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Временный флаг для тестирования очистки video элемента
|
|
26
|
+
* Если true, при очистке будет вызван innerHTML = '' для очистки дочерних элементов трэков
|
|
27
|
+
* В противном случае они размножаются
|
|
28
|
+
*/
|
|
29
|
+
clearVideoElementInnerHTML: boolean;
|
|
30
|
+
/**
|
|
18
31
|
* Включает очистку состояния плеера при вызове метода stop()
|
|
19
32
|
*/
|
|
20
33
|
allowPlayerReuse: boolean;
|
|
@@ -169,6 +182,7 @@ export type ITuningConfig = {
|
|
|
169
182
|
useSmartRepresentationSwitch: boolean;
|
|
170
183
|
stallForceSeekOncePerStall: boolean;
|
|
171
184
|
useFetchPriorityHints: boolean;
|
|
185
|
+
useAbortMSEFix: boolean;
|
|
172
186
|
enableBaseUrlSupport: boolean;
|
|
173
187
|
maxSegmentRetryCount: number;
|
|
174
188
|
sourceOpenTimeout: number;
|
|
@@ -194,7 +208,9 @@ export type ITuningConfig = {
|
|
|
194
208
|
abrVideoRules: VideoRuleName[];
|
|
195
209
|
abrAudioRules: AudioRuleName[];
|
|
196
210
|
useDynamicBirtateRule: boolean;
|
|
211
|
+
useNewFailoverLogic: boolean;
|
|
197
212
|
useFailoverHostsOnAllProviderCrash: boolean;
|
|
213
|
+
videoTrackBanAfterProviderFail: Milliseconds;
|
|
198
214
|
saveData3gQualityLimit: ExactVideoQuality;
|
|
199
215
|
saveData2gQualityLimit: ExactVideoQuality;
|
|
200
216
|
useConnectionDataUpperLimit: boolean;
|
|
@@ -438,14 +454,6 @@ export type ITuningConfig = {
|
|
|
438
454
|
useDurationFromSegments: boolean;
|
|
439
455
|
/** включен режим проигрывания только аудио (без видео) */
|
|
440
456
|
audioOnly: boolean;
|
|
441
|
-
/**
|
|
442
|
-
* Переводить провайдер в READY по loadedmetadata вместо canplay.
|
|
443
|
-
* canplay означает, что видео уже может играться, что избыточно для READY —
|
|
444
|
-
* достаточно получить манифест (loadedmetadata).
|
|
445
|
-
* Применяется только когда желаемое состояние — READY (preload): при автоплее
|
|
446
|
-
* провайдер по-прежнему ждёт canplay, чтобы play() не вызывался до появления данных.
|
|
447
|
-
*/
|
|
448
|
-
readyOnLoadedMetadata: boolean;
|
|
449
457
|
};
|
|
450
458
|
export type IOptionalTuningConfig = RecursivePartial<ITuningConfig>;
|
|
451
459
|
export declare const fillDefault: (partial: IOptionalTuningConfig) => ITuningConfig;
|