@volcengine/veplayer 2.2.0-rc.0 → 2.2.0-rc.2
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/esm/index.d.ts +2 -6
- package/esm/veplayer.biz.live.development.js +28 -53
- package/esm/veplayer.biz.live.production.js +1 -1
- package/esm/veplayer.d.ts +16 -10
- package/esm/veplayer.development.css +1 -1
- package/esm/veplayer.development.js +147 -81
- package/esm/veplayer.live.d.ts +16 -10
- package/esm/veplayer.live.development.css +1 -1
- package/esm/veplayer.live.development.js +147 -81
- package/esm/veplayer.live.production.css +1 -1
- package/esm/veplayer.live.production.js +3 -3
- package/esm/veplayer.production.css +1 -1
- package/esm/veplayer.production.js +3 -3
- package/esm/veplayer.vod.d.ts +2 -6
- package/esm/veplayer.vod.development.css +1 -1
- package/esm/veplayer.vod.development.js +94 -19
- package/esm/veplayer.vod.production.css +1 -1
- package/esm/veplayer.vod.production.js +2 -2
- package/package.json +2 -1
- package/umd/index.d.ts +2 -6
- package/umd/veplayer.biz.live.development.js +28 -53
- package/umd/veplayer.biz.live.production.js +1 -1
- package/umd/veplayer.d.ts +16 -10
- package/umd/veplayer.development.css +1 -1
- package/umd/veplayer.development.js +147 -81
- package/umd/veplayer.live.d.ts +16 -10
- package/umd/veplayer.live.development.css +1 -1
- package/umd/veplayer.live.development.js +147 -81
- package/umd/veplayer.live.production.css +1 -1
- package/umd/veplayer.live.production.js +1 -1
- package/umd/veplayer.production.css +1 -1
- package/umd/veplayer.production.js +1 -1
- package/umd/veplayer.vod.d.ts +2 -6
- package/umd/veplayer.vod.development.css +1 -1
- package/umd/veplayer.vod.development.js +94 -19
- package/umd/veplayer.vod.production.css +1 -1
- package/umd/veplayer.vod.production.js +1 -1
- package/veplayer.d.ts +6772 -0
- package/veplayer.live.d.ts +6774 -0
- package/veplayer.vod.d.ts +3171 -0
|
@@ -0,0 +1,3171 @@
|
|
|
1
|
+
import Player from "xgplayer";
|
|
2
|
+
import { IXGI18nText, Plugin, IPluginOptions } from "xgplayer";
|
|
3
|
+
import { IPlayerOptions as PlayerOptions } from "xgplayer";
|
|
4
|
+
import { IDefinition as XGDefinition } from "xgplayer";
|
|
5
|
+
import { default as Player$0 } from "xgplayer";
|
|
6
|
+
import { IError as XGError } from "xgplayer";
|
|
7
|
+
import { IBasePluginOptions as XGPluginOptions } from "xgplayer";
|
|
8
|
+
import { IXGI18n } from "xgplayer/es/lang/i18n";
|
|
9
|
+
import XG_EN from "xgplayer/es/lang/en";
|
|
10
|
+
import XG_ZH_CN from "xgplayer/es/lang/zh-cn";
|
|
11
|
+
import OptionList from "xgplayer/es/plugins/common/optionList";
|
|
12
|
+
import { default as XGPlayer } from "xgplayer/es/player";
|
|
13
|
+
declare const EN: {
|
|
14
|
+
DEFINITION_FALLBACK_TOAST: string;
|
|
15
|
+
DEFINITION_SWITCHING: string;
|
|
16
|
+
ERROR_REFRESH: string;
|
|
17
|
+
UNMUTE: string;
|
|
18
|
+
MANIFEST: string;
|
|
19
|
+
NETWORK: string;
|
|
20
|
+
NETWORK_TIMEOUT: string;
|
|
21
|
+
NETWORK_FORBIDDEN: string;
|
|
22
|
+
NETWORK_NOTFOUND: string;
|
|
23
|
+
DEMUX: string;
|
|
24
|
+
REMUX: string;
|
|
25
|
+
MEDIA: string;
|
|
26
|
+
MEDIA_ERR_CODEC_NOT_SUPPORTED: string;
|
|
27
|
+
MEDIA_ERR_URL_EMPTY: string;
|
|
28
|
+
DRM: string;
|
|
29
|
+
OTHER: string;
|
|
30
|
+
RUNTIME: string;
|
|
31
|
+
MODULE_LOAD_ERROR: string;
|
|
32
|
+
UNKNOWN: string;
|
|
33
|
+
ERROR_TYPES: typeof XG_EN.TEXT.ERROR_TYPES;
|
|
34
|
+
HAVE_NOTHING: string;
|
|
35
|
+
HAVE_METADATA: string;
|
|
36
|
+
HAVE_CURRENT_DATA: string;
|
|
37
|
+
HAVE_FUTURE_DATA: string;
|
|
38
|
+
HAVE_ENOUGH_DATA: string;
|
|
39
|
+
NETWORK_EMPTY: string;
|
|
40
|
+
NETWORK_IDLE: string;
|
|
41
|
+
NETWORK_LOADING: string;
|
|
42
|
+
NETWORK_NO_SOURCE: string;
|
|
43
|
+
MEDIA_ERR_ABORTED: string;
|
|
44
|
+
MEDIA_ERR_NETWORK: string;
|
|
45
|
+
MEDIA_ERR_DECODE: string;
|
|
46
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED: string;
|
|
47
|
+
REPLAY: string;
|
|
48
|
+
ERROR: string;
|
|
49
|
+
PLAY_TIPS: string;
|
|
50
|
+
PAUSE_TIPS: string;
|
|
51
|
+
PLAYNEXT_TIPS: string;
|
|
52
|
+
DOWNLOAD_TIPS: string;
|
|
53
|
+
ROTATE_TIPS: string;
|
|
54
|
+
RELOAD_TIPS: string;
|
|
55
|
+
FULLSCREEN_TIPS: string;
|
|
56
|
+
EXITFULLSCREEN_TIPS: string;
|
|
57
|
+
CSSFULLSCREEN_TIPS: string;
|
|
58
|
+
EXITCSSFULLSCREEN_TIPS: string;
|
|
59
|
+
TEXTTRACK: string;
|
|
60
|
+
PIP: string;
|
|
61
|
+
SCREENSHOT: string;
|
|
62
|
+
LIVE: string;
|
|
63
|
+
OFF: string;
|
|
64
|
+
OPEN: string;
|
|
65
|
+
MINI_DRAG: string;
|
|
66
|
+
MINISCREEN: string;
|
|
67
|
+
REFRESH_TIPS: string;
|
|
68
|
+
REFRESH: string;
|
|
69
|
+
FORWARD: string;
|
|
70
|
+
LIVE_TIP: string;
|
|
71
|
+
};
|
|
72
|
+
type TextKey = keyof typeof EN;
|
|
73
|
+
type Lang = "zh-cn" | "zh-hk" | "en" | "jp" | string;
|
|
74
|
+
declare class VeI18n<T extends string = TextKey> {
|
|
75
|
+
private _lang;
|
|
76
|
+
constructor(config?: {
|
|
77
|
+
lang?: Lang;
|
|
78
|
+
i18n?: {
|
|
79
|
+
texts?: Record<Lang, Record<string, string>>;
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
static get langKeys(): string[];
|
|
83
|
+
static isLangValid(lang: Lang): boolean;
|
|
84
|
+
static extend(i18nTextList: Array<IXGI18nText>, i18nLangs?: IXGI18n): void;
|
|
85
|
+
setLang(lang: string): void;
|
|
86
|
+
getLang(): string;
|
|
87
|
+
normalize(text?: string | Record<Lang, string>): string;
|
|
88
|
+
getText(textKey?: T | string): Record<string | T, string>[string | T] | undefined;
|
|
89
|
+
}
|
|
90
|
+
interface DefinitionUrl {
|
|
91
|
+
url: string;
|
|
92
|
+
next: DefinitionUrl | null;
|
|
93
|
+
}
|
|
94
|
+
declare class Definition implements XGDefinition {
|
|
95
|
+
readonly definition: string;
|
|
96
|
+
readonly source: Source;
|
|
97
|
+
readonly text?: Record<Lang, string> | string;
|
|
98
|
+
readonly fallbackUrl: DefinitionUrl;
|
|
99
|
+
readonly urls: string[];
|
|
100
|
+
private _currentUrlRef;
|
|
101
|
+
constructor(definitionSetting: {
|
|
102
|
+
url: string;
|
|
103
|
+
definition: string;
|
|
104
|
+
source: Source;
|
|
105
|
+
text?: Record<Lang, string> | string;
|
|
106
|
+
fallbackUrls?: string[];
|
|
107
|
+
});
|
|
108
|
+
get url(): string;
|
|
109
|
+
set url(url: string);
|
|
110
|
+
next(): DefinitionUrl;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* @list option
|
|
114
|
+
* @kind property
|
|
115
|
+
* @id Definition
|
|
116
|
+
* @name Definition
|
|
117
|
+
*
|
|
118
|
+
*/
|
|
119
|
+
interface ExposedDefinition {
|
|
120
|
+
/** {zh}
|
|
121
|
+
* @brief 播放地址。
|
|
122
|
+
* @default 无
|
|
123
|
+
*/
|
|
124
|
+
url: string;
|
|
125
|
+
/** {zh}
|
|
126
|
+
* @brief 清晰度(唯一值)。
|
|
127
|
+
* @default 无
|
|
128
|
+
*
|
|
129
|
+
*/
|
|
130
|
+
definition: string;
|
|
131
|
+
/** {zh}
|
|
132
|
+
* @brief 清晰度展示名称。可设置多语言 `{text: {'zh-cn': '高清', 'en': 'HD'}}`。
|
|
133
|
+
* @default 无
|
|
134
|
+
*/
|
|
135
|
+
text?: Record<Lang, string> | string;
|
|
136
|
+
/** {zh}
|
|
137
|
+
* @brief 为当前清晰度地址设置备路拉流地址,支持设置多个备路拉流地址。当前清晰度地址拉流失败时,会在当前清晰度地址和备路直播地址之间循环拉流,直到拉流成功。
|
|
138
|
+
* @default 无
|
|
139
|
+
*
|
|
140
|
+
*/
|
|
141
|
+
fallbackUrls?: string[];
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* @list option
|
|
145
|
+
* @brief 线路数据配置。一个线路包含当前线路的 name ,展示名称,及线路下的清晰度列表。
|
|
146
|
+
* @kind property
|
|
147
|
+
* @id Source
|
|
148
|
+
* @name Source
|
|
149
|
+
*/
|
|
150
|
+
interface ExposedSource {
|
|
151
|
+
/** {zh}
|
|
152
|
+
* @brief 线路name(唯一值)。
|
|
153
|
+
* @default 无
|
|
154
|
+
*/
|
|
155
|
+
name?: string;
|
|
156
|
+
/** {zh}
|
|
157
|
+
* @brief 线路展示名称。可设置多语言 `{text: {'zh-cn': '线路一', 'en': 'LineOne'}}`。
|
|
158
|
+
* @default 无
|
|
159
|
+
*
|
|
160
|
+
*/
|
|
161
|
+
text?: Record<Lang, string> | string;
|
|
162
|
+
/** {zh}
|
|
163
|
+
* @brief 该线路下清晰度列表。
|
|
164
|
+
* @default 无
|
|
165
|
+
*
|
|
166
|
+
*/
|
|
167
|
+
definitions: Array<ExposedDefinition | string>;
|
|
168
|
+
}
|
|
169
|
+
interface CompoundSources {
|
|
170
|
+
sources?: ExposedSource[];
|
|
171
|
+
url?: string;
|
|
172
|
+
fallbackUrls?: string[];
|
|
173
|
+
}
|
|
174
|
+
declare class Source {
|
|
175
|
+
readonly name?: string;
|
|
176
|
+
readonly text?: Record<Lang, string> | string;
|
|
177
|
+
readonly definitions: Array<Definition & {
|
|
178
|
+
source: Source;
|
|
179
|
+
}>;
|
|
180
|
+
private constructor();
|
|
181
|
+
get defaultDefinition(): Definition & {
|
|
182
|
+
source: Source;
|
|
183
|
+
};
|
|
184
|
+
static normalize(input: CompoundSources | ExposedSource[] | string): Source[];
|
|
185
|
+
private static normalizeUrl;
|
|
186
|
+
add(definition: Definition): void;
|
|
187
|
+
}
|
|
188
|
+
interface Config {
|
|
189
|
+
listType: ListType;
|
|
190
|
+
isAutoChange?: boolean;
|
|
191
|
+
onItemClick?: (e: Event, data: CallbackData) => void;
|
|
192
|
+
onOptionClick?: (e: Event, data: CallbackData) => void;
|
|
193
|
+
hide?: () => void;
|
|
194
|
+
list?: ListItem[];
|
|
195
|
+
panel?: {
|
|
196
|
+
className?: string;
|
|
197
|
+
title?: string | Record<Lang, string>;
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
interface Options {
|
|
201
|
+
config: Config;
|
|
202
|
+
root: HTMLElement | null;
|
|
203
|
+
player: Player;
|
|
204
|
+
}
|
|
205
|
+
declare class MobilePlayerPanel {
|
|
206
|
+
private _root?;
|
|
207
|
+
private _config;
|
|
208
|
+
private _parent;
|
|
209
|
+
private _listDom?;
|
|
210
|
+
private _container?;
|
|
211
|
+
private _titleDom?;
|
|
212
|
+
private _player;
|
|
213
|
+
private _delegates?;
|
|
214
|
+
private _listType?;
|
|
215
|
+
constructor(args: Options);
|
|
216
|
+
changeMode(listType: ListType): void;
|
|
217
|
+
// 渲染选择列表
|
|
218
|
+
renderItemList(data?: ListItem[]): HTMLElement;
|
|
219
|
+
// 渲染panel的标题
|
|
220
|
+
renderTitle(): HTMLElement | undefined;
|
|
221
|
+
updatePanel(listType: ListType): void;
|
|
222
|
+
// 渲染panel
|
|
223
|
+
renderPanel(): void;
|
|
224
|
+
show(): void;
|
|
225
|
+
hide(): void;
|
|
226
|
+
destroy(): void;
|
|
227
|
+
private _bind;
|
|
228
|
+
private _unbind;
|
|
229
|
+
private _initEvents;
|
|
230
|
+
private _unbindEvents;
|
|
231
|
+
private _handleOrientationChange;
|
|
232
|
+
private _bindDomEvent;
|
|
233
|
+
private _unbindDomEvent;
|
|
234
|
+
private _stopPropagation;
|
|
235
|
+
private _onItemClick;
|
|
236
|
+
private _handleHide;
|
|
237
|
+
}
|
|
238
|
+
declare module MobilePlayerPanelWrapper {
|
|
239
|
+
export { MobilePlayerPanel };
|
|
240
|
+
}
|
|
241
|
+
import MobilePanel = MobilePlayerPanelWrapper.MobilePlayerPanel;
|
|
242
|
+
/**
|
|
243
|
+
* @detail option
|
|
244
|
+
* @brief **清晰度选择**或**线路选择**时的**选择面板样式**,仅在移动端有效。
|
|
245
|
+
*/
|
|
246
|
+
declare enum ListType {
|
|
247
|
+
/** {zh}
|
|
248
|
+
* @brief 全屏布局
|
|
249
|
+
* @hidden
|
|
250
|
+
*/
|
|
251
|
+
Middle = "middle",
|
|
252
|
+
/** {zh}
|
|
253
|
+
* @brief 底部抽屉
|
|
254
|
+
*/
|
|
255
|
+
Bottom = "bottom",
|
|
256
|
+
/** {zh}
|
|
257
|
+
* @brief 右侧抽屉,常用于全屏时展示
|
|
258
|
+
*/
|
|
259
|
+
Fullscreen = "fullscreen",
|
|
260
|
+
/** {zh}
|
|
261
|
+
* @brief 窗口蒙层展示
|
|
262
|
+
*/
|
|
263
|
+
Inner = "inner"
|
|
264
|
+
}
|
|
265
|
+
interface ListItem {
|
|
266
|
+
[key: string]: any;
|
|
267
|
+
selected?: boolean;
|
|
268
|
+
className?: string;
|
|
269
|
+
showText?: string | HTMLElement;
|
|
270
|
+
text?: string | Record<Lang, string>;
|
|
271
|
+
iconText?: string | Record<Lang, string>;
|
|
272
|
+
}
|
|
273
|
+
type CallbackData = {
|
|
274
|
+
to?: ListItem;
|
|
275
|
+
from?: ListItem;
|
|
276
|
+
};
|
|
277
|
+
declare const enum RenderType {
|
|
278
|
+
Icon = "Icon",
|
|
279
|
+
Text = "Text"
|
|
280
|
+
}
|
|
281
|
+
type Config$0<T> = {
|
|
282
|
+
[key: string]: any;
|
|
283
|
+
// 【xg】顺序
|
|
284
|
+
index?: number;
|
|
285
|
+
// 【xg】展示的选择列表
|
|
286
|
+
list?: Array<T>;
|
|
287
|
+
// 【xg】竖屏
|
|
288
|
+
hidePortrait?: boolean;
|
|
289
|
+
// 【xg】列表点击之后是否隐藏列表
|
|
290
|
+
isItemClickHide?: boolean;
|
|
291
|
+
className?: string;
|
|
292
|
+
// 【xg】是否展示已选择的
|
|
293
|
+
isShowIcon?: boolean;
|
|
294
|
+
// 【xg 扩展】列表渲染样式类型
|
|
295
|
+
listType?: ListType;
|
|
296
|
+
// 已选择的展示类型(文案 or icon)
|
|
297
|
+
renderType?: RenderType;
|
|
298
|
+
// 列表数据只有一个是否展示
|
|
299
|
+
hideOnSingleOption?: boolean;
|
|
300
|
+
// 横屏的时候是否切换mode
|
|
301
|
+
isAutoChange?: boolean;
|
|
302
|
+
// 自定义组件 mobilePanel的配置
|
|
303
|
+
panel?: {
|
|
304
|
+
className?: string;
|
|
305
|
+
// panel 的标题
|
|
306
|
+
title?: string | Record<Lang, string>;
|
|
307
|
+
};
|
|
308
|
+
};
|
|
309
|
+
// 源自packages/xgplayer/src/plugins/common/optionsIcon.js
|
|
310
|
+
// 自定义了几种选择类型
|
|
311
|
+
declare class OptionsIcon extends Plugin {
|
|
312
|
+
icons: Record<string, any>;
|
|
313
|
+
config: Config$0<ListItem>;
|
|
314
|
+
optionsList?: MobilePanel | OptionList;
|
|
315
|
+
private _isIcon?;
|
|
316
|
+
private _isActive?;
|
|
317
|
+
private _curIndex;
|
|
318
|
+
private activeEvent?;
|
|
319
|
+
constructor(args: IPluginOptions);
|
|
320
|
+
static get pluginName(): string;
|
|
321
|
+
static get defaultConfig(): Config$0<ListItem>;
|
|
322
|
+
updateLang(): void;
|
|
323
|
+
afterCreate(): void;
|
|
324
|
+
initIcons(): void;
|
|
325
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
326
|
+
// @ts-ignore
|
|
327
|
+
show(): void;
|
|
328
|
+
hide(): void;
|
|
329
|
+
onEnter: (e: Event) => void;
|
|
330
|
+
onLeave: (e: Event) => void;
|
|
331
|
+
// 状态切换
|
|
332
|
+
toggle(isActive: boolean): void;
|
|
333
|
+
// 列表选择回调
|
|
334
|
+
onItemClick(e: Event, data: CallbackData): void;
|
|
335
|
+
// 列表点击回调
|
|
336
|
+
onOptionClick(e: Event, _data: CallbackData): void;
|
|
337
|
+
// 已选择 option 的文案
|
|
338
|
+
changeCurrentText(): void;
|
|
339
|
+
renderItemList(itemList: ListItem[], curIndex?: number): void;
|
|
340
|
+
destroy(): void;
|
|
341
|
+
render(): string;
|
|
342
|
+
private _getListType;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* @detail error
|
|
346
|
+
*/
|
|
347
|
+
declare enum Level {
|
|
348
|
+
/**
|
|
349
|
+
* @brief 严重
|
|
350
|
+
*
|
|
351
|
+
*/
|
|
352
|
+
Fatal = "Fatal",
|
|
353
|
+
/**
|
|
354
|
+
* @brief 报错
|
|
355
|
+
*/
|
|
356
|
+
Error = "Error"
|
|
357
|
+
}
|
|
358
|
+
declare enum ErrorCode {
|
|
359
|
+
/**
|
|
360
|
+
* @brief 视频解析错误
|
|
361
|
+
* @solution 请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
362
|
+
*/
|
|
363
|
+
MANIFEST_HLS_ERROR = 1100,
|
|
364
|
+
/**
|
|
365
|
+
* @brief 视频解析错误
|
|
366
|
+
* @solution 请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
367
|
+
*/
|
|
368
|
+
MANIFEST_DASH_ERROR = 1200,
|
|
369
|
+
/**
|
|
370
|
+
* @brief 网络错误
|
|
371
|
+
* @solution 请检查当前网络环境或播放地址是否合法。
|
|
372
|
+
*/
|
|
373
|
+
NETWORK = 2100,
|
|
374
|
+
/**
|
|
375
|
+
* @brief 网络请求超时
|
|
376
|
+
* @solution 请检查拉流地址是否合法。
|
|
377
|
+
*/
|
|
378
|
+
NETWORK_TIMEOUT = 2101,
|
|
379
|
+
/**
|
|
380
|
+
* @brief 网络请求 403
|
|
381
|
+
* @solution 请检查拉流地址鉴权信息。
|
|
382
|
+
*/
|
|
383
|
+
NETWORK_FORBIDDEN = 2103,
|
|
384
|
+
/**
|
|
385
|
+
* @brief 网络请求 404
|
|
386
|
+
* @solution 请检查拉流地址是否合法。
|
|
387
|
+
*/
|
|
388
|
+
NETWORK_NOTFOUND = 2104,
|
|
389
|
+
/**
|
|
390
|
+
* @brief 网络请求 206
|
|
391
|
+
* @solution 请检查拉流地址是否合法。
|
|
392
|
+
*/
|
|
393
|
+
NETWORK_RANGE_NOT_SATISFIABLE = 2116,
|
|
394
|
+
/**
|
|
395
|
+
* @brief 视频解析错误
|
|
396
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
397
|
+
*/
|
|
398
|
+
DEMUX_FLV_ERROR = 3100,
|
|
399
|
+
/**
|
|
400
|
+
* @brief 视频解析错误
|
|
401
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
402
|
+
*/
|
|
403
|
+
DEMUX_HLS_ERROR = 3200,
|
|
404
|
+
/**
|
|
405
|
+
* @brief 视频解析错误
|
|
406
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
407
|
+
*
|
|
408
|
+
*/
|
|
409
|
+
DEMUX_MP4_ERROR = 3300,
|
|
410
|
+
/**
|
|
411
|
+
* @brief 视频解析错误
|
|
412
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
413
|
+
*
|
|
414
|
+
*/
|
|
415
|
+
DEMUX_FMP4_ERROR = 3400,
|
|
416
|
+
/**
|
|
417
|
+
* @brief 视频解析错误
|
|
418
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
419
|
+
*
|
|
420
|
+
*/
|
|
421
|
+
DEMUX_SIDX_ERROR = 3410,
|
|
422
|
+
/**
|
|
423
|
+
* @brief 视频解析错误
|
|
424
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
425
|
+
*
|
|
426
|
+
*/
|
|
427
|
+
REMUX_FMP4_ERROR = 4100,
|
|
428
|
+
/**
|
|
429
|
+
* @brief 视频解析错误
|
|
430
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
431
|
+
*
|
|
432
|
+
*/
|
|
433
|
+
REMUX_MP4_ERROR = 4200,
|
|
434
|
+
/**
|
|
435
|
+
* @brief 获取数据过程被中止
|
|
436
|
+
* @solution 请检查浏览器网络请求是否正常,再尝试重新拉流。
|
|
437
|
+
*/
|
|
438
|
+
MEDIA_ERR_ABORTED = 5101,
|
|
439
|
+
/**
|
|
440
|
+
* @brief 网络发生错误,无法成功获取媒体文件
|
|
441
|
+
* @solution 请检查浏览器网络请求是否正常,再尝试重新拉流。
|
|
442
|
+
*/
|
|
443
|
+
MEDIA_ERR_NETWORK = 5102,
|
|
444
|
+
/**
|
|
445
|
+
* @brief 浏览器在解码媒体资源时发生错误
|
|
446
|
+
* @solution
|
|
447
|
+
* 1. 请检查原始视频是否正常;
|
|
448
|
+
* 2. 重新进行转码和播放;
|
|
449
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
450
|
+
*/
|
|
451
|
+
MEDIA_ERR_DECODE = 5103,
|
|
452
|
+
/**
|
|
453
|
+
* @brief 因视频格式不支持、服务器或网络的问题造成视频无法加载
|
|
454
|
+
* @solution
|
|
455
|
+
* 1. 检查浏览器视频数据请求是否正常;
|
|
456
|
+
* 2. 检查浏览器和页面环境是否支持要播放的视频格式;
|
|
457
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
458
|
+
*/
|
|
459
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED = 5104,
|
|
460
|
+
/**
|
|
461
|
+
* @brief 当前浏览器不支持视频解码
|
|
462
|
+
* @solution
|
|
463
|
+
* 1. 检查浏览器视频数据请求是否正常;
|
|
464
|
+
* 2. 检查浏览器和页面环境是否支持要播放的视频格式;
|
|
465
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
466
|
+
*/
|
|
467
|
+
MEDIA_ERR_CODEC_NOT_SUPPORTED = 5105,
|
|
468
|
+
/**
|
|
469
|
+
* @brief 当前播放地址为空
|
|
470
|
+
* @solution 请检查必要参数 `url` 或 `playlist` 是否传入。
|
|
471
|
+
*/
|
|
472
|
+
MEDIA_ERR_URL_EMPTY = 5106,
|
|
473
|
+
/**
|
|
474
|
+
* @brief 播放异常
|
|
475
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
476
|
+
*/
|
|
477
|
+
MEDIA_MSE_ADD_SB = 5200,
|
|
478
|
+
/**
|
|
479
|
+
* @brief 播放异常
|
|
480
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
481
|
+
*/
|
|
482
|
+
MEDIA_MSE_APPEND_BUFFER = 5201,
|
|
483
|
+
/**
|
|
484
|
+
* @brief 播放异常
|
|
485
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
486
|
+
*/
|
|
487
|
+
MEDIA_MSE_OTHER = 5202,
|
|
488
|
+
/**
|
|
489
|
+
* @brief 播放异常
|
|
490
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
491
|
+
*/
|
|
492
|
+
MEDIA_MSE_FULL = 5203,
|
|
493
|
+
/**
|
|
494
|
+
* @brief 播放异常
|
|
495
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
496
|
+
*/
|
|
497
|
+
MEDIA_MSE_HIJACK = 5204,
|
|
498
|
+
/**
|
|
499
|
+
* @brief 播放异常
|
|
500
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
501
|
+
*/
|
|
502
|
+
MEDIA_EME_HIJACK = 5301,
|
|
503
|
+
/**
|
|
504
|
+
* @brief DRM 权限校验失败
|
|
505
|
+
* @hidden
|
|
506
|
+
*/
|
|
507
|
+
DRM_LICENSE = 7100,
|
|
508
|
+
/**
|
|
509
|
+
* @brief DRM 权限校验失败
|
|
510
|
+
* @hidden
|
|
511
|
+
*/
|
|
512
|
+
DRM_CUSTOM_LICENSE = 7200,
|
|
513
|
+
/**
|
|
514
|
+
* @brief 播放异常
|
|
515
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
516
|
+
*/
|
|
517
|
+
OTHER = 8000,
|
|
518
|
+
/**
|
|
519
|
+
* @brief 播放异常
|
|
520
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
521
|
+
*/
|
|
522
|
+
RUNTIME_NO_CANPLAY_ERROR = 9001,
|
|
523
|
+
/**
|
|
524
|
+
* @brief 播放异常
|
|
525
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
526
|
+
*/
|
|
527
|
+
RUNTIME_BUFFERBREAK_ERROR = 9002,
|
|
528
|
+
/**
|
|
529
|
+
* @brief 播放异常
|
|
530
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
531
|
+
*/
|
|
532
|
+
RUNTIME_BWAITING_TIMEOUT_ERROR = 9002,
|
|
533
|
+
// veplayer 报错
|
|
534
|
+
/**
|
|
535
|
+
* @brief CDN 异步获取失败
|
|
536
|
+
* @solution 请刷新重试或者检查网络环境。
|
|
537
|
+
*
|
|
538
|
+
*/
|
|
539
|
+
MODULE_LOAD_ERROR = 110,
|
|
540
|
+
/**
|
|
541
|
+
* @hidden
|
|
542
|
+
*/
|
|
543
|
+
UNKNOWN = "UNKNOWN"
|
|
544
|
+
}
|
|
545
|
+
declare enum ErrorType {
|
|
546
|
+
MANIFEST = "manifest",
|
|
547
|
+
NETWORK = "network",
|
|
548
|
+
DEMUX = "demux",
|
|
549
|
+
REMUX = "remux",
|
|
550
|
+
MEDIA = "media",
|
|
551
|
+
DRM = "drm",
|
|
552
|
+
OTHER = "other",
|
|
553
|
+
RUNTIME = "runtime"
|
|
554
|
+
}
|
|
555
|
+
interface ErrorInfo<T = TextKey> {
|
|
556
|
+
errorCode?: ErrorCode;
|
|
557
|
+
message?: string;
|
|
558
|
+
messageTextKey?: T;
|
|
559
|
+
level?: Level;
|
|
560
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
561
|
+
ext?: any;
|
|
562
|
+
error?: Error;
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* @detail error
|
|
566
|
+
* @name 错误对象
|
|
567
|
+
* @id 错误对象
|
|
568
|
+
*/
|
|
569
|
+
declare class VeError<T extends string = TextKey> extends Error {
|
|
570
|
+
/**
|
|
571
|
+
* @brief 错误码,对应[错误码字典](#错误码)。
|
|
572
|
+
*/
|
|
573
|
+
readonly errorCode: ErrorCode;
|
|
574
|
+
/**
|
|
575
|
+
* @brief 错误等级。
|
|
576
|
+
*/
|
|
577
|
+
readonly level?: Level;
|
|
578
|
+
/**
|
|
579
|
+
* @brief 错误信息。
|
|
580
|
+
*/
|
|
581
|
+
message: string;
|
|
582
|
+
/**
|
|
583
|
+
* @brief 其他错误信息。
|
|
584
|
+
*/
|
|
585
|
+
readonly ext?: any;
|
|
586
|
+
/**
|
|
587
|
+
* @hidden
|
|
588
|
+
* @param error
|
|
589
|
+
* @param i18n
|
|
590
|
+
*/
|
|
591
|
+
constructor(error?: string | ErrorInfo<T>, i18n?: VeI18n<T>);
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* @list option
|
|
595
|
+
* @kind property
|
|
596
|
+
*/
|
|
597
|
+
type ErrorConfig = {
|
|
598
|
+
/** {zh}
|
|
599
|
+
* @brief 是否展示报错图片。
|
|
600
|
+
* @default true
|
|
601
|
+
*/
|
|
602
|
+
showErrorImg?: boolean;
|
|
603
|
+
/** {zh}
|
|
604
|
+
* @brief 是否展示报错提示。
|
|
605
|
+
* @default true
|
|
606
|
+
*/
|
|
607
|
+
showErrorTip?: boolean;
|
|
608
|
+
/** {zh}
|
|
609
|
+
* @brief 是否展示刷新按钮。
|
|
610
|
+
* @default true
|
|
611
|
+
*/
|
|
612
|
+
showRefresh?: boolean;
|
|
613
|
+
/** {zh}
|
|
614
|
+
* @brief 自定义报错显示。
|
|
615
|
+
* @default 无
|
|
616
|
+
*/
|
|
617
|
+
errorTipsText?: string | Record<Lang, string>;
|
|
618
|
+
/** {zh}
|
|
619
|
+
* @brief 更多提示信息。
|
|
620
|
+
* @default 无
|
|
621
|
+
*/
|
|
622
|
+
extraTips?: {
|
|
623
|
+
label: string | Record<Lang, string>;
|
|
624
|
+
value: string | Record<Lang, string>;
|
|
625
|
+
}[];
|
|
626
|
+
};
|
|
627
|
+
declare class Error extends Plugin {
|
|
628
|
+
player: Player$0;
|
|
629
|
+
icons: {
|
|
630
|
+
error: HTMLElement;
|
|
631
|
+
};
|
|
632
|
+
langText: {
|
|
633
|
+
refresh: string;
|
|
634
|
+
errorTip: string;
|
|
635
|
+
};
|
|
636
|
+
config: ErrorConfig;
|
|
637
|
+
private _error?;
|
|
638
|
+
static get pluginName(): string;
|
|
639
|
+
static get defaultConfig(): {
|
|
640
|
+
showErrorImg: boolean;
|
|
641
|
+
showErrorTip: boolean;
|
|
642
|
+
showRefresh: boolean;
|
|
643
|
+
errorTipsText: string;
|
|
644
|
+
extraTips: never[];
|
|
645
|
+
position: string;
|
|
646
|
+
};
|
|
647
|
+
get _errorTip(): string;
|
|
648
|
+
afterCreate(): void;
|
|
649
|
+
registerIcons(): {
|
|
650
|
+
error: {
|
|
651
|
+
icon: any;
|
|
652
|
+
class: string;
|
|
653
|
+
};
|
|
654
|
+
};
|
|
655
|
+
updateLang(): void;
|
|
656
|
+
showError(error: VeError | XGError): void;
|
|
657
|
+
hideError(): void;
|
|
658
|
+
destroy(): void;
|
|
659
|
+
render(): string;
|
|
660
|
+
private _focus;
|
|
661
|
+
private _initIcons;
|
|
662
|
+
private _initEvents;
|
|
663
|
+
private _renderText;
|
|
664
|
+
private _renderExtraTips;
|
|
665
|
+
private _handleRefresh;
|
|
666
|
+
private _renderRefresh;
|
|
667
|
+
}
|
|
668
|
+
/**
|
|
669
|
+
* @list option
|
|
670
|
+
* @kind property
|
|
671
|
+
*/
|
|
672
|
+
interface DefinitionConfig {
|
|
673
|
+
/** {zh}
|
|
674
|
+
* @brief 等待超时的时间阈值,单位为 ms。等待超过该值,会抛出 `DEFINITION_FALLBACK` 事件,如果 `needFallback` 为 `true` 则会提示清晰度降级。
|
|
675
|
+
* @default 5000
|
|
676
|
+
*/
|
|
677
|
+
longWaitingTime?: number;
|
|
678
|
+
/** {zh}
|
|
679
|
+
* @brief 是否开启清晰度降级。
|
|
680
|
+
* @default false
|
|
681
|
+
*/
|
|
682
|
+
needFallback?: boolean;
|
|
683
|
+
/** {zh}
|
|
684
|
+
* @brief 降级顺序,按照数组顺序依次降级,数组中的元素与 playlist 中的 definition 相对应。
|
|
685
|
+
* @default "['uhd', 'hd', 'sd', 'ld', 'ao']"
|
|
686
|
+
*/
|
|
687
|
+
demotePriority?: string[];
|
|
688
|
+
}
|
|
689
|
+
interface VePlayerBaseOptions extends Omit<PlayerOptions, "autoplay" | "i18n"> {
|
|
690
|
+
/** {zh}
|
|
691
|
+
* @brief 指定播放器容器 ID,VePlayer 将被插入在该容器中。id 和 el 需至少传入 1 个。如果同时传入,则优先将播放器插入 id 容器中。
|
|
692
|
+
* @default 'veplayer'
|
|
693
|
+
*/
|
|
694
|
+
id?: string;
|
|
695
|
+
/** {zh}
|
|
696
|
+
* @brief 指定播放器容器元素,VePlayer 将被插入在该容器中。id 和 el 需至少传入 1 个。如果同时传入,则优先将播放器插入 id 容器中。
|
|
697
|
+
* @default 无
|
|
698
|
+
*/
|
|
699
|
+
el?: HTMLElement;
|
|
700
|
+
/** {zh}
|
|
701
|
+
* @brief 设置播放器宽度,传入 number 类型参数则播放器内部默认添加单位px,传入 string 类型参数则直接赋值给播放器容器 width 样式属性。
|
|
702
|
+
* @default '100%'
|
|
703
|
+
*/
|
|
704
|
+
width?: number | string;
|
|
705
|
+
/** {zh}
|
|
706
|
+
* @brief 设置播放器高度,传入 number 类型参数则播放器内部默认添加单位px,传入 string 类型参数则直接赋值给播放器容器 height 样式属性。
|
|
707
|
+
* @default '100%'
|
|
708
|
+
*/
|
|
709
|
+
height?: number | string;
|
|
710
|
+
/** {zh}
|
|
711
|
+
* @brief 为播放器配置直播拉流地址。您可手动拼接或使用地址生成器生成拉流地址,生成方法请参见[生成直播地址](https://www.volcengine.com/docs/6469/107759)。url 和 playList 需至少传入 1 个。
|
|
712
|
+
* @default 无
|
|
713
|
+
*/
|
|
714
|
+
url?: string;
|
|
715
|
+
/** {zh}
|
|
716
|
+
* @brief 为播放器配置直播拉流地址列表。url 和 playlist 需至少传入 1 个。
|
|
717
|
+
* @default 无
|
|
718
|
+
*/
|
|
719
|
+
playlist?: ExposedSource[];
|
|
720
|
+
/** {zh}
|
|
721
|
+
* @brief 当存在多个直播线路时,为播放器设置默认直播线路,不传则默认列表第一个。
|
|
722
|
+
* @default 无
|
|
723
|
+
*/
|
|
724
|
+
defaultSource?: string;
|
|
725
|
+
/** {zh}
|
|
726
|
+
* @brief 为播放器设置默认直播清晰度,不传则默认列表第一个。
|
|
727
|
+
* @default 无
|
|
728
|
+
*/
|
|
729
|
+
defaultDefinition?: string;
|
|
730
|
+
/** {zh}
|
|
731
|
+
* @brief 为播放器设置备路拉流地址,支持设置多个备路拉流地址,在 `maxFallbackRound` 大于 `0` 时有效。当您使用配置的直播拉流地址拉流失败时,会在直播地址和备路直播地址之间循环拉流,直到拉流成功。
|
|
732
|
+
* @default 无
|
|
733
|
+
*/
|
|
734
|
+
fallbackUrls?: string[];
|
|
735
|
+
/** {zh}
|
|
736
|
+
* @brief 为播放器设置拉流失败时循环拉流的最大次数。
|
|
737
|
+
* @default 0
|
|
738
|
+
*/
|
|
739
|
+
maxFallbackRound?: number;
|
|
740
|
+
/** {zh}
|
|
741
|
+
* @brief 为播放器设置解码方式。
|
|
742
|
+
* @listtip
|
|
743
|
+
* 开启软解后,播放器会使用浏览器的软件解码器来解码视频流。软解模式具有较高的兼容性,适用于各种设备和浏览器,但依赖设备 CPU,在高分辨率或高码率视频播放时会出现卡顿或延迟。建议在以下场景开启软解:
|
|
744
|
+
* 1. 部分安卓浏览器中播放器被劫持,部分功能将不可见,可开启软解;
|
|
745
|
+
* 2. 移动端浏览器不支持 flv 格式,如果需要播放该格式的视频,可开启软解;
|
|
746
|
+
* 3. 部分浏览器不支持 H.265 编码格式,如果需要播放该编码格式的视频,请开启软解。
|
|
747
|
+
* @default 'hardware'
|
|
748
|
+
*/
|
|
749
|
+
decodeType?: DecodeType;
|
|
750
|
+
/** {zh}
|
|
751
|
+
* @brief 为播放器设置视频的实际编码格式。如果您在degradation 设置了 `soft-first` 属性(即硬解不支持时降级软解),建议您传入该参数,省去探测实际编码格式的操作。
|
|
752
|
+
* @default 'h264'
|
|
753
|
+
*/
|
|
754
|
+
codec?: Codec;
|
|
755
|
+
/** {zh}
|
|
756
|
+
* @brief 为播放器设置是否开启 H.265 兼容模式。在 H.265 兼容模式下,播放器会优先使用硬解来解码 H.265 直播流。如果设备或浏览器不支持 H.265 硬解,则自动降级为 H.265 软解。
|
|
757
|
+
* @default 'soft-first'
|
|
758
|
+
*/
|
|
759
|
+
degradation?: Degradation | boolean;
|
|
760
|
+
/** {zh}
|
|
761
|
+
* @brief 为播放器设置封面图 URL。
|
|
762
|
+
* @default 无
|
|
763
|
+
*/
|
|
764
|
+
poster?: string;
|
|
765
|
+
/** {zh}
|
|
766
|
+
* @brief 为播放器设置初始显示语言,语言包不存在的情况下默认显示 'en' 语言包 。默认值为 `document.documentElement.getAttribute('lang') || navigator.language || 'zh-cn'`
|
|
767
|
+
* @default -
|
|
768
|
+
*/
|
|
769
|
+
lang?: Lang;
|
|
770
|
+
/** {zh}
|
|
771
|
+
* @brief 为播放器设置自定义的多语言词典,可设置每个语种的词典,格式为 { texts: { [key: string]: Object; } }。<br>
|
|
772
|
+
* 例如,{ texts: { 'zh-cn': { PIP: '画中画' }, en: { PIP: 'pip' } }} ,格式请参考[默认词典](https://www.volcengine.com/docs/6469/127529)。
|
|
773
|
+
* @default 无
|
|
774
|
+
*/
|
|
775
|
+
i18n?: {
|
|
776
|
+
texts: Record<Lang, Record<string, string>>;
|
|
777
|
+
};
|
|
778
|
+
/** {zh}
|
|
779
|
+
* @brief 为播放器设置是否自动播放, `muted` 设置为 `true` 为静音自动播放。
|
|
780
|
+
* @default { muted: true }
|
|
781
|
+
* @type {{ muted: boolean } | boolean}
|
|
782
|
+
*/
|
|
783
|
+
autoplay?: {
|
|
784
|
+
muted?: boolean;
|
|
785
|
+
} | boolean;
|
|
786
|
+
/** {zh}
|
|
787
|
+
* @brief 为播放器设置默认音量,取值范围 [0,1]。
|
|
788
|
+
* @default 0.6
|
|
789
|
+
*/
|
|
790
|
+
volume?: number;
|
|
791
|
+
/** {zh}
|
|
792
|
+
* @brief 为播放器设置是否显示画中画功能按钮。
|
|
793
|
+
* - `true`:显示;
|
|
794
|
+
* - `false`:不显示。
|
|
795
|
+
* @default false
|
|
796
|
+
*/
|
|
797
|
+
pip?: boolean;
|
|
798
|
+
/**{zh}
|
|
799
|
+
* @brief 为播放器设置是否显示全屏功能按钮,并进行全屏功能设置。
|
|
800
|
+
* - `true`:显示;
|
|
801
|
+
* - `false`:不显示。
|
|
802
|
+
* @default -
|
|
803
|
+
*/
|
|
804
|
+
fullscreen?: boolean | Fullscreen;
|
|
805
|
+
/** {zh}
|
|
806
|
+
* @brief 为播放器设置报错信息,支持配置播放异常时,播放器显示的异常文案、图片,以及是否提供刷新按钮等。
|
|
807
|
+
* @default -
|
|
808
|
+
*/
|
|
809
|
+
error?: ErrorConfig;
|
|
810
|
+
/** {zh}
|
|
811
|
+
* @brief 为播放器设置清晰度的相关配置。
|
|
812
|
+
* @default -
|
|
813
|
+
*/
|
|
814
|
+
definition?: DefinitionConfig;
|
|
815
|
+
/** {zh}
|
|
816
|
+
* @brief 为播放器设置是否显示控制栏。
|
|
817
|
+
* - `true`: 显示;
|
|
818
|
+
* - `false`: 不显示
|
|
819
|
+
* @default true
|
|
820
|
+
*/
|
|
821
|
+
controls?: boolean | {
|
|
822
|
+
[propName: string]: any;
|
|
823
|
+
};
|
|
824
|
+
/** {zh}
|
|
825
|
+
* @brief 为播放器设置**清晰度选择**或**线路选择**时的**选择面板样式**,仅在移动端有效。
|
|
826
|
+
* @default 'bottom'
|
|
827
|
+
*/
|
|
828
|
+
listType?: ListType;
|
|
829
|
+
/** {zh}
|
|
830
|
+
* @brief 为播放器设置是否启用内联播放模式。playsinline 属性是 HTML5 视频标签的一个属性,用于指定视频是否应在页面文档内播放。
|
|
831
|
+
* - `true`:启用,表示视频将在页面文档内播放;
|
|
832
|
+
* - `false`:停用,默认浏览器播放行为。
|
|
833
|
+
* 该配置项只在移动端生效,当取值为 true 的时候,会在初始化 video 或 audio 对象的时候,将 playsinline、webkit-playsinline、x5-playsinline 三个属性设置为 true,请参考 [New Policies for iOS](https://webkit.org/blog/6784/new-video-policies-for-ios/) 了解内联模式相关知识。
|
|
834
|
+
* @listtip
|
|
835
|
+
* iOS 10 及以上系统 Safari 浏览器支持配置内联播放模式;</br>
|
|
836
|
+
* iOS 10 以下系统 Safari 浏览器不支持配置内联播放模式 ,默认播放即进入系统全屏。
|
|
837
|
+
* @default true
|
|
838
|
+
*/
|
|
839
|
+
playsinline?: boolean;
|
|
840
|
+
/** {zh}
|
|
841
|
+
* @brief 为播放器设置 video 标签扩展属性,初始化时会设置在 videoElement 或 audioElement 对象上,请参考 [HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#properties) 查看其支持的属性配置。
|
|
842
|
+
* @default 无
|
|
843
|
+
*/
|
|
844
|
+
videoAttributes?: {
|
|
845
|
+
[propName: string]: any;
|
|
846
|
+
};
|
|
847
|
+
/** {zh}
|
|
848
|
+
* @brief 为播放器设置是否启用流式布局,启用流式布局后播放器会根据屏幕的宽度进行调整,保持在不同屏幕尺寸上都有良好的显示效果。
|
|
849
|
+
* - `true`:启用
|
|
850
|
+
* - `false`:停用
|
|
851
|
+
* @listtip
|
|
852
|
+
* 启用流式布局时:
|
|
853
|
+
* 如果 `width` 和 `height` 是 `Number` 类型,则按照其数值计算播放器宽高比;
|
|
854
|
+
* 如果 `width` 和 `height` 不是 `Number` 类型,默认使用 16:9 比例。
|
|
855
|
+
* @default false
|
|
856
|
+
*/
|
|
857
|
+
fluid?: boolean;
|
|
858
|
+
/** {zh}
|
|
859
|
+
* @brief 为播放器设置尺寸适配方式,在视频资源初始化之后,根据获取到的 videoWidth 和 videoHeight 值对播放器容器宽高比例进行调整,可选项有:
|
|
860
|
+
* - `fixed`: 保持容器宽/高,不做适配;
|
|
861
|
+
* - `fixWidth`: 保持容器宽度,适配高度;
|
|
862
|
+
* - `fixHeight`: 保持容器高度,适配宽度。
|
|
863
|
+
*
|
|
864
|
+
* @default 'fixed'
|
|
865
|
+
*/
|
|
866
|
+
fitVideoSize?: "fixWidth" | "fixHeight" | "fixed";
|
|
867
|
+
/** {zh}
|
|
868
|
+
* @brief 为播放器设置视频画面填充模式,可选项有:
|
|
869
|
+
* - `fillwidth`: 填充宽度,高度溢出则裁剪高度;
|
|
870
|
+
* - `fillHeight`: 填充高度,宽度溢出则裁剪宽度;
|
|
871
|
+
* - `fill`: 拉伸视频以填充容器;
|
|
872
|
+
* - `cover`: 保持其宽高比的同时填充元素的整个内容框;
|
|
873
|
+
* - `auto`: 使用浏览器默认的视频画面填充模式。
|
|
874
|
+
* @default 'auto'
|
|
875
|
+
*/
|
|
876
|
+
videoFillMode?: "auto" | "fillHeight" | "fillWidth" | "fill" | "cover";
|
|
877
|
+
/** {zh}
|
|
878
|
+
* @brief 是否开启画面和控制栏分离模式。设置为开启时,控制栏将会常驻,与视频画面不重叠。
|
|
879
|
+
* - `true`:开启
|
|
880
|
+
* - `false`:关闭
|
|
881
|
+
* @default false
|
|
882
|
+
*/
|
|
883
|
+
marginControls?: boolean;
|
|
884
|
+
/** {zh}
|
|
885
|
+
* @brief 启用微信同层播放。
|
|
886
|
+
* @default 无
|
|
887
|
+
*/
|
|
888
|
+
"x5-video-player-type"?: string;
|
|
889
|
+
/** {zh}
|
|
890
|
+
* @brief 是否启用微信全屏播放模式。
|
|
891
|
+
* - `true`:启用
|
|
892
|
+
* - `false`:停用
|
|
893
|
+
* @default 无
|
|
894
|
+
*/
|
|
895
|
+
"x5-video-player-fullscreen"?: boolean;
|
|
896
|
+
/** {zh}
|
|
897
|
+
* @brief 微信横竖屏控制,支持如下取值:
|
|
898
|
+
* - `landscape`:横屏
|
|
899
|
+
* - `portrait`:竖屏
|
|
900
|
+
* - `landscape|portrait`:跟随手机自动旋转
|
|
901
|
+
* @default 无
|
|
902
|
+
*/
|
|
903
|
+
"x5-video-orientation"?: "landscape" | "portrait" | "landscape|portrait";
|
|
904
|
+
/** {zh}
|
|
905
|
+
* @brief 为播放器配置关键点样式。
|
|
906
|
+
* @default 无
|
|
907
|
+
* @hidden 直播目前没用到
|
|
908
|
+
*/
|
|
909
|
+
commonStyle?: CommonStyle;
|
|
910
|
+
/** {zh}
|
|
911
|
+
* @brief 自定义插件列表。
|
|
912
|
+
* @default 无
|
|
913
|
+
*/
|
|
914
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
915
|
+
plugins?: any[];
|
|
916
|
+
/** {zh}
|
|
917
|
+
* @hidden
|
|
918
|
+
*/
|
|
919
|
+
preparePlugins?: PreparePlugins;
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* @list option
|
|
923
|
+
* @kind property
|
|
924
|
+
*/
|
|
925
|
+
interface Fullscreen {
|
|
926
|
+
/** {zh}
|
|
927
|
+
* @brief 切换全屏时,是否旋转为横屏播放,通常在移动端使用。如果开启横屏播放,切换全屏时,将在竖屏状态下把播放器旋转 90 度,实现横屏效果。该配置优先级高于 useCssFullscreen。
|
|
928
|
+
* `true`:使用旋转横屏;
|
|
929
|
+
* `false`:不使用旋转横屏。
|
|
930
|
+
* @default false
|
|
931
|
+
*/
|
|
932
|
+
rotateFullscreen?: boolean;
|
|
933
|
+
/** {zh}
|
|
934
|
+
* @brief 是否使用页面全屏代替系统全屏功能。
|
|
935
|
+
* `true`:页面全屏;
|
|
936
|
+
* `false`:系统全屏。
|
|
937
|
+
* @default false
|
|
938
|
+
*/
|
|
939
|
+
useCssFullscreen?: boolean;
|
|
940
|
+
/**{zh}
|
|
941
|
+
* 全屏的时候是否显示右上角返回按钮,通常在移动端开启。
|
|
942
|
+
* `true`:显示;
|
|
943
|
+
* `false`:不显示。
|
|
944
|
+
* @default false
|
|
945
|
+
*/
|
|
946
|
+
needBackIcon?: boolean;
|
|
947
|
+
}
|
|
948
|
+
/**
|
|
949
|
+
* @list option
|
|
950
|
+
* @kind property
|
|
951
|
+
* @hidden
|
|
952
|
+
*/
|
|
953
|
+
interface CommonStyle {
|
|
954
|
+
/** {zh}
|
|
955
|
+
* @brief 进度条底色
|
|
956
|
+
* @default 无
|
|
957
|
+
*/
|
|
958
|
+
progressColor?: string;
|
|
959
|
+
/** {zh}
|
|
960
|
+
* @brief 播放完成部分进度条底色
|
|
961
|
+
* @default 无
|
|
962
|
+
*/
|
|
963
|
+
playedColor?: string;
|
|
964
|
+
/** {zh}
|
|
965
|
+
* @brief 缓存部分进度条底色
|
|
966
|
+
* @default 无
|
|
967
|
+
*/
|
|
968
|
+
cachedColor?: string;
|
|
969
|
+
/** {zh}
|
|
970
|
+
* @brief 进度条滑块样式
|
|
971
|
+
* @default 无
|
|
972
|
+
*/
|
|
973
|
+
sliderBtnStyle?: {
|
|
974
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
975
|
+
[propName: string]: any;
|
|
976
|
+
};
|
|
977
|
+
/** {zh}
|
|
978
|
+
* @brief 音量颜色
|
|
979
|
+
* @default 无
|
|
980
|
+
*/
|
|
981
|
+
volumeColor?: string;
|
|
982
|
+
}
|
|
983
|
+
type PrepareResult = {
|
|
984
|
+
options?: Partial<VePlayerBaseOptions>;
|
|
985
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
986
|
+
plugins?: any[];
|
|
987
|
+
};
|
|
988
|
+
type PreparePlugins = (url: string) => Promise<PrepareResult> | undefined;
|
|
989
|
+
/**
|
|
990
|
+
* @detail option
|
|
991
|
+
* @brief 视频的实际编码格式。如果您在degradation 设置了 SoftFirst 属性(即硬解不支持降级软解),建议您传入该参数,省去探测实际编码格式的操作。
|
|
992
|
+
*/
|
|
993
|
+
declare enum Codec {
|
|
994
|
+
/** {zh}
|
|
995
|
+
* @brief h265 编码格式
|
|
996
|
+
*/
|
|
997
|
+
H265 = "h265",
|
|
998
|
+
/** {zh}
|
|
999
|
+
* @brief h264 编码格式
|
|
1000
|
+
*/
|
|
1001
|
+
H264 = "h264"
|
|
1002
|
+
}
|
|
1003
|
+
/**
|
|
1004
|
+
* @detail option
|
|
1005
|
+
* @brief 是否开启 H.265 兼容模式。在 H.265 兼容模式下,播放器会优先使用硬解来解码 H.265 直播流。如果设备或浏览器不支持 H.265 硬解,则自动降级为 H.265 软解。
|
|
1006
|
+
*/
|
|
1007
|
+
declare enum Degradation {
|
|
1008
|
+
/** {zh}
|
|
1009
|
+
* @brief 硬解不支持降级到软解
|
|
1010
|
+
*/
|
|
1011
|
+
SoftFirst = "soft-first",
|
|
1012
|
+
/** {zh}
|
|
1013
|
+
* @brief 硬解不支持降级到h264
|
|
1014
|
+
* @hidden
|
|
1015
|
+
*/
|
|
1016
|
+
H264First = "h264-first"
|
|
1017
|
+
}
|
|
1018
|
+
/**
|
|
1019
|
+
* @detail option
|
|
1020
|
+
* @brief 解码方式。
|
|
1021
|
+
* @example
|
|
1022
|
+
* ```js
|
|
1023
|
+
* VePlayer.createLivePlayer({
|
|
1024
|
+
* height: 360,
|
|
1025
|
+
* url: options.url,
|
|
1026
|
+
* }).then(function (veplayer) {
|
|
1027
|
+
* veplayer.on(VePlayer.live.Events.CANPLAY, function () {
|
|
1028
|
+
* console.log('监听到 canplay 事件')
|
|
1029
|
+
* });
|
|
1030
|
+
* }).catch(error => {
|
|
1031
|
+
* console.log('创建播放器失败,报错信息:', error);
|
|
1032
|
+
* });;
|
|
1033
|
+
* ```
|
|
1034
|
+
*/
|
|
1035
|
+
declare enum DecodeType {
|
|
1036
|
+
/** {zh}
|
|
1037
|
+
* @brief 软解
|
|
1038
|
+
*/
|
|
1039
|
+
Software = "software",
|
|
1040
|
+
/** {zh}
|
|
1041
|
+
* @brief 硬解
|
|
1042
|
+
*/
|
|
1043
|
+
Hardware = "hardware"
|
|
1044
|
+
}
|
|
1045
|
+
type Constructor<T> = new (...args: any[]) => T;
|
|
1046
|
+
declare class VePlayerBase {
|
|
1047
|
+
protected readonly _player: XGPlayer;
|
|
1048
|
+
private readonly _sourceManager;
|
|
1049
|
+
private readonly _preparePlugins?;
|
|
1050
|
+
private _previousPrepareResult?;
|
|
1051
|
+
private _i18nManager;
|
|
1052
|
+
private _events;
|
|
1053
|
+
private _errorCallback;
|
|
1054
|
+
/**
|
|
1055
|
+
* @hidden
|
|
1056
|
+
*/
|
|
1057
|
+
constructor(options?: VePlayerBaseOptions);
|
|
1058
|
+
/**
|
|
1059
|
+
* @brief 获取视频的就绪状态,其状态枚举值、枚举名称和说明如下:
|
|
1060
|
+
* - `0`:HAVE_NOTHING,没有关于媒体资源的可用信息
|
|
1061
|
+
* - `1`:HAVE_METADATA,已检索到足够多的媒体资源来初始化元数据, 快进/快退不会引发异常
|
|
1062
|
+
* - `2`:HAVE_CURRENT_DATA,当前播放位置的数据可用,但不足以播放下一帧
|
|
1063
|
+
* - `3`:HAVE_FUTURE_DATA,当前播放位置以及未来至少一小段时间的数据是可用的(至少有两帧以上的数据)
|
|
1064
|
+
* - `4`:HAVE_ENOUGH_DATA,有足够的数据可用,并且下载速率足够,媒体可以不间断地播放到最后
|
|
1065
|
+
*/
|
|
1066
|
+
get readyState(): 0 | 2 | 1 | 4 | 3;
|
|
1067
|
+
/**
|
|
1068
|
+
* @brief 获取当前已缓冲的时间范围。
|
|
1069
|
+
*/
|
|
1070
|
+
get buffered(): TimeRanges;
|
|
1071
|
+
/**
|
|
1072
|
+
* @brief 获取已经播放的音频/视频的时间范围。
|
|
1073
|
+
*/
|
|
1074
|
+
get played(): TimeRanges;
|
|
1075
|
+
/**
|
|
1076
|
+
* @brief 设置/获取视频当前的播放时间, 单位为 s。
|
|
1077
|
+
*/
|
|
1078
|
+
get cumulateTime(): number;
|
|
1079
|
+
/**
|
|
1080
|
+
* @brief 获取是否处于焦点状态,处于焦点状态会显示控制栏。
|
|
1081
|
+
*/
|
|
1082
|
+
get isFocused(): boolean;
|
|
1083
|
+
/**
|
|
1084
|
+
* @brief 获取播放器是否处于全屏状态。
|
|
1085
|
+
*/
|
|
1086
|
+
get isFullscreen(): boolean;
|
|
1087
|
+
/**
|
|
1088
|
+
* @brief 获取播放器是否处于网页全屏状态。
|
|
1089
|
+
*/
|
|
1090
|
+
get isCssFullscreen(): boolean;
|
|
1091
|
+
/**
|
|
1092
|
+
* @brief 获取视频的网络状态,其状态枚举值、枚举名称和说明如下:
|
|
1093
|
+
* - `0`:NETWORK_EMPTY,目前还没有数据,readyState 的值是 HAVE_NOTHING
|
|
1094
|
+
* - `1`:NETWORK_IDLE,HTMLMediaElement 处于活动状态并已选择资源,但未使用网络
|
|
1095
|
+
* - `2`:NETWORK_LOADING,浏览器正在下载 HTMLMediaElement 数据
|
|
1096
|
+
* - `3`:NETWORK_NO_SOURCE,未找到 HTMLMediaElement src。
|
|
1097
|
+
*/
|
|
1098
|
+
get networkState(): 0 | 2 | 1 | 3;
|
|
1099
|
+
/**
|
|
1100
|
+
* @brief 获取当前视频是否处于暂停状态。
|
|
1101
|
+
*/
|
|
1102
|
+
get paused(): boolean;
|
|
1103
|
+
/**
|
|
1104
|
+
* @brief 获取当前视频是否播放结束。
|
|
1105
|
+
*/
|
|
1106
|
+
get ended(): boolean;
|
|
1107
|
+
/**
|
|
1108
|
+
* @brief 获取播放器当前所处的状态,其状态枚举值、枚举名称和说明如下:
|
|
1109
|
+
* - `0`:ERROR,播放出现错误
|
|
1110
|
+
* - `1`:INITIAL,初始化
|
|
1111
|
+
* - `2`:READY,配置/事件/插件等均已经初始化/绑定/实例化完成
|
|
1112
|
+
* - `3`:ATTACHING,进入媒体对象挂载阶段
|
|
1113
|
+
* - `4`:ATTACHED,媒体对象已经挂载到了 DOM 中
|
|
1114
|
+
* - `5`:NOTALLOW,播放被阻止
|
|
1115
|
+
* - `6`:RUNNING,已经成功起播进入播放流程
|
|
1116
|
+
* - `7`:ENDED,播放结束
|
|
1117
|
+
* - `8`:DESTROYED,播放器实例处于已被销毁
|
|
1118
|
+
*/
|
|
1119
|
+
get state(): number;
|
|
1120
|
+
/**
|
|
1121
|
+
* 获取当前播放视频的拉流地址。
|
|
1122
|
+
*/
|
|
1123
|
+
get url(): string | undefined;
|
|
1124
|
+
/**
|
|
1125
|
+
* @brief 获取当播放视频的线路名称唯一标识(name)。
|
|
1126
|
+
*/
|
|
1127
|
+
get source(): string | undefined;
|
|
1128
|
+
/**
|
|
1129
|
+
* @brief 获取当前播放视频的清晰度唯一标识(definition)。
|
|
1130
|
+
*/
|
|
1131
|
+
get definition(): string;
|
|
1132
|
+
/**
|
|
1133
|
+
* @brief 获取和设置播放器的跨域配置信息,更多信息参考 [crossorigin](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) 属性介绍。
|
|
1134
|
+
*/
|
|
1135
|
+
get crossOrigin(): string;
|
|
1136
|
+
/**
|
|
1137
|
+
* @brief 获取和设置播放器的跨域配置信息,更多信息参考 [crossorigin](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/crossorigin) 属性介绍。
|
|
1138
|
+
*/
|
|
1139
|
+
set crossOrigin(crossOrigin: string);
|
|
1140
|
+
/**
|
|
1141
|
+
* @brief 获取和设置视频的音量,取值范围为 [0,1]。
|
|
1142
|
+
*/
|
|
1143
|
+
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
1144
|
+
get volume(): number;
|
|
1145
|
+
/**
|
|
1146
|
+
* @brief 获取和设置视频的音量,取值范围为 [0,1]。
|
|
1147
|
+
*/
|
|
1148
|
+
set volume(volume: number);
|
|
1149
|
+
/**
|
|
1150
|
+
* @brief 获取和设置视频静音状态。
|
|
1151
|
+
* - `true`:静音
|
|
1152
|
+
* - `false`:非静音
|
|
1153
|
+
*/
|
|
1154
|
+
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
1155
|
+
get muted(): boolean;
|
|
1156
|
+
/**
|
|
1157
|
+
* @brief 获取和设置视频静音状态。
|
|
1158
|
+
* - `true`:静音
|
|
1159
|
+
* - `false`:非静音
|
|
1160
|
+
*/
|
|
1161
|
+
set muted(isMuted: boolean);
|
|
1162
|
+
/**
|
|
1163
|
+
* @brief 获取和设置当前语言。
|
|
1164
|
+
*/
|
|
1165
|
+
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
1166
|
+
get lang(): "zh-cn" | "en" | string;
|
|
1167
|
+
/**
|
|
1168
|
+
* @brief 获取和设置当前语言。
|
|
1169
|
+
*/
|
|
1170
|
+
set lang(lang: "zh-cn" | "en" | string);
|
|
1171
|
+
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
1172
|
+
protected get _src(): string;
|
|
1173
|
+
/**
|
|
1174
|
+
* @hidden
|
|
1175
|
+
*/
|
|
1176
|
+
static create<T extends VePlayerBase>(options?: VePlayerBaseOptions, Constructor?: Constructor<T>): Promise<T>;
|
|
1177
|
+
/**
|
|
1178
|
+
* @brief 调用此方法切换拉流地址、线路、清晰度。
|
|
1179
|
+
* @param target 目标地址,可以是播放地址,也可以是线路和清晰度
|
|
1180
|
+
* @param options 更多配置信息
|
|
1181
|
+
*/
|
|
1182
|
+
switch(target: string | {
|
|
1183
|
+
/**
|
|
1184
|
+
* @brief 清晰度的唯一标识。
|
|
1185
|
+
* @default 无
|
|
1186
|
+
*/
|
|
1187
|
+
definition?: string;
|
|
1188
|
+
/**
|
|
1189
|
+
* @brief 线路的唯一标识。
|
|
1190
|
+
* @default 无
|
|
1191
|
+
*/
|
|
1192
|
+
source?: string;
|
|
1193
|
+
}, options?: {
|
|
1194
|
+
/**
|
|
1195
|
+
* @brief 清晰度 definition 配置无效时,是否降级到播放列表第一个清晰度地址。
|
|
1196
|
+
* @default false
|
|
1197
|
+
*
|
|
1198
|
+
*/
|
|
1199
|
+
fallbackToFirstDefinition?: boolean;
|
|
1200
|
+
}): Promise<ExposedDefinition>;
|
|
1201
|
+
/**
|
|
1202
|
+
* @brief 调用此方法更新拉流地址列表。
|
|
1203
|
+
* @param playlist 要更新的播放列表。
|
|
1204
|
+
* @param target 更新后默认播放的资源。
|
|
1205
|
+
*/
|
|
1206
|
+
updatePlaylist(playlist: ExposedSource[] | string, target?: string | {
|
|
1207
|
+
/**
|
|
1208
|
+
* @brief 清晰度唯一标识。
|
|
1209
|
+
* @default 无
|
|
1210
|
+
*
|
|
1211
|
+
*/
|
|
1212
|
+
definition?: string;
|
|
1213
|
+
/**
|
|
1214
|
+
* @brief 线路的唯一标识。
|
|
1215
|
+
* @default 无
|
|
1216
|
+
*
|
|
1217
|
+
*/
|
|
1218
|
+
source?: string;
|
|
1219
|
+
}): Promise<void>;
|
|
1220
|
+
// TODO: 等西瓜播放器完善错误码后增加函数重载以提供更好的类型
|
|
1221
|
+
/**
|
|
1222
|
+
* @brief 调用此方法监听指定事件,事件处理函数只执行一次。
|
|
1223
|
+
* @param event 表示事件的名称。
|
|
1224
|
+
* @param callback 表示事件的名称。
|
|
1225
|
+
*/
|
|
1226
|
+
once(event: string, callback: (data?: any) => any): void;
|
|
1227
|
+
/**
|
|
1228
|
+
* @brief 调用此方法解绑或移除指定事件的事件监听。
|
|
1229
|
+
* @param event 表示事件的名称。
|
|
1230
|
+
* @param callback 表示事件的名称。
|
|
1231
|
+
*/
|
|
1232
|
+
off(event: string, callback: (data?: any) => any): void;
|
|
1233
|
+
/**
|
|
1234
|
+
* @brief 调用此方法触发指定事件。
|
|
1235
|
+
* @param event 表示事件的名称。
|
|
1236
|
+
* @param data 事件信息。
|
|
1237
|
+
*/
|
|
1238
|
+
emit(event: string, data?: any): void;
|
|
1239
|
+
/**
|
|
1240
|
+
* @brief 调用此方法解绑或移除指定事件的所有事件监听。
|
|
1241
|
+
*/
|
|
1242
|
+
offAll(): void;
|
|
1243
|
+
/**
|
|
1244
|
+
* @brief 调用此方法监听指定事件。
|
|
1245
|
+
* @param event 事件。
|
|
1246
|
+
* @param callback 事件回调。
|
|
1247
|
+
*/
|
|
1248
|
+
on(event: string, callback: (data?: any) => any): void;
|
|
1249
|
+
/**
|
|
1250
|
+
* @brief 调用此方法开始播放 。
|
|
1251
|
+
*/
|
|
1252
|
+
play(): any;
|
|
1253
|
+
/**
|
|
1254
|
+
* @brief 调用此方法暂停播放。
|
|
1255
|
+
*/
|
|
1256
|
+
pause(): void;
|
|
1257
|
+
/**
|
|
1258
|
+
* @brief 调用此方法打开画中画。
|
|
1259
|
+
*/
|
|
1260
|
+
requestPIP(): void;
|
|
1261
|
+
/**
|
|
1262
|
+
* @brief 调用此方法关闭画中画。
|
|
1263
|
+
*/
|
|
1264
|
+
exitPIP(): void;
|
|
1265
|
+
/**
|
|
1266
|
+
* @brief 调用此方法重新拉流。
|
|
1267
|
+
*/
|
|
1268
|
+
retry(): void;
|
|
1269
|
+
/**
|
|
1270
|
+
* @brief 播放器获取焦点,调用该方法 `veplayer.isFocused` 将会变为 `true`,并触发 `PLAYER_FOCUS` 事件。
|
|
1271
|
+
* @param data 播放器获取焦点配置信息。
|
|
1272
|
+
*/
|
|
1273
|
+
focus(data?: {
|
|
1274
|
+
/**
|
|
1275
|
+
* @brief 是否需要自动失焦,默认为 true,即经过 delay 时长之后,会自动调用 blur() 进行失焦。
|
|
1276
|
+
* @default true
|
|
1277
|
+
*/
|
|
1278
|
+
autoHide?: boolean;
|
|
1279
|
+
/**
|
|
1280
|
+
* @brief 自动失焦延迟时长,单位ms,autoHide 为 true 时生效。
|
|
1281
|
+
* @default 3000
|
|
1282
|
+
*/
|
|
1283
|
+
delay?: number;
|
|
1284
|
+
}): void;
|
|
1285
|
+
/**
|
|
1286
|
+
* @brief 播放器失去焦点,调用该方法 `veplayer.isFocused` 将会变为 `false`,并触发 `PLAYER_BLUR` 事件。
|
|
1287
|
+
* @param data 播放器失去焦点配置信息。
|
|
1288
|
+
*/
|
|
1289
|
+
blur(data?: {
|
|
1290
|
+
/**
|
|
1291
|
+
* @brief 播放器失焦是否忽略暂停状态,默认值是 true,即默认暂停的时候不取消播放器焦点状态。
|
|
1292
|
+
* @default false
|
|
1293
|
+
*/
|
|
1294
|
+
ignorePaused?: boolean;
|
|
1295
|
+
}): void;
|
|
1296
|
+
/**
|
|
1297
|
+
* @brief 调用此方法进入系统全屏状态。如果该方法调用的时候处于网页全屏状态会自动退出网页全屏,下发事件 `Events.FULLSCREEN_CHANGE`。
|
|
1298
|
+
* @param el 全屏作用的 DOM 节点。
|
|
1299
|
+
*/
|
|
1300
|
+
requestFullscreen(el?: HTMLElement): Promise<void>;
|
|
1301
|
+
/**
|
|
1302
|
+
* @brief 调用此方法退出系统全屏状态,调用该方法 `veplayer.isFullscreen` 将会变为 `false`,并触发 `Events.FULLSCREEN_CHANGE` 事件。
|
|
1303
|
+
* @param el 全屏作用的 DOM 节点。
|
|
1304
|
+
*/
|
|
1305
|
+
exitFullscreen(el?: HTMLElement): Promise<void>;
|
|
1306
|
+
/**
|
|
1307
|
+
* @brief 调用此方法进入网页样式全屏状态,播放器进入网页全屏,利用 CSS 模拟实现全屏效果。如果该接口调用的时候处于全屏状态,会自动退出全屏,下发事件 `Events.CSS_FULLSCREEN_CHANGE`。
|
|
1308
|
+
* @param el 全屏作用的 DOM 节点。
|
|
1309
|
+
*/
|
|
1310
|
+
requestCssFullscreen(el?: HTMLElement): void;
|
|
1311
|
+
/**
|
|
1312
|
+
* @brief 调用此方法退出网页样式全屏状态。 调用该方法 `veplayer.isFullscreen` 将会变为 `false`,并触发 `Events.CSS_FULLSCREEN_CHANGE` 事件。
|
|
1313
|
+
*/
|
|
1314
|
+
exitCssFullscreen(): void;
|
|
1315
|
+
/**
|
|
1316
|
+
* @brief 调用此方法在当前播放器上注册指定插件。
|
|
1317
|
+
* @param plugin 插件构造函数。
|
|
1318
|
+
* @param config 插件的配置列表。
|
|
1319
|
+
*/
|
|
1320
|
+
registerPlugin(plugin:
|
|
1321
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
1322
|
+
Function | {
|
|
1323
|
+
/**
|
|
1324
|
+
* @brief 插件构造函数。
|
|
1325
|
+
* @default 无
|
|
1326
|
+
*/
|
|
1327
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
1328
|
+
plugin: Function;
|
|
1329
|
+
/**
|
|
1330
|
+
* @brief 插件配置参数。
|
|
1331
|
+
* @default 无
|
|
1332
|
+
*/
|
|
1333
|
+
options: object;
|
|
1334
|
+
}, config?: {
|
|
1335
|
+
[propName: string]: any;
|
|
1336
|
+
}): any;
|
|
1337
|
+
/**
|
|
1338
|
+
* @brief 调用此方法在当前播放器上销毁/注销指定插件。
|
|
1339
|
+
* @param plugin 插件实例或者插件名称。
|
|
1340
|
+
*/
|
|
1341
|
+
unRegisterPlugin(plugin: any): void;
|
|
1342
|
+
/**
|
|
1343
|
+
* @brief 调用此接口显示指定插件图标。
|
|
1344
|
+
* @param pluginNames 插件名称
|
|
1345
|
+
*/
|
|
1346
|
+
showIcon(pluginNames: string[]): void;
|
|
1347
|
+
/**
|
|
1348
|
+
* @brief 调用此接口隐藏指定插件图标。
|
|
1349
|
+
* @param pluginNames 插件名称
|
|
1350
|
+
*/
|
|
1351
|
+
hideIcon(pluginNames: string[]): void;
|
|
1352
|
+
/**
|
|
1353
|
+
* @brief 调用此方法销毁播放器实例。
|
|
1354
|
+
*/
|
|
1355
|
+
destroy(): void;
|
|
1356
|
+
/**
|
|
1357
|
+
* @hidden
|
|
1358
|
+
*/
|
|
1359
|
+
prepare(url: string): Promise<{
|
|
1360
|
+
plugins: any[];
|
|
1361
|
+
options: Partial<VePlayerBaseOptions> | undefined;
|
|
1362
|
+
}>;
|
|
1363
|
+
private _handleFallback;
|
|
1364
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1365
|
+
private _transformEvent;
|
|
1366
|
+
private _switch;
|
|
1367
|
+
private _switchUrl;
|
|
1368
|
+
// 获取需要卸载和需要注册的播放插件
|
|
1369
|
+
private _diffPlugins;
|
|
1370
|
+
private _callBeforePlayerInitForUrl;
|
|
1371
|
+
}
|
|
1372
|
+
declare const enum State {
|
|
1373
|
+
Fetching = 0,
|
|
1374
|
+
Ready = 1,
|
|
1375
|
+
Error = 2
|
|
1376
|
+
}
|
|
1377
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1378
|
+
type Exports = Record<string, any>;
|
|
1379
|
+
interface Module {
|
|
1380
|
+
src: string;
|
|
1381
|
+
state: State;
|
|
1382
|
+
name: string;
|
|
1383
|
+
exports: Exports;
|
|
1384
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1385
|
+
error?: any;
|
|
1386
|
+
}
|
|
1387
|
+
type ModuleSystem = "esm" | "umd";
|
|
1388
|
+
interface LoaderOptions {
|
|
1389
|
+
baseUrl: string;
|
|
1390
|
+
}
|
|
1391
|
+
declare enum DynamicModule {
|
|
1392
|
+
BizVod = "biz:vod",
|
|
1393
|
+
BizLive = "biz:live",
|
|
1394
|
+
PluginFlv = "plugin:flv",
|
|
1395
|
+
PluginMp4 = "plugin:mp4",
|
|
1396
|
+
PluginHls = "plugin:hls",
|
|
1397
|
+
PluginShaka = "plugin:shaka",
|
|
1398
|
+
PluginRtm = "plugin:rtm",
|
|
1399
|
+
PluginXgvideo = "plugin:xgvideo"
|
|
1400
|
+
}
|
|
1401
|
+
type ModulesMap = {
|
|
1402
|
+
[DynamicModule.BizVod]: Exports;
|
|
1403
|
+
[DynamicModule.BizLive]: Exports;
|
|
1404
|
+
[DynamicModule.PluginFlv]: Exports;
|
|
1405
|
+
[DynamicModule.PluginMp4]: Exports;
|
|
1406
|
+
[DynamicModule.PluginHls]: Exports;
|
|
1407
|
+
[DynamicModule.PluginShaka]: Exports;
|
|
1408
|
+
[DynamicModule.PluginRtm]: Exports;
|
|
1409
|
+
[DynamicModule.PluginXgvideo]: Exports;
|
|
1410
|
+
};
|
|
1411
|
+
declare const register: (name: string, exports: {
|
|
1412
|
+
[x: string]: any;
|
|
1413
|
+
}) => {
|
|
1414
|
+
[x: string]: any;
|
|
1415
|
+
};
|
|
1416
|
+
declare function load<T extends DynamicModule>(name: T, src?: string): Promise<ModulesMap[T]>;
|
|
1417
|
+
declare module MobilePlayerPanelWrapper {
|
|
1418
|
+
export { MobilePlayerPanel };
|
|
1419
|
+
}
|
|
1420
|
+
declare namespace strategy {
|
|
1421
|
+
const EN: {
|
|
1422
|
+
DEFINITION_FALLBACK_TOAST: string;
|
|
1423
|
+
DEFINITION_SWITCHING: string;
|
|
1424
|
+
ERROR_REFRESH: string;
|
|
1425
|
+
UNMUTE: string;
|
|
1426
|
+
MANIFEST: string;
|
|
1427
|
+
NETWORK: string;
|
|
1428
|
+
NETWORK_TIMEOUT: string;
|
|
1429
|
+
NETWORK_FORBIDDEN: string;
|
|
1430
|
+
NETWORK_NOTFOUND: string;
|
|
1431
|
+
DEMUX: string;
|
|
1432
|
+
REMUX: string;
|
|
1433
|
+
MEDIA: string;
|
|
1434
|
+
MEDIA_ERR_CODEC_NOT_SUPPORTED: string;
|
|
1435
|
+
MEDIA_ERR_URL_EMPTY: string;
|
|
1436
|
+
DRM: string;
|
|
1437
|
+
OTHER: string;
|
|
1438
|
+
RUNTIME: string;
|
|
1439
|
+
MODULE_LOAD_ERROR: string;
|
|
1440
|
+
UNKNOWN: string;
|
|
1441
|
+
ERROR_TYPES: typeof XG_EN.TEXT.ERROR_TYPES;
|
|
1442
|
+
HAVE_NOTHING: string;
|
|
1443
|
+
HAVE_METADATA: string;
|
|
1444
|
+
HAVE_CURRENT_DATA: string;
|
|
1445
|
+
HAVE_FUTURE_DATA: string;
|
|
1446
|
+
HAVE_ENOUGH_DATA: string;
|
|
1447
|
+
NETWORK_EMPTY: string;
|
|
1448
|
+
NETWORK_IDLE: string;
|
|
1449
|
+
NETWORK_LOADING: string;
|
|
1450
|
+
NETWORK_NO_SOURCE: string;
|
|
1451
|
+
MEDIA_ERR_ABORTED: string;
|
|
1452
|
+
MEDIA_ERR_NETWORK: string;
|
|
1453
|
+
MEDIA_ERR_DECODE: string;
|
|
1454
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED: string;
|
|
1455
|
+
REPLAY: string;
|
|
1456
|
+
ERROR: string;
|
|
1457
|
+
PLAY_TIPS: string;
|
|
1458
|
+
PAUSE_TIPS: string;
|
|
1459
|
+
PLAYNEXT_TIPS: string;
|
|
1460
|
+
DOWNLOAD_TIPS: string;
|
|
1461
|
+
ROTATE_TIPS: string;
|
|
1462
|
+
RELOAD_TIPS: string;
|
|
1463
|
+
FULLSCREEN_TIPS: string;
|
|
1464
|
+
EXITFULLSCREEN_TIPS: string;
|
|
1465
|
+
CSSFULLSCREEN_TIPS: string;
|
|
1466
|
+
EXITCSSFULLSCREEN_TIPS: string;
|
|
1467
|
+
TEXTTRACK: string;
|
|
1468
|
+
PIP: string;
|
|
1469
|
+
SCREENSHOT: string;
|
|
1470
|
+
LIVE: string;
|
|
1471
|
+
OFF: string;
|
|
1472
|
+
OPEN: string;
|
|
1473
|
+
MINI_DRAG: string;
|
|
1474
|
+
MINISCREEN: string;
|
|
1475
|
+
REFRESH_TIPS: string;
|
|
1476
|
+
REFRESH: string;
|
|
1477
|
+
FORWARD: string;
|
|
1478
|
+
LIVE_TIP: string;
|
|
1479
|
+
};
|
|
1480
|
+
const ZH_CN: {
|
|
1481
|
+
DEFINITION_FALLBACK_TOAST: string;
|
|
1482
|
+
DEFINITION_SWITCHING: string;
|
|
1483
|
+
ERROR_REFRESH: string;
|
|
1484
|
+
UNMUTE: string;
|
|
1485
|
+
MANIFEST: string;
|
|
1486
|
+
NETWORK: string;
|
|
1487
|
+
NETWORK_TIMEOUT: string;
|
|
1488
|
+
NETWORK_FORBIDDEN: string;
|
|
1489
|
+
NETWORK_NOTFOUND: string;
|
|
1490
|
+
DEMUX: string;
|
|
1491
|
+
REMUX: string;
|
|
1492
|
+
MEDIA: string;
|
|
1493
|
+
MEDIA_ERR_CODEC_NOT_SUPPORTED: string;
|
|
1494
|
+
MEDIA_ERR_URL_EMPTY: string;
|
|
1495
|
+
DRM: string;
|
|
1496
|
+
OTHER: string;
|
|
1497
|
+
RUNTIME: string;
|
|
1498
|
+
MODULE_LOAD_ERROR: string;
|
|
1499
|
+
UNKNOWN: string;
|
|
1500
|
+
ERROR_TYPES: typeof XG_ZH_CN.TEXT.ERROR_TYPES;
|
|
1501
|
+
HAVE_NOTHING: string;
|
|
1502
|
+
HAVE_METADATA: string;
|
|
1503
|
+
HAVE_CURRENT_DATA: string;
|
|
1504
|
+
HAVE_FUTURE_DATA: string;
|
|
1505
|
+
HAVE_ENOUGH_DATA: string;
|
|
1506
|
+
NETWORK_EMPTY: string;
|
|
1507
|
+
NETWORK_IDLE: string;
|
|
1508
|
+
NETWORK_LOADING: string;
|
|
1509
|
+
NETWORK_NO_SOURCE: string;
|
|
1510
|
+
MEDIA_ERR_ABORTED: string;
|
|
1511
|
+
MEDIA_ERR_NETWORK: string;
|
|
1512
|
+
MEDIA_ERR_DECODE: string;
|
|
1513
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED: string;
|
|
1514
|
+
REPLAY: string;
|
|
1515
|
+
ERROR: string;
|
|
1516
|
+
PLAY_TIPS: string;
|
|
1517
|
+
PAUSE_TIPS: string;
|
|
1518
|
+
PLAYNEXT_TIPS: string;
|
|
1519
|
+
DOWNLOAD_TIPS: string;
|
|
1520
|
+
ROTATE_TIPS: string;
|
|
1521
|
+
RELOAD_TIPS: string;
|
|
1522
|
+
FULLSCREEN_TIPS: string;
|
|
1523
|
+
EXITFULLSCREEN_TIPS: string;
|
|
1524
|
+
CSSFULLSCREEN_TIPS: string;
|
|
1525
|
+
EXITCSSFULLSCREEN_TIPS: string;
|
|
1526
|
+
TEXTTRACK: string;
|
|
1527
|
+
PIP: string;
|
|
1528
|
+
SCREENSHOT: string;
|
|
1529
|
+
LIVE: string;
|
|
1530
|
+
OFF: string;
|
|
1531
|
+
OPEN: string;
|
|
1532
|
+
MINI_DRAG: string;
|
|
1533
|
+
MINISCREEN: string;
|
|
1534
|
+
REFRESH_TIPS: string;
|
|
1535
|
+
REFRESH: string;
|
|
1536
|
+
FORWARD: string;
|
|
1537
|
+
LIVE_TIP: string;
|
|
1538
|
+
};
|
|
1539
|
+
type TextKey = keyof typeof EN;
|
|
1540
|
+
type Lang = "zh-cn" | "zh-hk" | "en" | "jp" | string;
|
|
1541
|
+
class VeI18n<T extends string = TextKey> {
|
|
1542
|
+
private _lang;
|
|
1543
|
+
constructor(config?: {
|
|
1544
|
+
lang?: Lang;
|
|
1545
|
+
i18n?: {
|
|
1546
|
+
texts?: Record<Lang, Record<string, string>>;
|
|
1547
|
+
};
|
|
1548
|
+
});
|
|
1549
|
+
static get langKeys(): string[];
|
|
1550
|
+
static isLangValid(lang: Lang): boolean;
|
|
1551
|
+
static extend(i18nTextList: Array<IXGI18nText>, i18nLangs?: IXGI18n): void;
|
|
1552
|
+
setLang(lang: string): void;
|
|
1553
|
+
getLang(): string;
|
|
1554
|
+
normalize(text?: string | Record<Lang, string>): string;
|
|
1555
|
+
getText(textKey?: T | string): Record<string | T, string>[string | T] | undefined;
|
|
1556
|
+
}
|
|
1557
|
+
interface DefinitionUrl {
|
|
1558
|
+
url: string;
|
|
1559
|
+
next: DefinitionUrl | null;
|
|
1560
|
+
}
|
|
1561
|
+
function arrayToList(urls?: string[]): DefinitionUrl;
|
|
1562
|
+
class Definition implements XGDefinition {
|
|
1563
|
+
readonly definition: string;
|
|
1564
|
+
readonly source: Source;
|
|
1565
|
+
readonly text?: Record<Lang, string> | string;
|
|
1566
|
+
readonly fallbackUrl: DefinitionUrl;
|
|
1567
|
+
readonly urls: string[];
|
|
1568
|
+
private _currentUrlRef;
|
|
1569
|
+
constructor(definitionSetting: {
|
|
1570
|
+
url: string;
|
|
1571
|
+
definition: string;
|
|
1572
|
+
source: Source;
|
|
1573
|
+
text?: Record<Lang, string> | string;
|
|
1574
|
+
fallbackUrls?: string[];
|
|
1575
|
+
});
|
|
1576
|
+
get url(): string;
|
|
1577
|
+
set url(url: string);
|
|
1578
|
+
next(): DefinitionUrl;
|
|
1579
|
+
}
|
|
1580
|
+
/**
|
|
1581
|
+
* @list option
|
|
1582
|
+
* @kind property
|
|
1583
|
+
* @id Definition
|
|
1584
|
+
* @name Definition
|
|
1585
|
+
*
|
|
1586
|
+
*/
|
|
1587
|
+
interface ExposedDefinition {
|
|
1588
|
+
/** {zh}
|
|
1589
|
+
* @brief 播放地址。
|
|
1590
|
+
* @default 无
|
|
1591
|
+
*/
|
|
1592
|
+
url: string;
|
|
1593
|
+
/** {zh}
|
|
1594
|
+
* @brief 清晰度(唯一值)。
|
|
1595
|
+
* @default 无
|
|
1596
|
+
*
|
|
1597
|
+
*/
|
|
1598
|
+
definition: string;
|
|
1599
|
+
/** {zh}
|
|
1600
|
+
* @brief 清晰度展示名称。可设置多语言 `{text: {'zh-cn': '高清', 'en': 'HD'}}`。
|
|
1601
|
+
* @default 无
|
|
1602
|
+
*/
|
|
1603
|
+
text?: Record<Lang, string> | string;
|
|
1604
|
+
/** {zh}
|
|
1605
|
+
* @brief 为当前清晰度地址设置备路拉流地址,支持设置多个备路拉流地址。当前清晰度地址拉流失败时,会在当前清晰度地址和备路直播地址之间循环拉流,直到拉流成功。
|
|
1606
|
+
* @default 无
|
|
1607
|
+
*
|
|
1608
|
+
*/
|
|
1609
|
+
fallbackUrls?: string[];
|
|
1610
|
+
}
|
|
1611
|
+
/**
|
|
1612
|
+
* @list option
|
|
1613
|
+
* @brief 线路数据配置。一个线路包含当前线路的 name ,展示名称,及线路下的清晰度列表。
|
|
1614
|
+
* @kind property
|
|
1615
|
+
* @id Source
|
|
1616
|
+
* @name Source
|
|
1617
|
+
*/
|
|
1618
|
+
interface ExposedSource {
|
|
1619
|
+
/** {zh}
|
|
1620
|
+
* @brief 线路name(唯一值)。
|
|
1621
|
+
* @default 无
|
|
1622
|
+
*/
|
|
1623
|
+
name?: string;
|
|
1624
|
+
/** {zh}
|
|
1625
|
+
* @brief 线路展示名称。可设置多语言 `{text: {'zh-cn': '线路一', 'en': 'LineOne'}}`。
|
|
1626
|
+
* @default 无
|
|
1627
|
+
*
|
|
1628
|
+
*/
|
|
1629
|
+
text?: Record<Lang, string> | string;
|
|
1630
|
+
/** {zh}
|
|
1631
|
+
* @brief 该线路下清晰度列表。
|
|
1632
|
+
* @default 无
|
|
1633
|
+
*
|
|
1634
|
+
*/
|
|
1635
|
+
definitions: Array<ExposedDefinition | string>;
|
|
1636
|
+
}
|
|
1637
|
+
interface CompoundSources {
|
|
1638
|
+
sources?: ExposedSource[];
|
|
1639
|
+
url?: string;
|
|
1640
|
+
fallbackUrls?: string[];
|
|
1641
|
+
}
|
|
1642
|
+
class Source {
|
|
1643
|
+
readonly name?: string;
|
|
1644
|
+
readonly text?: Record<Lang, string> | string;
|
|
1645
|
+
readonly definitions: Array<Definition & {
|
|
1646
|
+
source: Source;
|
|
1647
|
+
}>;
|
|
1648
|
+
private constructor();
|
|
1649
|
+
get defaultDefinition(): Definition & {
|
|
1650
|
+
source: Source;
|
|
1651
|
+
};
|
|
1652
|
+
static normalize(input: CompoundSources | ExposedSource[] | string): Source[];
|
|
1653
|
+
private static normalizeUrl;
|
|
1654
|
+
add(definition: Definition): void;
|
|
1655
|
+
}
|
|
1656
|
+
interface Config {
|
|
1657
|
+
listType: ListType;
|
|
1658
|
+
isAutoChange?: boolean;
|
|
1659
|
+
onItemClick?: (e: Event, data: CallbackData) => void;
|
|
1660
|
+
onOptionClick?: (e: Event, data: CallbackData) => void;
|
|
1661
|
+
hide?: () => void;
|
|
1662
|
+
list?: ListItem[];
|
|
1663
|
+
panel?: {
|
|
1664
|
+
className?: string;
|
|
1665
|
+
title?: string | Record<Lang, string>;
|
|
1666
|
+
};
|
|
1667
|
+
}
|
|
1668
|
+
interface Options {
|
|
1669
|
+
config: Config;
|
|
1670
|
+
root: HTMLElement | null;
|
|
1671
|
+
player: Player$0;
|
|
1672
|
+
}
|
|
1673
|
+
class MobilePlayerPanel {
|
|
1674
|
+
private _root?;
|
|
1675
|
+
private _config;
|
|
1676
|
+
private _parent;
|
|
1677
|
+
private _listDom?;
|
|
1678
|
+
private _container?;
|
|
1679
|
+
private _titleDom?;
|
|
1680
|
+
private _player;
|
|
1681
|
+
private _delegates?;
|
|
1682
|
+
private _listType?;
|
|
1683
|
+
constructor(args: Options);
|
|
1684
|
+
changeMode(listType: ListType): void;
|
|
1685
|
+
// 渲染选择列表
|
|
1686
|
+
renderItemList(data?: ListItem[]): HTMLElement;
|
|
1687
|
+
// 渲染panel的标题
|
|
1688
|
+
renderTitle(): HTMLElement | undefined;
|
|
1689
|
+
updatePanel(listType: ListType): void;
|
|
1690
|
+
// 渲染panel
|
|
1691
|
+
renderPanel(): void;
|
|
1692
|
+
show(): void;
|
|
1693
|
+
hide(): void;
|
|
1694
|
+
destroy(): void;
|
|
1695
|
+
private _bind;
|
|
1696
|
+
private _unbind;
|
|
1697
|
+
private _initEvents;
|
|
1698
|
+
private _unbindEvents;
|
|
1699
|
+
private _handleOrientationChange;
|
|
1700
|
+
private _bindDomEvent;
|
|
1701
|
+
private _unbindDomEvent;
|
|
1702
|
+
private _stopPropagation;
|
|
1703
|
+
private _onItemClick;
|
|
1704
|
+
private _handleHide;
|
|
1705
|
+
}
|
|
1706
|
+
import MobilePanel = MobilePlayerPanelWrapper.MobilePlayerPanel;
|
|
1707
|
+
/**
|
|
1708
|
+
* @detail option
|
|
1709
|
+
* @brief **清晰度选择**或**线路选择**时的**选择面板样式**,仅在移动端有效。
|
|
1710
|
+
*/
|
|
1711
|
+
enum ListType {
|
|
1712
|
+
/** {zh}
|
|
1713
|
+
* @brief 全屏布局
|
|
1714
|
+
* @hidden
|
|
1715
|
+
*/
|
|
1716
|
+
Middle = "middle",
|
|
1717
|
+
/** {zh}
|
|
1718
|
+
* @brief 底部抽屉
|
|
1719
|
+
*/
|
|
1720
|
+
Bottom = "bottom",
|
|
1721
|
+
/** {zh}
|
|
1722
|
+
* @brief 右侧抽屉,常用于全屏时展示
|
|
1723
|
+
*/
|
|
1724
|
+
Fullscreen = "fullscreen",
|
|
1725
|
+
/** {zh}
|
|
1726
|
+
* @brief 窗口蒙层展示
|
|
1727
|
+
*/
|
|
1728
|
+
Inner = "inner"
|
|
1729
|
+
}
|
|
1730
|
+
interface ListItem {
|
|
1731
|
+
[key: string]: any;
|
|
1732
|
+
selected?: boolean;
|
|
1733
|
+
className?: string;
|
|
1734
|
+
showText?: string | HTMLElement;
|
|
1735
|
+
text?: string | Record<Lang, string>;
|
|
1736
|
+
iconText?: string | Record<Lang, string>;
|
|
1737
|
+
}
|
|
1738
|
+
type CallbackData = {
|
|
1739
|
+
to?: ListItem;
|
|
1740
|
+
from?: ListItem;
|
|
1741
|
+
};
|
|
1742
|
+
const enum RenderType {
|
|
1743
|
+
Icon = "Icon",
|
|
1744
|
+
Text = "Text"
|
|
1745
|
+
}
|
|
1746
|
+
type Config$0<T> = {
|
|
1747
|
+
[key: string]: any;
|
|
1748
|
+
// 【xg】顺序
|
|
1749
|
+
index?: number;
|
|
1750
|
+
// 【xg】展示的选择列表
|
|
1751
|
+
list?: Array<T>;
|
|
1752
|
+
// 【xg】竖屏
|
|
1753
|
+
hidePortrait?: boolean;
|
|
1754
|
+
// 【xg】列表点击之后是否隐藏列表
|
|
1755
|
+
isItemClickHide?: boolean;
|
|
1756
|
+
className?: string;
|
|
1757
|
+
// 【xg】是否展示已选择的
|
|
1758
|
+
isShowIcon?: boolean;
|
|
1759
|
+
// 【xg 扩展】列表渲染样式类型
|
|
1760
|
+
listType?: ListType;
|
|
1761
|
+
// 已选择的展示类型(文案 or icon)
|
|
1762
|
+
renderType?: RenderType;
|
|
1763
|
+
// 列表数据只有一个是否展示
|
|
1764
|
+
hideOnSingleOption?: boolean;
|
|
1765
|
+
// 横屏的时候是否切换mode
|
|
1766
|
+
isAutoChange?: boolean;
|
|
1767
|
+
// 自定义组件 mobilePanel的配置
|
|
1768
|
+
panel?: {
|
|
1769
|
+
className?: string;
|
|
1770
|
+
// panel 的标题
|
|
1771
|
+
title?: string | Record<Lang, string>;
|
|
1772
|
+
};
|
|
1773
|
+
};
|
|
1774
|
+
// 源自packages/xgplayer/src/plugins/common/optionsIcon.js
|
|
1775
|
+
// 自定义了几种选择类型
|
|
1776
|
+
class OptionsIcon extends Plugin {
|
|
1777
|
+
icons: Record<string, any>;
|
|
1778
|
+
config: Config$0<ListItem>;
|
|
1779
|
+
optionsList?: MobilePanel | OptionList;
|
|
1780
|
+
private _isIcon?;
|
|
1781
|
+
private _isActive?;
|
|
1782
|
+
private _curIndex;
|
|
1783
|
+
private activeEvent?;
|
|
1784
|
+
constructor(args: IPluginOptions);
|
|
1785
|
+
static get pluginName(): string;
|
|
1786
|
+
static get defaultConfig(): Config$0<ListItem>;
|
|
1787
|
+
updateLang(): void;
|
|
1788
|
+
afterCreate(): void;
|
|
1789
|
+
initIcons(): void;
|
|
1790
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
1791
|
+
// @ts-ignore
|
|
1792
|
+
show(): void;
|
|
1793
|
+
hide(): void;
|
|
1794
|
+
onEnter: (e: Event) => void;
|
|
1795
|
+
onLeave: (e: Event) => void;
|
|
1796
|
+
// 状态切换
|
|
1797
|
+
toggle(isActive: boolean): void;
|
|
1798
|
+
// 列表选择回调
|
|
1799
|
+
onItemClick(e: Event, data: CallbackData): void;
|
|
1800
|
+
// 列表点击回调
|
|
1801
|
+
onOptionClick(e: Event, _data: CallbackData): void;
|
|
1802
|
+
// 已选择 option 的文案
|
|
1803
|
+
changeCurrentText(): void;
|
|
1804
|
+
renderItemList(itemList: ListItem[], curIndex?: number): void;
|
|
1805
|
+
destroy(): void;
|
|
1806
|
+
render(): string;
|
|
1807
|
+
private _getListType;
|
|
1808
|
+
}
|
|
1809
|
+
/**
|
|
1810
|
+
* @detail error
|
|
1811
|
+
*/
|
|
1812
|
+
enum Level {
|
|
1813
|
+
/**
|
|
1814
|
+
* @brief 严重
|
|
1815
|
+
*
|
|
1816
|
+
*/
|
|
1817
|
+
Fatal = "Fatal",
|
|
1818
|
+
/**
|
|
1819
|
+
* @brief 报错
|
|
1820
|
+
*/
|
|
1821
|
+
Error = "Error"
|
|
1822
|
+
}
|
|
1823
|
+
enum ErrorCode {
|
|
1824
|
+
/**
|
|
1825
|
+
* @brief 视频解析错误
|
|
1826
|
+
* @solution 请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1827
|
+
*/
|
|
1828
|
+
MANIFEST_HLS_ERROR = 1100,
|
|
1829
|
+
/**
|
|
1830
|
+
* @brief 视频解析错误
|
|
1831
|
+
* @solution 请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1832
|
+
*/
|
|
1833
|
+
MANIFEST_DASH_ERROR = 1200,
|
|
1834
|
+
/**
|
|
1835
|
+
* @brief 网络错误
|
|
1836
|
+
* @solution 请检查当前网络环境或播放地址是否合法。
|
|
1837
|
+
*/
|
|
1838
|
+
NETWORK = 2100,
|
|
1839
|
+
/**
|
|
1840
|
+
* @brief 网络请求超时
|
|
1841
|
+
* @solution 请检查拉流地址是否合法。
|
|
1842
|
+
*/
|
|
1843
|
+
NETWORK_TIMEOUT = 2101,
|
|
1844
|
+
/**
|
|
1845
|
+
* @brief 网络请求 403
|
|
1846
|
+
* @solution 请检查拉流地址鉴权信息。
|
|
1847
|
+
*/
|
|
1848
|
+
NETWORK_FORBIDDEN = 2103,
|
|
1849
|
+
/**
|
|
1850
|
+
* @brief 网络请求 404
|
|
1851
|
+
* @solution 请检查拉流地址是否合法。
|
|
1852
|
+
*/
|
|
1853
|
+
NETWORK_NOTFOUND = 2104,
|
|
1854
|
+
/**
|
|
1855
|
+
* @brief 网络请求 206
|
|
1856
|
+
* @solution 请检查拉流地址是否合法。
|
|
1857
|
+
*/
|
|
1858
|
+
NETWORK_RANGE_NOT_SATISFIABLE = 2116,
|
|
1859
|
+
/**
|
|
1860
|
+
* @brief 视频解析错误
|
|
1861
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1862
|
+
*/
|
|
1863
|
+
DEMUX_FLV_ERROR = 3100,
|
|
1864
|
+
/**
|
|
1865
|
+
* @brief 视频解析错误
|
|
1866
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1867
|
+
*/
|
|
1868
|
+
DEMUX_HLS_ERROR = 3200,
|
|
1869
|
+
/**
|
|
1870
|
+
* @brief 视频解析错误
|
|
1871
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1872
|
+
*
|
|
1873
|
+
*/
|
|
1874
|
+
DEMUX_MP4_ERROR = 3300,
|
|
1875
|
+
/**
|
|
1876
|
+
* @brief 视频解析错误
|
|
1877
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1878
|
+
*
|
|
1879
|
+
*/
|
|
1880
|
+
DEMUX_FMP4_ERROR = 3400,
|
|
1881
|
+
/**
|
|
1882
|
+
* @brief 视频解析错误
|
|
1883
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1884
|
+
*
|
|
1885
|
+
*/
|
|
1886
|
+
DEMUX_SIDX_ERROR = 3410,
|
|
1887
|
+
/**
|
|
1888
|
+
* @brief 视频解析错误
|
|
1889
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1890
|
+
*
|
|
1891
|
+
*/
|
|
1892
|
+
REMUX_FMP4_ERROR = 4100,
|
|
1893
|
+
/**
|
|
1894
|
+
* @brief 视频解析错误
|
|
1895
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1896
|
+
*
|
|
1897
|
+
*/
|
|
1898
|
+
REMUX_MP4_ERROR = 4200,
|
|
1899
|
+
/**
|
|
1900
|
+
* @brief 获取数据过程被中止
|
|
1901
|
+
* @solution 请检查浏览器网络请求是否正常,再尝试重新拉流。
|
|
1902
|
+
*/
|
|
1903
|
+
MEDIA_ERR_ABORTED = 5101,
|
|
1904
|
+
/**
|
|
1905
|
+
* @brief 网络发生错误,无法成功获取媒体文件
|
|
1906
|
+
* @solution 请检查浏览器网络请求是否正常,再尝试重新拉流。
|
|
1907
|
+
*/
|
|
1908
|
+
MEDIA_ERR_NETWORK = 5102,
|
|
1909
|
+
/**
|
|
1910
|
+
* @brief 浏览器在解码媒体资源时发生错误
|
|
1911
|
+
* @solution
|
|
1912
|
+
* 1. 请检查原始视频是否正常;
|
|
1913
|
+
* 2. 重新进行转码和播放;
|
|
1914
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1915
|
+
*/
|
|
1916
|
+
MEDIA_ERR_DECODE = 5103,
|
|
1917
|
+
/**
|
|
1918
|
+
* @brief 因视频格式不支持、服务器或网络的问题造成视频无法加载
|
|
1919
|
+
* @solution
|
|
1920
|
+
* 1. 检查浏览器视频数据请求是否正常;
|
|
1921
|
+
* 2. 检查浏览器和页面环境是否支持要播放的视频格式;
|
|
1922
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1923
|
+
*/
|
|
1924
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED = 5104,
|
|
1925
|
+
/**
|
|
1926
|
+
* @brief 当前浏览器不支持视频解码
|
|
1927
|
+
* @solution
|
|
1928
|
+
* 1. 检查浏览器视频数据请求是否正常;
|
|
1929
|
+
* 2. 检查浏览器和页面环境是否支持要播放的视频格式;
|
|
1930
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1931
|
+
*/
|
|
1932
|
+
MEDIA_ERR_CODEC_NOT_SUPPORTED = 5105,
|
|
1933
|
+
/**
|
|
1934
|
+
* @brief 当前播放地址为空
|
|
1935
|
+
* @solution 请检查必要参数 `url` 或 `playlist` 是否传入。
|
|
1936
|
+
*/
|
|
1937
|
+
MEDIA_ERR_URL_EMPTY = 5106,
|
|
1938
|
+
/**
|
|
1939
|
+
* @brief 播放异常
|
|
1940
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1941
|
+
*/
|
|
1942
|
+
MEDIA_MSE_ADD_SB = 5200,
|
|
1943
|
+
/**
|
|
1944
|
+
* @brief 播放异常
|
|
1945
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1946
|
+
*/
|
|
1947
|
+
MEDIA_MSE_APPEND_BUFFER = 5201,
|
|
1948
|
+
/**
|
|
1949
|
+
* @brief 播放异常
|
|
1950
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1951
|
+
*/
|
|
1952
|
+
MEDIA_MSE_OTHER = 5202,
|
|
1953
|
+
/**
|
|
1954
|
+
* @brief 播放异常
|
|
1955
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1956
|
+
*/
|
|
1957
|
+
MEDIA_MSE_FULL = 5203,
|
|
1958
|
+
/**
|
|
1959
|
+
* @brief 播放异常
|
|
1960
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1961
|
+
*/
|
|
1962
|
+
MEDIA_MSE_HIJACK = 5204,
|
|
1963
|
+
/**
|
|
1964
|
+
* @brief 播放异常
|
|
1965
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1966
|
+
*/
|
|
1967
|
+
MEDIA_EME_HIJACK = 5301,
|
|
1968
|
+
/**
|
|
1969
|
+
* @brief DRM 权限校验失败
|
|
1970
|
+
* @hidden
|
|
1971
|
+
*/
|
|
1972
|
+
DRM_LICENSE = 7100,
|
|
1973
|
+
/**
|
|
1974
|
+
* @brief DRM 权限校验失败
|
|
1975
|
+
* @hidden
|
|
1976
|
+
*/
|
|
1977
|
+
DRM_CUSTOM_LICENSE = 7200,
|
|
1978
|
+
/**
|
|
1979
|
+
* @brief 播放异常
|
|
1980
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1981
|
+
*/
|
|
1982
|
+
OTHER = 8000,
|
|
1983
|
+
/**
|
|
1984
|
+
* @brief 播放异常
|
|
1985
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1986
|
+
*/
|
|
1987
|
+
RUNTIME_NO_CANPLAY_ERROR = 9001,
|
|
1988
|
+
/**
|
|
1989
|
+
* @brief 播放异常
|
|
1990
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1991
|
+
*/
|
|
1992
|
+
RUNTIME_BUFFERBREAK_ERROR = 9002,
|
|
1993
|
+
/**
|
|
1994
|
+
* @brief 播放异常
|
|
1995
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
1996
|
+
*/
|
|
1997
|
+
RUNTIME_BWAITING_TIMEOUT_ERROR = 9002,
|
|
1998
|
+
// veplayer 报错
|
|
1999
|
+
/**
|
|
2000
|
+
* @brief CDN 异步获取失败
|
|
2001
|
+
* @solution 请刷新重试或者检查网络环境。
|
|
2002
|
+
*
|
|
2003
|
+
*/
|
|
2004
|
+
MODULE_LOAD_ERROR = 110,
|
|
2005
|
+
/**
|
|
2006
|
+
* @hidden
|
|
2007
|
+
*/
|
|
2008
|
+
UNKNOWN = "UNKNOWN"
|
|
2009
|
+
}
|
|
2010
|
+
enum ErrorType {
|
|
2011
|
+
MANIFEST = "manifest",
|
|
2012
|
+
NETWORK = "network",
|
|
2013
|
+
DEMUX = "demux",
|
|
2014
|
+
REMUX = "remux",
|
|
2015
|
+
MEDIA = "media",
|
|
2016
|
+
DRM = "drm",
|
|
2017
|
+
OTHER = "other",
|
|
2018
|
+
RUNTIME = "runtime"
|
|
2019
|
+
}
|
|
2020
|
+
interface ErrorInfo<T = TextKey> {
|
|
2021
|
+
errorCode?: ErrorCode;
|
|
2022
|
+
message?: string;
|
|
2023
|
+
messageTextKey?: T;
|
|
2024
|
+
level?: Level;
|
|
2025
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2026
|
+
ext?: any;
|
|
2027
|
+
error?: Error;
|
|
2028
|
+
}
|
|
2029
|
+
const ERROR_INFO: Partial<Record<ErrorCode, ErrorInfo>>;
|
|
2030
|
+
const ERROR_TYPE_INFO: Record<ErrorType, ErrorInfo>;
|
|
2031
|
+
/**
|
|
2032
|
+
* @detail error
|
|
2033
|
+
* @name 错误对象
|
|
2034
|
+
* @id 错误对象
|
|
2035
|
+
*/
|
|
2036
|
+
class VeError<T extends string = TextKey> extends Error {
|
|
2037
|
+
/**
|
|
2038
|
+
* @brief 错误码,对应[错误码字典](#错误码)。
|
|
2039
|
+
*/
|
|
2040
|
+
readonly errorCode: ErrorCode;
|
|
2041
|
+
/**
|
|
2042
|
+
* @brief 错误等级。
|
|
2043
|
+
*/
|
|
2044
|
+
readonly level?: Level;
|
|
2045
|
+
/**
|
|
2046
|
+
* @brief 错误信息。
|
|
2047
|
+
*/
|
|
2048
|
+
message: string;
|
|
2049
|
+
/**
|
|
2050
|
+
* @brief 其他错误信息。
|
|
2051
|
+
*/
|
|
2052
|
+
readonly ext?: any;
|
|
2053
|
+
/**
|
|
2054
|
+
* @hidden
|
|
2055
|
+
* @param error
|
|
2056
|
+
* @param i18n
|
|
2057
|
+
*/
|
|
2058
|
+
constructor(error?: string | ErrorInfo<T>, i18n?: VeI18n<T>);
|
|
2059
|
+
}
|
|
2060
|
+
function create(errorCode: ErrorCode, info?: ErrorInfo, i18n?: VeI18n): VeError<"DEFINITION_FALLBACK_TOAST" | "DEFINITION_SWITCHING" | "ERROR_REFRESH" | "UNMUTE" | "MANIFEST" | "NETWORK" | "NETWORK_TIMEOUT" | "NETWORK_FORBIDDEN" | "NETWORK_NOTFOUND" | "DEMUX" | "REMUX" | "MEDIA" | "MEDIA_ERR_CODEC_NOT_SUPPORTED" | "MEDIA_ERR_URL_EMPTY" | "DRM" | "OTHER" | "RUNTIME" | "MODULE_LOAD_ERROR" | "UNKNOWN" | "ERROR_TYPES" | "HAVE_NOTHING" | "HAVE_METADATA" | "HAVE_CURRENT_DATA" | "HAVE_FUTURE_DATA" | "HAVE_ENOUGH_DATA" | "NETWORK_EMPTY" | "NETWORK_IDLE" | "NETWORK_LOADING" | "NETWORK_NO_SOURCE" | "MEDIA_ERR_ABORTED" | "MEDIA_ERR_NETWORK" | "MEDIA_ERR_DECODE" | "MEDIA_ERR_SRC_NOT_SUPPORTED" | "REPLAY" | "ERROR" | "PLAY_TIPS" | "PAUSE_TIPS" | "PLAYNEXT_TIPS" | "DOWNLOAD_TIPS" | "ROTATE_TIPS" | "RELOAD_TIPS" | "FULLSCREEN_TIPS" | "EXITFULLSCREEN_TIPS" | "CSSFULLSCREEN_TIPS" | "EXITCSSFULLSCREEN_TIPS" | "TEXTTRACK" | "PIP" | "SCREENSHOT" | "LIVE" | "OFF" | "OPEN" | "MINI_DRAG" | "MINISCREEN" | "REFRESH_TIPS" | "REFRESH" | "FORWARD" | "LIVE_TIP">;
|
|
2061
|
+
function transform(xgErr: XGError, i18n?: VeI18n): VeError<"DEFINITION_FALLBACK_TOAST" | "DEFINITION_SWITCHING" | "ERROR_REFRESH" | "UNMUTE" | "MANIFEST" | "NETWORK" | "NETWORK_TIMEOUT" | "NETWORK_FORBIDDEN" | "NETWORK_NOTFOUND" | "DEMUX" | "REMUX" | "MEDIA" | "MEDIA_ERR_CODEC_NOT_SUPPORTED" | "MEDIA_ERR_URL_EMPTY" | "DRM" | "OTHER" | "RUNTIME" | "MODULE_LOAD_ERROR" | "UNKNOWN" | "ERROR_TYPES" | "HAVE_NOTHING" | "HAVE_METADATA" | "HAVE_CURRENT_DATA" | "HAVE_FUTURE_DATA" | "HAVE_ENOUGH_DATA" | "NETWORK_EMPTY" | "NETWORK_IDLE" | "NETWORK_LOADING" | "NETWORK_NO_SOURCE" | "MEDIA_ERR_ABORTED" | "MEDIA_ERR_NETWORK" | "MEDIA_ERR_DECODE" | "MEDIA_ERR_SRC_NOT_SUPPORTED" | "REPLAY" | "ERROR" | "PLAY_TIPS" | "PAUSE_TIPS" | "PLAYNEXT_TIPS" | "DOWNLOAD_TIPS" | "ROTATE_TIPS" | "RELOAD_TIPS" | "FULLSCREEN_TIPS" | "EXITFULLSCREEN_TIPS" | "CSSFULLSCREEN_TIPS" | "EXITCSSFULLSCREEN_TIPS" | "TEXTTRACK" | "PIP" | "SCREENSHOT" | "LIVE" | "OFF" | "OPEN" | "MINI_DRAG" | "MINISCREEN" | "REFRESH_TIPS" | "REFRESH" | "FORWARD" | "LIVE_TIP">;
|
|
2062
|
+
/**
|
|
2063
|
+
* @list option
|
|
2064
|
+
* @kind property
|
|
2065
|
+
*/
|
|
2066
|
+
type ErrorConfig = {
|
|
2067
|
+
/** {zh}
|
|
2068
|
+
* @brief 是否展示报错图片。
|
|
2069
|
+
* @default true
|
|
2070
|
+
*/
|
|
2071
|
+
showErrorImg?: boolean;
|
|
2072
|
+
/** {zh}
|
|
2073
|
+
* @brief 是否展示报错提示。
|
|
2074
|
+
* @default true
|
|
2075
|
+
*/
|
|
2076
|
+
showErrorTip?: boolean;
|
|
2077
|
+
/** {zh}
|
|
2078
|
+
* @brief 是否展示刷新按钮。
|
|
2079
|
+
* @default true
|
|
2080
|
+
*/
|
|
2081
|
+
showRefresh?: boolean;
|
|
2082
|
+
/** {zh}
|
|
2083
|
+
* @brief 自定义报错显示。
|
|
2084
|
+
* @default 无
|
|
2085
|
+
*/
|
|
2086
|
+
errorTipsText?: string | Record<Lang, string>;
|
|
2087
|
+
/** {zh}
|
|
2088
|
+
* @brief 更多提示信息。
|
|
2089
|
+
* @default 无
|
|
2090
|
+
*/
|
|
2091
|
+
extraTips?: {
|
|
2092
|
+
label: string | Record<Lang, string>;
|
|
2093
|
+
value: string | Record<Lang, string>;
|
|
2094
|
+
}[];
|
|
2095
|
+
};
|
|
2096
|
+
class Error extends Plugin {
|
|
2097
|
+
player: Player$0;
|
|
2098
|
+
icons: {
|
|
2099
|
+
error: HTMLElement;
|
|
2100
|
+
};
|
|
2101
|
+
langText: {
|
|
2102
|
+
refresh: string;
|
|
2103
|
+
errorTip: string;
|
|
2104
|
+
};
|
|
2105
|
+
config: ErrorConfig;
|
|
2106
|
+
private _error?;
|
|
2107
|
+
static get pluginName(): string;
|
|
2108
|
+
static get defaultConfig(): {
|
|
2109
|
+
showErrorImg: boolean;
|
|
2110
|
+
showErrorTip: boolean;
|
|
2111
|
+
showRefresh: boolean;
|
|
2112
|
+
errorTipsText: string;
|
|
2113
|
+
extraTips: never[];
|
|
2114
|
+
position: string;
|
|
2115
|
+
};
|
|
2116
|
+
get _errorTip(): string;
|
|
2117
|
+
afterCreate(): void;
|
|
2118
|
+
registerIcons(): {
|
|
2119
|
+
error: {
|
|
2120
|
+
icon: any;
|
|
2121
|
+
class: string;
|
|
2122
|
+
};
|
|
2123
|
+
};
|
|
2124
|
+
updateLang(): void;
|
|
2125
|
+
showError(error: VeError | XGError): void;
|
|
2126
|
+
hideError(): void;
|
|
2127
|
+
destroy(): void;
|
|
2128
|
+
render(): string;
|
|
2129
|
+
private _focus;
|
|
2130
|
+
private _initIcons;
|
|
2131
|
+
private _initEvents;
|
|
2132
|
+
private _renderText;
|
|
2133
|
+
private _renderExtraTips;
|
|
2134
|
+
private _handleRefresh;
|
|
2135
|
+
private _renderRefresh;
|
|
2136
|
+
}
|
|
2137
|
+
/**
|
|
2138
|
+
* @list option
|
|
2139
|
+
* @kind property
|
|
2140
|
+
*/
|
|
2141
|
+
interface DefinitionConfig {
|
|
2142
|
+
/** {zh}
|
|
2143
|
+
* @brief 等待超时的时间阈值,单位为 ms。等待超过该值,会抛出 `DEFINITION_FALLBACK` 事件,如果 `needFallback` 为 `true` 则会提示清晰度降级。
|
|
2144
|
+
* @default 5000
|
|
2145
|
+
*/
|
|
2146
|
+
longWaitingTime?: number;
|
|
2147
|
+
/** {zh}
|
|
2148
|
+
* @brief 是否开启清晰度降级。
|
|
2149
|
+
* @default false
|
|
2150
|
+
*/
|
|
2151
|
+
needFallback?: boolean;
|
|
2152
|
+
/** {zh}
|
|
2153
|
+
* @brief 降级顺序,按照数组顺序依次降级,数组中的元素与 playlist 中的 definition 相对应。
|
|
2154
|
+
* @default "['uhd', 'hd', 'sd', 'ld', 'ao']"
|
|
2155
|
+
*/
|
|
2156
|
+
demotePriority?: string[];
|
|
2157
|
+
}
|
|
2158
|
+
class DefinitionPlugin extends OptionsIcon {
|
|
2159
|
+
langText: Record<string, string>;
|
|
2160
|
+
private _waitingStartTime;
|
|
2161
|
+
private _timer?;
|
|
2162
|
+
private _toastId?;
|
|
2163
|
+
static get pluginName(): string;
|
|
2164
|
+
static get defaultConfig(): {
|
|
2165
|
+
index: number;
|
|
2166
|
+
list: never[];
|
|
2167
|
+
panel: {
|
|
2168
|
+
title: {
|
|
2169
|
+
jp: string;
|
|
2170
|
+
en: string;
|
|
2171
|
+
"zh-cn": string;
|
|
2172
|
+
"zh-hk": string;
|
|
2173
|
+
};
|
|
2174
|
+
};
|
|
2175
|
+
className: string;
|
|
2176
|
+
hidePortrait: boolean;
|
|
2177
|
+
isShowIcon: boolean;
|
|
2178
|
+
longWaitingTime: number;
|
|
2179
|
+
needFallback: boolean;
|
|
2180
|
+
demotePriority: string[];
|
|
2181
|
+
isItemClickHide?: boolean | undefined;
|
|
2182
|
+
listType?: ListType | undefined;
|
|
2183
|
+
renderType?: RenderType | undefined;
|
|
2184
|
+
hideOnSingleOption?: boolean | undefined;
|
|
2185
|
+
isAutoChange?: boolean | undefined;
|
|
2186
|
+
};
|
|
2187
|
+
static get textTips(): {
|
|
2188
|
+
jp: string;
|
|
2189
|
+
en: string;
|
|
2190
|
+
"zh-cn": string;
|
|
2191
|
+
"zh-hk": string;
|
|
2192
|
+
};
|
|
2193
|
+
updateLang(): void;
|
|
2194
|
+
beforeCreate(args: XGPluginOptions): void;
|
|
2195
|
+
afterCreate(): void;
|
|
2196
|
+
registerIcons(): {
|
|
2197
|
+
source: {
|
|
2198
|
+
icon: any;
|
|
2199
|
+
};
|
|
2200
|
+
};
|
|
2201
|
+
renderItemList(): void;
|
|
2202
|
+
onItemClick(_: never, data: {
|
|
2203
|
+
to: Definition & {
|
|
2204
|
+
showText: string;
|
|
2205
|
+
};
|
|
2206
|
+
}): void;
|
|
2207
|
+
fallback(options?: {
|
|
2208
|
+
toast: boolean;
|
|
2209
|
+
}): Promise<void>;
|
|
2210
|
+
private _waiting;
|
|
2211
|
+
private _clearTimer;
|
|
2212
|
+
private _toast;
|
|
2213
|
+
private _getNextDefinition;
|
|
2214
|
+
private _initTimeUpdateEvent;
|
|
2215
|
+
private _showToast;
|
|
2216
|
+
}
|
|
2217
|
+
interface VePlayerBaseOptions extends Omit<PlayerOptions, "autoplay" | "i18n"> {
|
|
2218
|
+
/** {zh}
|
|
2219
|
+
* @brief 指定播放器容器 ID,VePlayer 将被插入在该容器中。id 和 el 需至少传入 1 个。如果同时传入,则优先将播放器插入 id 容器中。
|
|
2220
|
+
* @default 'veplayer'
|
|
2221
|
+
*/
|
|
2222
|
+
id?: string;
|
|
2223
|
+
/** {zh}
|
|
2224
|
+
* @brief 指定播放器容器元素,VePlayer 将被插入在该容器中。id 和 el 需至少传入 1 个。如果同时传入,则优先将播放器插入 id 容器中。
|
|
2225
|
+
* @default 无
|
|
2226
|
+
*/
|
|
2227
|
+
el?: HTMLElement;
|
|
2228
|
+
/** {zh}
|
|
2229
|
+
* @brief 设置播放器宽度,传入 number 类型参数则播放器内部默认添加单位px,传入 string 类型参数则直接赋值给播放器容器 width 样式属性。
|
|
2230
|
+
* @default '100%'
|
|
2231
|
+
*/
|
|
2232
|
+
width?: number | string;
|
|
2233
|
+
/** {zh}
|
|
2234
|
+
* @brief 设置播放器高度,传入 number 类型参数则播放器内部默认添加单位px,传入 string 类型参数则直接赋值给播放器容器 height 样式属性。
|
|
2235
|
+
* @default '100%'
|
|
2236
|
+
*/
|
|
2237
|
+
height?: number | string;
|
|
2238
|
+
/** {zh}
|
|
2239
|
+
* @brief 为播放器配置直播拉流地址。您可手动拼接或使用地址生成器生成拉流地址,生成方法请参见[生成直播地址](https://www.volcengine.com/docs/6469/107759)。url 和 playList 需至少传入 1 个。
|
|
2240
|
+
* @default 无
|
|
2241
|
+
*/
|
|
2242
|
+
url?: string;
|
|
2243
|
+
/** {zh}
|
|
2244
|
+
* @brief 为播放器配置直播拉流地址列表。url 和 playlist 需至少传入 1 个。
|
|
2245
|
+
* @default 无
|
|
2246
|
+
*/
|
|
2247
|
+
playlist?: ExposedSource[];
|
|
2248
|
+
/** {zh}
|
|
2249
|
+
* @brief 当存在多个直播线路时,为播放器设置默认直播线路,不传则默认列表第一个。
|
|
2250
|
+
* @default 无
|
|
2251
|
+
*/
|
|
2252
|
+
defaultSource?: string;
|
|
2253
|
+
/** {zh}
|
|
2254
|
+
* @brief 为播放器设置默认直播清晰度,不传则默认列表第一个。
|
|
2255
|
+
* @default 无
|
|
2256
|
+
*/
|
|
2257
|
+
defaultDefinition?: string;
|
|
2258
|
+
/** {zh}
|
|
2259
|
+
* @brief 为播放器设置备路拉流地址,支持设置多个备路拉流地址,在 `maxFallbackRound` 大于 `0` 时有效。当您使用配置的直播拉流地址拉流失败时,会在直播地址和备路直播地址之间循环拉流,直到拉流成功。
|
|
2260
|
+
* @default 无
|
|
2261
|
+
*/
|
|
2262
|
+
fallbackUrls?: string[];
|
|
2263
|
+
/** {zh}
|
|
2264
|
+
* @brief 为播放器设置拉流失败时循环拉流的最大次数。
|
|
2265
|
+
* @default 0
|
|
2266
|
+
*/
|
|
2267
|
+
maxFallbackRound?: number;
|
|
2268
|
+
/** {zh}
|
|
2269
|
+
* @brief 为播放器设置解码方式。
|
|
2270
|
+
* @listtip
|
|
2271
|
+
* 开启软解后,播放器会使用浏览器的软件解码器来解码视频流。软解模式具有较高的兼容性,适用于各种设备和浏览器,但依赖设备 CPU,在高分辨率或高码率视频播放时会出现卡顿或延迟。建议在以下场景开启软解:
|
|
2272
|
+
* 1. 部分安卓浏览器中播放器被劫持,部分功能将不可见,可开启软解;
|
|
2273
|
+
* 2. 移动端浏览器不支持 flv 格式,如果需要播放该格式的视频,可开启软解;
|
|
2274
|
+
* 3. 部分浏览器不支持 H.265 编码格式,如果需要播放该编码格式的视频,请开启软解。
|
|
2275
|
+
* @default 'hardware'
|
|
2276
|
+
*/
|
|
2277
|
+
decodeType?: DecodeType;
|
|
2278
|
+
/** {zh}
|
|
2279
|
+
* @brief 为播放器设置视频的实际编码格式。如果您在degradation 设置了 `soft-first` 属性(即硬解不支持时降级软解),建议您传入该参数,省去探测实际编码格式的操作。
|
|
2280
|
+
* @default 'h264'
|
|
2281
|
+
*/
|
|
2282
|
+
codec?: Codec;
|
|
2283
|
+
/** {zh}
|
|
2284
|
+
* @brief 为播放器设置是否开启 H.265 兼容模式。在 H.265 兼容模式下,播放器会优先使用硬解来解码 H.265 直播流。如果设备或浏览器不支持 H.265 硬解,则自动降级为 H.265 软解。
|
|
2285
|
+
* @default 'soft-first'
|
|
2286
|
+
*/
|
|
2287
|
+
degradation?: Degradation | boolean;
|
|
2288
|
+
/** {zh}
|
|
2289
|
+
* @brief 为播放器设置封面图 URL。
|
|
2290
|
+
* @default 无
|
|
2291
|
+
*/
|
|
2292
|
+
poster?: string;
|
|
2293
|
+
/** {zh}
|
|
2294
|
+
* @brief 为播放器设置初始显示语言,语言包不存在的情况下默认显示 'en' 语言包 。默认值为 `document.documentElement.getAttribute('lang') || navigator.language || 'zh-cn'`
|
|
2295
|
+
* @default -
|
|
2296
|
+
*/
|
|
2297
|
+
lang?: Lang;
|
|
2298
|
+
/** {zh}
|
|
2299
|
+
* @brief 为播放器设置自定义的多语言词典,可设置每个语种的词典,格式为 { texts: { [key: string]: Object; } }。<br>
|
|
2300
|
+
* 例如,{ texts: { 'zh-cn': { PIP: '画中画' }, en: { PIP: 'pip' } }} ,格式请参考[默认词典](https://www.volcengine.com/docs/6469/127529)。
|
|
2301
|
+
* @default 无
|
|
2302
|
+
*/
|
|
2303
|
+
i18n?: {
|
|
2304
|
+
texts: Record<Lang, Record<string, string>>;
|
|
2305
|
+
};
|
|
2306
|
+
/** {zh}
|
|
2307
|
+
* @brief 为播放器设置是否自动播放, `muted` 设置为 `true` 为静音自动播放。
|
|
2308
|
+
* @default { muted: true }
|
|
2309
|
+
* @type {{ muted: boolean } | boolean}
|
|
2310
|
+
*/
|
|
2311
|
+
autoplay?: {
|
|
2312
|
+
muted?: boolean;
|
|
2313
|
+
} | boolean;
|
|
2314
|
+
/** {zh}
|
|
2315
|
+
* @brief 为播放器设置默认音量,取值范围 [0,1]。
|
|
2316
|
+
* @default 0.6
|
|
2317
|
+
*/
|
|
2318
|
+
volume?: number;
|
|
2319
|
+
/** {zh}
|
|
2320
|
+
* @brief 为播放器设置是否显示画中画功能按钮。
|
|
2321
|
+
* - `true`:显示;
|
|
2322
|
+
* - `false`:不显示。
|
|
2323
|
+
* @default false
|
|
2324
|
+
*/
|
|
2325
|
+
pip?: boolean;
|
|
2326
|
+
/**{zh}
|
|
2327
|
+
* @brief 为播放器设置是否显示全屏功能按钮,并进行全屏功能设置。
|
|
2328
|
+
* - `true`:显示;
|
|
2329
|
+
* - `false`:不显示。
|
|
2330
|
+
* @default -
|
|
2331
|
+
*/
|
|
2332
|
+
fullscreen?: boolean | Fullscreen;
|
|
2333
|
+
/** {zh}
|
|
2334
|
+
* @brief 为播放器设置报错信息,支持配置播放异常时,播放器显示的异常文案、图片,以及是否提供刷新按钮等。
|
|
2335
|
+
* @default -
|
|
2336
|
+
*/
|
|
2337
|
+
error?: ErrorConfig;
|
|
2338
|
+
/** {zh}
|
|
2339
|
+
* @brief 为播放器设置清晰度的相关配置。
|
|
2340
|
+
* @default -
|
|
2341
|
+
*/
|
|
2342
|
+
definition?: DefinitionConfig;
|
|
2343
|
+
/** {zh}
|
|
2344
|
+
* @brief 为播放器设置是否显示控制栏。
|
|
2345
|
+
* - `true`: 显示;
|
|
2346
|
+
* - `false`: 不显示
|
|
2347
|
+
* @default true
|
|
2348
|
+
*/
|
|
2349
|
+
controls?: boolean | {
|
|
2350
|
+
[propName: string]: any;
|
|
2351
|
+
};
|
|
2352
|
+
/** {zh}
|
|
2353
|
+
* @brief 为播放器设置**清晰度选择**或**线路选择**时的**选择面板样式**,仅在移动端有效。
|
|
2354
|
+
* @default 'bottom'
|
|
2355
|
+
*/
|
|
2356
|
+
listType?: ListType;
|
|
2357
|
+
/** {zh}
|
|
2358
|
+
* @brief 为播放器设置是否启用内联播放模式。playsinline 属性是 HTML5 视频标签的一个属性,用于指定视频是否应在页面文档内播放。
|
|
2359
|
+
* - `true`:启用,表示视频将在页面文档内播放;
|
|
2360
|
+
* - `false`:停用,默认浏览器播放行为。
|
|
2361
|
+
* 该配置项只在移动端生效,当取值为 true 的时候,会在初始化 video 或 audio 对象的时候,将 playsinline、webkit-playsinline、x5-playsinline 三个属性设置为 true,请参考 [New Policies for iOS](https://webkit.org/blog/6784/new-video-policies-for-ios/) 了解内联模式相关知识。
|
|
2362
|
+
* @listtip
|
|
2363
|
+
* iOS 10 及以上系统 Safari 浏览器支持配置内联播放模式;</br>
|
|
2364
|
+
* iOS 10 以下系统 Safari 浏览器不支持配置内联播放模式 ,默认播放即进入系统全屏。
|
|
2365
|
+
* @default true
|
|
2366
|
+
*/
|
|
2367
|
+
playsinline?: boolean;
|
|
2368
|
+
/** {zh}
|
|
2369
|
+
* @brief 为播放器设置 video 标签扩展属性,初始化时会设置在 videoElement 或 audioElement 对象上,请参考 [HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#properties) 查看其支持的属性配置。
|
|
2370
|
+
* @default 无
|
|
2371
|
+
*/
|
|
2372
|
+
videoAttributes?: {
|
|
2373
|
+
[propName: string]: any;
|
|
2374
|
+
};
|
|
2375
|
+
/** {zh}
|
|
2376
|
+
* @brief 为播放器设置是否启用流式布局,启用流式布局后播放器会根据屏幕的宽度进行调整,保持在不同屏幕尺寸上都有良好的显示效果。
|
|
2377
|
+
* - `true`:启用
|
|
2378
|
+
* - `false`:停用
|
|
2379
|
+
* @listtip
|
|
2380
|
+
* 启用流式布局时:
|
|
2381
|
+
* 如果 `width` 和 `height` 是 `Number` 类型,则按照其数值计算播放器宽高比;
|
|
2382
|
+
* 如果 `width` 和 `height` 不是 `Number` 类型,默认使用 16:9 比例。
|
|
2383
|
+
* @default false
|
|
2384
|
+
*/
|
|
2385
|
+
fluid?: boolean;
|
|
2386
|
+
/** {zh}
|
|
2387
|
+
* @brief 为播放器设置尺寸适配方式,在视频资源初始化之后,根据获取到的 videoWidth 和 videoHeight 值对播放器容器宽高比例进行调整,可选项有:
|
|
2388
|
+
* - `fixed`: 保持容器宽/高,不做适配;
|
|
2389
|
+
* - `fixWidth`: 保持容器宽度,适配高度;
|
|
2390
|
+
* - `fixHeight`: 保持容器高度,适配宽度。
|
|
2391
|
+
*
|
|
2392
|
+
* @default 'fixed'
|
|
2393
|
+
*/
|
|
2394
|
+
fitVideoSize?: "fixWidth" | "fixHeight" | "fixed";
|
|
2395
|
+
/** {zh}
|
|
2396
|
+
* @brief 为播放器设置视频画面填充模式,可选项有:
|
|
2397
|
+
* - `fillwidth`: 填充宽度,高度溢出则裁剪高度;
|
|
2398
|
+
* - `fillHeight`: 填充高度,宽度溢出则裁剪宽度;
|
|
2399
|
+
* - `fill`: 拉伸视频以填充容器;
|
|
2400
|
+
* - `cover`: 保持其宽高比的同时填充元素的整个内容框;
|
|
2401
|
+
* - `auto`: 使用浏览器默认的视频画面填充模式。
|
|
2402
|
+
* @default 'auto'
|
|
2403
|
+
*/
|
|
2404
|
+
videoFillMode?: "auto" | "fillHeight" | "fillWidth" | "fill" | "cover";
|
|
2405
|
+
/** {zh}
|
|
2406
|
+
* @brief 是否开启画面和控制栏分离模式。设置为开启时,控制栏将会常驻,与视频画面不重叠。
|
|
2407
|
+
* - `true`:开启
|
|
2408
|
+
* - `false`:关闭
|
|
2409
|
+
* @default false
|
|
2410
|
+
*/
|
|
2411
|
+
marginControls?: boolean;
|
|
2412
|
+
/** {zh}
|
|
2413
|
+
* @brief 启用微信同层播放。
|
|
2414
|
+
* @default 无
|
|
2415
|
+
*/
|
|
2416
|
+
"x5-video-player-type"?: string;
|
|
2417
|
+
/** {zh}
|
|
2418
|
+
* @brief 是否启用微信全屏播放模式。
|
|
2419
|
+
* - `true`:启用
|
|
2420
|
+
* - `false`:停用
|
|
2421
|
+
* @default 无
|
|
2422
|
+
*/
|
|
2423
|
+
"x5-video-player-fullscreen"?: boolean;
|
|
2424
|
+
/** {zh}
|
|
2425
|
+
* @brief 微信横竖屏控制,支持如下取值:
|
|
2426
|
+
* - `landscape`:横屏
|
|
2427
|
+
* - `portrait`:竖屏
|
|
2428
|
+
* - `landscape|portrait`:跟随手机自动旋转
|
|
2429
|
+
* @default 无
|
|
2430
|
+
*/
|
|
2431
|
+
"x5-video-orientation"?: "landscape" | "portrait" | "landscape|portrait";
|
|
2432
|
+
/** {zh}
|
|
2433
|
+
* @brief 为播放器配置关键点样式。
|
|
2434
|
+
* @default 无
|
|
2435
|
+
* @hidden 直播目前没用到
|
|
2436
|
+
*/
|
|
2437
|
+
commonStyle?: CommonStyle;
|
|
2438
|
+
/** {zh}
|
|
2439
|
+
* @brief 自定义插件列表。
|
|
2440
|
+
* @default 无
|
|
2441
|
+
*/
|
|
2442
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2443
|
+
plugins?: any[];
|
|
2444
|
+
/** {zh}
|
|
2445
|
+
* @hidden
|
|
2446
|
+
*/
|
|
2447
|
+
preparePlugins?: PreparePlugins;
|
|
2448
|
+
}
|
|
2449
|
+
/**
|
|
2450
|
+
* @list option
|
|
2451
|
+
* @kind property
|
|
2452
|
+
*/
|
|
2453
|
+
interface Fullscreen {
|
|
2454
|
+
/** {zh}
|
|
2455
|
+
* @brief 切换全屏时,是否旋转为横屏播放,通常在移动端使用。如果开启横屏播放,切换全屏时,将在竖屏状态下把播放器旋转 90 度,实现横屏效果。该配置优先级高于 useCssFullscreen。
|
|
2456
|
+
* `true`:使用旋转横屏;
|
|
2457
|
+
* `false`:不使用旋转横屏。
|
|
2458
|
+
* @default false
|
|
2459
|
+
*/
|
|
2460
|
+
rotateFullscreen?: boolean;
|
|
2461
|
+
/** {zh}
|
|
2462
|
+
* @brief 是否使用页面全屏代替系统全屏功能。
|
|
2463
|
+
* `true`:页面全屏;
|
|
2464
|
+
* `false`:系统全屏。
|
|
2465
|
+
* @default false
|
|
2466
|
+
*/
|
|
2467
|
+
useCssFullscreen?: boolean;
|
|
2468
|
+
/**{zh}
|
|
2469
|
+
* 全屏的时候是否显示右上角返回按钮,通常在移动端开启。
|
|
2470
|
+
* `true`:显示;
|
|
2471
|
+
* `false`:不显示。
|
|
2472
|
+
* @default false
|
|
2473
|
+
*/
|
|
2474
|
+
needBackIcon?: boolean;
|
|
2475
|
+
}
|
|
2476
|
+
/**
|
|
2477
|
+
* @list option
|
|
2478
|
+
* @kind property
|
|
2479
|
+
* @hidden
|
|
2480
|
+
*/
|
|
2481
|
+
interface CommonStyle {
|
|
2482
|
+
/** {zh}
|
|
2483
|
+
* @brief 进度条底色
|
|
2484
|
+
* @default 无
|
|
2485
|
+
*/
|
|
2486
|
+
progressColor?: string;
|
|
2487
|
+
/** {zh}
|
|
2488
|
+
* @brief 播放完成部分进度条底色
|
|
2489
|
+
* @default 无
|
|
2490
|
+
*/
|
|
2491
|
+
playedColor?: string;
|
|
2492
|
+
/** {zh}
|
|
2493
|
+
* @brief 缓存部分进度条底色
|
|
2494
|
+
* @default 无
|
|
2495
|
+
*/
|
|
2496
|
+
cachedColor?: string;
|
|
2497
|
+
/** {zh}
|
|
2498
|
+
* @brief 进度条滑块样式
|
|
2499
|
+
* @default 无
|
|
2500
|
+
*/
|
|
2501
|
+
sliderBtnStyle?: {
|
|
2502
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2503
|
+
[propName: string]: any;
|
|
2504
|
+
};
|
|
2505
|
+
/** {zh}
|
|
2506
|
+
* @brief 音量颜色
|
|
2507
|
+
* @default 无
|
|
2508
|
+
*/
|
|
2509
|
+
volumeColor?: string;
|
|
2510
|
+
}
|
|
2511
|
+
type PrepareResult = {
|
|
2512
|
+
options?: Partial<VePlayerBaseOptions>;
|
|
2513
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2514
|
+
plugins?: any[];
|
|
2515
|
+
};
|
|
2516
|
+
type PreparePlugins = (url: string) => Promise<PrepareResult> | undefined;
|
|
2517
|
+
/**
|
|
2518
|
+
* @detail option
|
|
2519
|
+
* @brief 视频的实际编码格式。如果您在degradation 设置了 SoftFirst 属性(即硬解不支持降级软解),建议您传入该参数,省去探测实际编码格式的操作。
|
|
2520
|
+
*/
|
|
2521
|
+
enum Codec {
|
|
2522
|
+
/** {zh}
|
|
2523
|
+
* @brief h265 编码格式
|
|
2524
|
+
*/
|
|
2525
|
+
H265 = "h265",
|
|
2526
|
+
/** {zh}
|
|
2527
|
+
* @brief h264 编码格式
|
|
2528
|
+
*/
|
|
2529
|
+
H264 = "h264"
|
|
2530
|
+
}
|
|
2531
|
+
/**
|
|
2532
|
+
* @detail option
|
|
2533
|
+
* @brief 是否开启 H.265 兼容模式。在 H.265 兼容模式下,播放器会优先使用硬解来解码 H.265 直播流。如果设备或浏览器不支持 H.265 硬解,则自动降级为 H.265 软解。
|
|
2534
|
+
*/
|
|
2535
|
+
enum Degradation {
|
|
2536
|
+
/** {zh}
|
|
2537
|
+
* @brief 硬解不支持降级到软解
|
|
2538
|
+
*/
|
|
2539
|
+
SoftFirst = "soft-first",
|
|
2540
|
+
/** {zh}
|
|
2541
|
+
* @brief 硬解不支持降级到h264
|
|
2542
|
+
* @hidden
|
|
2543
|
+
*/
|
|
2544
|
+
H264First = "h264-first"
|
|
2545
|
+
}
|
|
2546
|
+
/**
|
|
2547
|
+
* @detail option
|
|
2548
|
+
* @brief 解码方式。
|
|
2549
|
+
* @example
|
|
2550
|
+
* ```js
|
|
2551
|
+
* VePlayer.createLivePlayer({
|
|
2552
|
+
* height: 360,
|
|
2553
|
+
* url: options.url,
|
|
2554
|
+
* }).then(function (veplayer) {
|
|
2555
|
+
* veplayer.on(VePlayer.live.Events.CANPLAY, function () {
|
|
2556
|
+
* console.log('监听到 canplay 事件')
|
|
2557
|
+
* });
|
|
2558
|
+
* }).catch(error => {
|
|
2559
|
+
* console.log('创建播放器失败,报错信息:', error);
|
|
2560
|
+
* });;
|
|
2561
|
+
* ```
|
|
2562
|
+
*/
|
|
2563
|
+
enum DecodeType {
|
|
2564
|
+
/** {zh}
|
|
2565
|
+
* @brief 软解
|
|
2566
|
+
*/
|
|
2567
|
+
Software = "software",
|
|
2568
|
+
/** {zh}
|
|
2569
|
+
* @brief 硬解
|
|
2570
|
+
*/
|
|
2571
|
+
Hardware = "hardware"
|
|
2572
|
+
}
|
|
2573
|
+
/// <reference types="./loader" />
|
|
2574
|
+
const NAME_MAP: {
|
|
2575
|
+
readonly "biz:vod": "veplayer.biz.vod.[env].[ext]";
|
|
2576
|
+
readonly "biz:live": "veplayer.biz.live.[env].[ext]";
|
|
2577
|
+
readonly "plugin:flv": "veplayer.plugin.flv.[env].[ext]";
|
|
2578
|
+
readonly "plugin:mp4": "veplayer.plugin.mp4.[env].[ext]";
|
|
2579
|
+
readonly "plugin:hls": "veplayer.plugin.hls.[env].[ext]";
|
|
2580
|
+
readonly "plugin:shaka": "veplayer.plugin.shaka.[env].[ext]";
|
|
2581
|
+
readonly "plugin:rtm": "veplayer.plugin.rtm.[env].[ext]";
|
|
2582
|
+
readonly "plugin:xgvideo": "veplayer.plugin.xgvideo.[env].[ext]";
|
|
2583
|
+
};
|
|
2584
|
+
const enum State {
|
|
2585
|
+
Fetching = 0,
|
|
2586
|
+
Ready = 1,
|
|
2587
|
+
Error = 2
|
|
2588
|
+
}
|
|
2589
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2590
|
+
type Exports = Record<string, any>;
|
|
2591
|
+
interface Module {
|
|
2592
|
+
src: string;
|
|
2593
|
+
state: State;
|
|
2594
|
+
name: string;
|
|
2595
|
+
exports: Exports;
|
|
2596
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2597
|
+
error?: any;
|
|
2598
|
+
}
|
|
2599
|
+
type ModuleSystem = "esm" | "umd";
|
|
2600
|
+
interface LoaderOptions {
|
|
2601
|
+
baseUrl: string;
|
|
2602
|
+
}
|
|
2603
|
+
enum DynamicModule {
|
|
2604
|
+
BizVod = "biz:vod",
|
|
2605
|
+
BizLive = "biz:live",
|
|
2606
|
+
PluginFlv = "plugin:flv",
|
|
2607
|
+
PluginMp4 = "plugin:mp4",
|
|
2608
|
+
PluginHls = "plugin:hls",
|
|
2609
|
+
PluginShaka = "plugin:shaka",
|
|
2610
|
+
PluginRtm = "plugin:rtm",
|
|
2611
|
+
PluginXgvideo = "plugin:xgvideo"
|
|
2612
|
+
}
|
|
2613
|
+
type ModulesMap = {
|
|
2614
|
+
[DynamicModule.BizVod]: Exports;
|
|
2615
|
+
[DynamicModule.BizLive]: Exports;
|
|
2616
|
+
[DynamicModule.PluginFlv]: Exports;
|
|
2617
|
+
[DynamicModule.PluginMp4]: Exports;
|
|
2618
|
+
[DynamicModule.PluginHls]: Exports;
|
|
2619
|
+
[DynamicModule.PluginShaka]: Exports;
|
|
2620
|
+
[DynamicModule.PluginRtm]: Exports;
|
|
2621
|
+
[DynamicModule.PluginXgvideo]: Exports;
|
|
2622
|
+
};
|
|
2623
|
+
class Loader {
|
|
2624
|
+
readonly modules: Record<string, Module>;
|
|
2625
|
+
readonly mountPromiseMap: Record<string, Promise<Exports>>;
|
|
2626
|
+
private _baseUrl;
|
|
2627
|
+
private _moduleSystem?;
|
|
2628
|
+
constructor(options: LoaderOptions);
|
|
2629
|
+
get baseUrl(): string;
|
|
2630
|
+
get moduleSystem(): ModuleSystem | undefined;
|
|
2631
|
+
setModuleSystem(moduleSystem: ModuleSystem): void;
|
|
2632
|
+
setBaseUrl(url: string): void;
|
|
2633
|
+
load: <T extends DynamicModule>(name: T, src?: string) => Promise<ModulesMap[T]>;
|
|
2634
|
+
register: (name: string, exports: Exports) => Exports;
|
|
2635
|
+
private _mount;
|
|
2636
|
+
}
|
|
2637
|
+
const register: (name: string, exports: {
|
|
2638
|
+
[x: string]: any;
|
|
2639
|
+
}) => {
|
|
2640
|
+
[x: string]: any;
|
|
2641
|
+
};
|
|
2642
|
+
function setModuleSystem(moduleSystem: ModuleSystem): void;
|
|
2643
|
+
function setBaseUrl(url: string): void;
|
|
2644
|
+
function getBaseUrl(): string;
|
|
2645
|
+
function load<T extends DynamicModule>(name: T, src?: string): Promise<ModulesMap[T]>;
|
|
2646
|
+
interface Strategy<T = VePlayerBaseOptions, R extends keyof ModulesMap = any> {
|
|
2647
|
+
options: Partial<T>;
|
|
2648
|
+
module: R;
|
|
2649
|
+
afterLoad?: (module: ModulesMap[R]) => void;
|
|
2650
|
+
}
|
|
2651
|
+
type StrategyCreator<T, R extends keyof ModulesMap = any> = (options?: T) => Strategy<T, R>;
|
|
2652
|
+
const createFlvMseStrategy: StrategyCreator<VePlayerBaseOptions, DynamicModule.PluginFlv>;
|
|
2653
|
+
const createHlsMseStrategy: StrategyCreator<VePlayerBaseOptions, DynamicModule.PluginHls>;
|
|
2654
|
+
const createSoftDecodeH264Strategy: StrategyCreator<VePlayerBaseOptions, DynamicModule.PluginXgvideo>;
|
|
2655
|
+
const createSoftDecodeH265Strategy: StrategyCreator<VePlayerBaseOptions, DynamicModule.PluginXgvideo>;
|
|
2656
|
+
function getCodec(options: VePlayerBaseOptions): Promise<"unknown" | Codec>;
|
|
2657
|
+
function detectCodec(url: string): Promise<"unknown" | Codec>;
|
|
2658
|
+
function isSoftDecode(options: VePlayerBaseOptions, currentCodec?: Codec | "unknown"): Promise<boolean>;
|
|
2659
|
+
function combineOptions<T = VePlayerBaseOptions>(strategyList: (Strategy<T> | undefined)[]): Partial<T>;
|
|
2660
|
+
const getFlvStrategy: (options: VePlayerBaseOptions) => Promise<{
|
|
2661
|
+
options?: undefined;
|
|
2662
|
+
plugins?: undefined;
|
|
2663
|
+
} | {
|
|
2664
|
+
options: Partial<VePlayerBaseOptions>;
|
|
2665
|
+
plugins: any[];
|
|
2666
|
+
}>;
|
|
2667
|
+
const getHlsStrategy: (options: VePlayerBaseOptions) => Promise<{
|
|
2668
|
+
options?: undefined;
|
|
2669
|
+
plugins?: undefined;
|
|
2670
|
+
} | {
|
|
2671
|
+
options: Partial<VePlayerBaseOptions>;
|
|
2672
|
+
plugins: any[];
|
|
2673
|
+
}>;
|
|
2674
|
+
}
|
|
2675
|
+
declare namespace error {
|
|
2676
|
+
const EN: {
|
|
2677
|
+
DEFINITION_FALLBACK_TOAST: string;
|
|
2678
|
+
DEFINITION_SWITCHING: string;
|
|
2679
|
+
ERROR_REFRESH: string;
|
|
2680
|
+
UNMUTE: string;
|
|
2681
|
+
MANIFEST: string;
|
|
2682
|
+
NETWORK: string;
|
|
2683
|
+
NETWORK_TIMEOUT: string;
|
|
2684
|
+
NETWORK_FORBIDDEN: string;
|
|
2685
|
+
NETWORK_NOTFOUND: string;
|
|
2686
|
+
DEMUX: string;
|
|
2687
|
+
REMUX: string;
|
|
2688
|
+
MEDIA: string;
|
|
2689
|
+
MEDIA_ERR_CODEC_NOT_SUPPORTED: string;
|
|
2690
|
+
MEDIA_ERR_URL_EMPTY: string;
|
|
2691
|
+
DRM: string;
|
|
2692
|
+
OTHER: string;
|
|
2693
|
+
RUNTIME: string;
|
|
2694
|
+
MODULE_LOAD_ERROR: string;
|
|
2695
|
+
UNKNOWN: string;
|
|
2696
|
+
ERROR_TYPES: typeof XG_EN.TEXT.ERROR_TYPES;
|
|
2697
|
+
HAVE_NOTHING: string;
|
|
2698
|
+
HAVE_METADATA: string;
|
|
2699
|
+
HAVE_CURRENT_DATA: string;
|
|
2700
|
+
HAVE_FUTURE_DATA: string;
|
|
2701
|
+
HAVE_ENOUGH_DATA: string;
|
|
2702
|
+
NETWORK_EMPTY: string;
|
|
2703
|
+
NETWORK_IDLE: string;
|
|
2704
|
+
NETWORK_LOADING: string;
|
|
2705
|
+
NETWORK_NO_SOURCE: string;
|
|
2706
|
+
MEDIA_ERR_ABORTED: string;
|
|
2707
|
+
MEDIA_ERR_NETWORK: string;
|
|
2708
|
+
MEDIA_ERR_DECODE: string;
|
|
2709
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED: string;
|
|
2710
|
+
REPLAY: string;
|
|
2711
|
+
ERROR: string;
|
|
2712
|
+
PLAY_TIPS: string;
|
|
2713
|
+
PAUSE_TIPS: string;
|
|
2714
|
+
PLAYNEXT_TIPS: string;
|
|
2715
|
+
DOWNLOAD_TIPS: string;
|
|
2716
|
+
ROTATE_TIPS: string;
|
|
2717
|
+
RELOAD_TIPS: string;
|
|
2718
|
+
FULLSCREEN_TIPS: string;
|
|
2719
|
+
EXITFULLSCREEN_TIPS: string;
|
|
2720
|
+
CSSFULLSCREEN_TIPS: string;
|
|
2721
|
+
EXITCSSFULLSCREEN_TIPS: string;
|
|
2722
|
+
TEXTTRACK: string;
|
|
2723
|
+
PIP: string;
|
|
2724
|
+
SCREENSHOT: string;
|
|
2725
|
+
LIVE: string;
|
|
2726
|
+
OFF: string;
|
|
2727
|
+
OPEN: string;
|
|
2728
|
+
MINI_DRAG: string;
|
|
2729
|
+
MINISCREEN: string;
|
|
2730
|
+
REFRESH_TIPS: string;
|
|
2731
|
+
REFRESH: string;
|
|
2732
|
+
FORWARD: string;
|
|
2733
|
+
LIVE_TIP: string;
|
|
2734
|
+
};
|
|
2735
|
+
const ZH_CN: {
|
|
2736
|
+
DEFINITION_FALLBACK_TOAST: string;
|
|
2737
|
+
DEFINITION_SWITCHING: string;
|
|
2738
|
+
ERROR_REFRESH: string;
|
|
2739
|
+
UNMUTE: string;
|
|
2740
|
+
MANIFEST: string;
|
|
2741
|
+
NETWORK: string;
|
|
2742
|
+
NETWORK_TIMEOUT: string;
|
|
2743
|
+
NETWORK_FORBIDDEN: string;
|
|
2744
|
+
NETWORK_NOTFOUND: string;
|
|
2745
|
+
DEMUX: string;
|
|
2746
|
+
REMUX: string;
|
|
2747
|
+
MEDIA: string;
|
|
2748
|
+
MEDIA_ERR_CODEC_NOT_SUPPORTED: string;
|
|
2749
|
+
MEDIA_ERR_URL_EMPTY: string;
|
|
2750
|
+
DRM: string;
|
|
2751
|
+
OTHER: string;
|
|
2752
|
+
RUNTIME: string;
|
|
2753
|
+
MODULE_LOAD_ERROR: string;
|
|
2754
|
+
UNKNOWN: string;
|
|
2755
|
+
ERROR_TYPES: typeof XG_ZH_CN.TEXT.ERROR_TYPES;
|
|
2756
|
+
HAVE_NOTHING: string;
|
|
2757
|
+
HAVE_METADATA: string;
|
|
2758
|
+
HAVE_CURRENT_DATA: string;
|
|
2759
|
+
HAVE_FUTURE_DATA: string;
|
|
2760
|
+
HAVE_ENOUGH_DATA: string;
|
|
2761
|
+
NETWORK_EMPTY: string;
|
|
2762
|
+
NETWORK_IDLE: string;
|
|
2763
|
+
NETWORK_LOADING: string;
|
|
2764
|
+
NETWORK_NO_SOURCE: string;
|
|
2765
|
+
MEDIA_ERR_ABORTED: string;
|
|
2766
|
+
MEDIA_ERR_NETWORK: string;
|
|
2767
|
+
MEDIA_ERR_DECODE: string;
|
|
2768
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED: string;
|
|
2769
|
+
REPLAY: string;
|
|
2770
|
+
ERROR: string;
|
|
2771
|
+
PLAY_TIPS: string;
|
|
2772
|
+
PAUSE_TIPS: string;
|
|
2773
|
+
PLAYNEXT_TIPS: string;
|
|
2774
|
+
DOWNLOAD_TIPS: string;
|
|
2775
|
+
ROTATE_TIPS: string;
|
|
2776
|
+
RELOAD_TIPS: string;
|
|
2777
|
+
FULLSCREEN_TIPS: string;
|
|
2778
|
+
EXITFULLSCREEN_TIPS: string;
|
|
2779
|
+
CSSFULLSCREEN_TIPS: string;
|
|
2780
|
+
EXITCSSFULLSCREEN_TIPS: string;
|
|
2781
|
+
TEXTTRACK: string;
|
|
2782
|
+
PIP: string;
|
|
2783
|
+
SCREENSHOT: string;
|
|
2784
|
+
LIVE: string;
|
|
2785
|
+
OFF: string;
|
|
2786
|
+
OPEN: string;
|
|
2787
|
+
MINI_DRAG: string;
|
|
2788
|
+
MINISCREEN: string;
|
|
2789
|
+
REFRESH_TIPS: string;
|
|
2790
|
+
REFRESH: string;
|
|
2791
|
+
FORWARD: string;
|
|
2792
|
+
LIVE_TIP: string;
|
|
2793
|
+
};
|
|
2794
|
+
type TextKey = keyof typeof EN;
|
|
2795
|
+
type Lang = "zh-cn" | "zh-hk" | "en" | "jp" | string;
|
|
2796
|
+
class VeI18n<T extends string = TextKey> {
|
|
2797
|
+
private _lang;
|
|
2798
|
+
constructor(config?: {
|
|
2799
|
+
lang?: Lang;
|
|
2800
|
+
i18n?: {
|
|
2801
|
+
texts?: Record<Lang, Record<string, string>>;
|
|
2802
|
+
};
|
|
2803
|
+
});
|
|
2804
|
+
static get langKeys(): string[];
|
|
2805
|
+
static isLangValid(lang: Lang): boolean;
|
|
2806
|
+
static extend(i18nTextList: Array<IXGI18nText>, i18nLangs?: IXGI18n): void;
|
|
2807
|
+
setLang(lang: string): void;
|
|
2808
|
+
getLang(): string;
|
|
2809
|
+
normalize(text?: string | Record<Lang, string>): string;
|
|
2810
|
+
getText(textKey?: T | string): Record<string | T, string>[string | T] | undefined;
|
|
2811
|
+
}
|
|
2812
|
+
/**
|
|
2813
|
+
* @detail error
|
|
2814
|
+
*/
|
|
2815
|
+
enum Level {
|
|
2816
|
+
/**
|
|
2817
|
+
* @brief 严重
|
|
2818
|
+
*
|
|
2819
|
+
*/
|
|
2820
|
+
Fatal = "Fatal",
|
|
2821
|
+
/**
|
|
2822
|
+
* @brief 报错
|
|
2823
|
+
*/
|
|
2824
|
+
Error = "Error"
|
|
2825
|
+
}
|
|
2826
|
+
enum ErrorCode {
|
|
2827
|
+
/**
|
|
2828
|
+
* @brief 视频解析错误
|
|
2829
|
+
* @solution 请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2830
|
+
*/
|
|
2831
|
+
MANIFEST_HLS_ERROR = 1100,
|
|
2832
|
+
/**
|
|
2833
|
+
* @brief 视频解析错误
|
|
2834
|
+
* @solution 请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2835
|
+
*/
|
|
2836
|
+
MANIFEST_DASH_ERROR = 1200,
|
|
2837
|
+
/**
|
|
2838
|
+
* @brief 网络错误
|
|
2839
|
+
* @solution 请检查当前网络环境或播放地址是否合法。
|
|
2840
|
+
*/
|
|
2841
|
+
NETWORK = 2100,
|
|
2842
|
+
/**
|
|
2843
|
+
* @brief 网络请求超时
|
|
2844
|
+
* @solution 请检查拉流地址是否合法。
|
|
2845
|
+
*/
|
|
2846
|
+
NETWORK_TIMEOUT = 2101,
|
|
2847
|
+
/**
|
|
2848
|
+
* @brief 网络请求 403
|
|
2849
|
+
* @solution 请检查拉流地址鉴权信息。
|
|
2850
|
+
*/
|
|
2851
|
+
NETWORK_FORBIDDEN = 2103,
|
|
2852
|
+
/**
|
|
2853
|
+
* @brief 网络请求 404
|
|
2854
|
+
* @solution 请检查拉流地址是否合法。
|
|
2855
|
+
*/
|
|
2856
|
+
NETWORK_NOTFOUND = 2104,
|
|
2857
|
+
/**
|
|
2858
|
+
* @brief 网络请求 206
|
|
2859
|
+
* @solution 请检查拉流地址是否合法。
|
|
2860
|
+
*/
|
|
2861
|
+
NETWORK_RANGE_NOT_SATISFIABLE = 2116,
|
|
2862
|
+
/**
|
|
2863
|
+
* @brief 视频解析错误
|
|
2864
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2865
|
+
*/
|
|
2866
|
+
DEMUX_FLV_ERROR = 3100,
|
|
2867
|
+
/**
|
|
2868
|
+
* @brief 视频解析错误
|
|
2869
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2870
|
+
*/
|
|
2871
|
+
DEMUX_HLS_ERROR = 3200,
|
|
2872
|
+
/**
|
|
2873
|
+
* @brief 视频解析错误
|
|
2874
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2875
|
+
*
|
|
2876
|
+
*/
|
|
2877
|
+
DEMUX_MP4_ERROR = 3300,
|
|
2878
|
+
/**
|
|
2879
|
+
* @brief 视频解析错误
|
|
2880
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2881
|
+
*
|
|
2882
|
+
*/
|
|
2883
|
+
DEMUX_FMP4_ERROR = 3400,
|
|
2884
|
+
/**
|
|
2885
|
+
* @brief 视频解析错误
|
|
2886
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2887
|
+
*
|
|
2888
|
+
*/
|
|
2889
|
+
DEMUX_SIDX_ERROR = 3410,
|
|
2890
|
+
/**
|
|
2891
|
+
* @brief 视频解析错误
|
|
2892
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2893
|
+
*
|
|
2894
|
+
*/
|
|
2895
|
+
REMUX_FMP4_ERROR = 4100,
|
|
2896
|
+
/**
|
|
2897
|
+
* @brief 视频解析错误
|
|
2898
|
+
* @solution 请检查拉流地址是否合法或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2899
|
+
*
|
|
2900
|
+
*/
|
|
2901
|
+
REMUX_MP4_ERROR = 4200,
|
|
2902
|
+
/**
|
|
2903
|
+
* @brief 获取数据过程被中止
|
|
2904
|
+
* @solution 请检查浏览器网络请求是否正常,再尝试重新拉流。
|
|
2905
|
+
*/
|
|
2906
|
+
MEDIA_ERR_ABORTED = 5101,
|
|
2907
|
+
/**
|
|
2908
|
+
* @brief 网络发生错误,无法成功获取媒体文件
|
|
2909
|
+
* @solution 请检查浏览器网络请求是否正常,再尝试重新拉流。
|
|
2910
|
+
*/
|
|
2911
|
+
MEDIA_ERR_NETWORK = 5102,
|
|
2912
|
+
/**
|
|
2913
|
+
* @brief 浏览器在解码媒体资源时发生错误
|
|
2914
|
+
* @solution
|
|
2915
|
+
* 1. 请检查原始视频是否正常;
|
|
2916
|
+
* 2. 重新进行转码和播放;
|
|
2917
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2918
|
+
*/
|
|
2919
|
+
MEDIA_ERR_DECODE = 5103,
|
|
2920
|
+
/**
|
|
2921
|
+
* @brief 因视频格式不支持、服务器或网络的问题造成视频无法加载
|
|
2922
|
+
* @solution
|
|
2923
|
+
* 1. 检查浏览器视频数据请求是否正常;
|
|
2924
|
+
* 2. 检查浏览器和页面环境是否支持要播放的视频格式;
|
|
2925
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2926
|
+
*/
|
|
2927
|
+
MEDIA_ERR_SRC_NOT_SUPPORTED = 5104,
|
|
2928
|
+
/**
|
|
2929
|
+
* @brief 当前浏览器不支持视频解码
|
|
2930
|
+
* @solution
|
|
2931
|
+
* 1. 检查浏览器视频数据请求是否正常;
|
|
2932
|
+
* 2. 检查浏览器和页面环境是否支持要播放的视频格式;
|
|
2933
|
+
* 3. 如仍未解决请联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2934
|
+
*/
|
|
2935
|
+
MEDIA_ERR_CODEC_NOT_SUPPORTED = 5105,
|
|
2936
|
+
/**
|
|
2937
|
+
* @brief 当前播放地址为空
|
|
2938
|
+
* @solution 请检查必要参数 `url` 或 `playlist` 是否传入。
|
|
2939
|
+
*/
|
|
2940
|
+
MEDIA_ERR_URL_EMPTY = 5106,
|
|
2941
|
+
/**
|
|
2942
|
+
* @brief 播放异常
|
|
2943
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2944
|
+
*/
|
|
2945
|
+
MEDIA_MSE_ADD_SB = 5200,
|
|
2946
|
+
/**
|
|
2947
|
+
* @brief 播放异常
|
|
2948
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2949
|
+
*/
|
|
2950
|
+
MEDIA_MSE_APPEND_BUFFER = 5201,
|
|
2951
|
+
/**
|
|
2952
|
+
* @brief 播放异常
|
|
2953
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2954
|
+
*/
|
|
2955
|
+
MEDIA_MSE_OTHER = 5202,
|
|
2956
|
+
/**
|
|
2957
|
+
* @brief 播放异常
|
|
2958
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2959
|
+
*/
|
|
2960
|
+
MEDIA_MSE_FULL = 5203,
|
|
2961
|
+
/**
|
|
2962
|
+
* @brief 播放异常
|
|
2963
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2964
|
+
*/
|
|
2965
|
+
MEDIA_MSE_HIJACK = 5204,
|
|
2966
|
+
/**
|
|
2967
|
+
* @brief 播放异常
|
|
2968
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2969
|
+
*/
|
|
2970
|
+
MEDIA_EME_HIJACK = 5301,
|
|
2971
|
+
/**
|
|
2972
|
+
* @brief DRM 权限校验失败
|
|
2973
|
+
* @hidden
|
|
2974
|
+
*/
|
|
2975
|
+
DRM_LICENSE = 7100,
|
|
2976
|
+
/**
|
|
2977
|
+
* @brief DRM 权限校验失败
|
|
2978
|
+
* @hidden
|
|
2979
|
+
*/
|
|
2980
|
+
DRM_CUSTOM_LICENSE = 7200,
|
|
2981
|
+
/**
|
|
2982
|
+
* @brief 播放异常
|
|
2983
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2984
|
+
*/
|
|
2985
|
+
OTHER = 8000,
|
|
2986
|
+
/**
|
|
2987
|
+
* @brief 播放异常
|
|
2988
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2989
|
+
*/
|
|
2990
|
+
RUNTIME_NO_CANPLAY_ERROR = 9001,
|
|
2991
|
+
/**
|
|
2992
|
+
* @brief 播放异常
|
|
2993
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2994
|
+
*/
|
|
2995
|
+
RUNTIME_BUFFERBREAK_ERROR = 9002,
|
|
2996
|
+
/**
|
|
2997
|
+
* @brief 播放异常
|
|
2998
|
+
* @solution 请检查播放源或联系[技术支持](https://console.volcengine.com/workorder/create?step=2&SubProductID=P00000076)。
|
|
2999
|
+
*/
|
|
3000
|
+
RUNTIME_BWAITING_TIMEOUT_ERROR = 9002,
|
|
3001
|
+
// veplayer 报错
|
|
3002
|
+
/**
|
|
3003
|
+
* @brief CDN 异步获取失败
|
|
3004
|
+
* @solution 请刷新重试或者检查网络环境。
|
|
3005
|
+
*
|
|
3006
|
+
*/
|
|
3007
|
+
MODULE_LOAD_ERROR = 110,
|
|
3008
|
+
/**
|
|
3009
|
+
* @hidden
|
|
3010
|
+
*/
|
|
3011
|
+
UNKNOWN = "UNKNOWN"
|
|
3012
|
+
}
|
|
3013
|
+
enum ErrorType {
|
|
3014
|
+
MANIFEST = "manifest",
|
|
3015
|
+
NETWORK = "network",
|
|
3016
|
+
DEMUX = "demux",
|
|
3017
|
+
REMUX = "remux",
|
|
3018
|
+
MEDIA = "media",
|
|
3019
|
+
DRM = "drm",
|
|
3020
|
+
OTHER = "other",
|
|
3021
|
+
RUNTIME = "runtime"
|
|
3022
|
+
}
|
|
3023
|
+
interface ErrorInfo<T = TextKey> {
|
|
3024
|
+
errorCode?: ErrorCode;
|
|
3025
|
+
message?: string;
|
|
3026
|
+
messageTextKey?: T;
|
|
3027
|
+
level?: Level;
|
|
3028
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3029
|
+
ext?: any;
|
|
3030
|
+
error?: Error;
|
|
3031
|
+
}
|
|
3032
|
+
const ERROR_INFO: Partial<Record<ErrorCode, ErrorInfo>>;
|
|
3033
|
+
const ERROR_TYPE_INFO: Record<ErrorType, ErrorInfo>;
|
|
3034
|
+
/**
|
|
3035
|
+
* @detail error
|
|
3036
|
+
* @name 错误对象
|
|
3037
|
+
* @id 错误对象
|
|
3038
|
+
*/
|
|
3039
|
+
class VeError<T extends string = TextKey> extends Error {
|
|
3040
|
+
/**
|
|
3041
|
+
* @brief 错误码,对应[错误码字典](#错误码)。
|
|
3042
|
+
*/
|
|
3043
|
+
readonly errorCode: ErrorCode;
|
|
3044
|
+
/**
|
|
3045
|
+
* @brief 错误等级。
|
|
3046
|
+
*/
|
|
3047
|
+
readonly level?: Level;
|
|
3048
|
+
/**
|
|
3049
|
+
* @brief 错误信息。
|
|
3050
|
+
*/
|
|
3051
|
+
message: string;
|
|
3052
|
+
/**
|
|
3053
|
+
* @brief 其他错误信息。
|
|
3054
|
+
*/
|
|
3055
|
+
readonly ext?: any;
|
|
3056
|
+
/**
|
|
3057
|
+
* @hidden
|
|
3058
|
+
* @param error
|
|
3059
|
+
* @param i18n
|
|
3060
|
+
*/
|
|
3061
|
+
constructor(error?: string | ErrorInfo<T>, i18n?: VeI18n<T>);
|
|
3062
|
+
}
|
|
3063
|
+
function create(errorCode: ErrorCode, info?: ErrorInfo, i18n?: VeI18n): VeError<"DEFINITION_FALLBACK_TOAST" | "DEFINITION_SWITCHING" | "ERROR_REFRESH" | "UNMUTE" | "MANIFEST" | "NETWORK" | "NETWORK_TIMEOUT" | "NETWORK_FORBIDDEN" | "NETWORK_NOTFOUND" | "DEMUX" | "REMUX" | "MEDIA" | "MEDIA_ERR_CODEC_NOT_SUPPORTED" | "MEDIA_ERR_URL_EMPTY" | "DRM" | "OTHER" | "RUNTIME" | "MODULE_LOAD_ERROR" | "UNKNOWN" | "ERROR_TYPES" | "HAVE_NOTHING" | "HAVE_METADATA" | "HAVE_CURRENT_DATA" | "HAVE_FUTURE_DATA" | "HAVE_ENOUGH_DATA" | "NETWORK_EMPTY" | "NETWORK_IDLE" | "NETWORK_LOADING" | "NETWORK_NO_SOURCE" | "MEDIA_ERR_ABORTED" | "MEDIA_ERR_NETWORK" | "MEDIA_ERR_DECODE" | "MEDIA_ERR_SRC_NOT_SUPPORTED" | "REPLAY" | "ERROR" | "PLAY_TIPS" | "PAUSE_TIPS" | "PLAYNEXT_TIPS" | "DOWNLOAD_TIPS" | "ROTATE_TIPS" | "RELOAD_TIPS" | "FULLSCREEN_TIPS" | "EXITFULLSCREEN_TIPS" | "CSSFULLSCREEN_TIPS" | "EXITCSSFULLSCREEN_TIPS" | "TEXTTRACK" | "PIP" | "SCREENSHOT" | "LIVE" | "OFF" | "OPEN" | "MINI_DRAG" | "MINISCREEN" | "REFRESH_TIPS" | "REFRESH" | "FORWARD" | "LIVE_TIP">;
|
|
3064
|
+
function transform(xgErr: XGError, i18n?: VeI18n): VeError<"DEFINITION_FALLBACK_TOAST" | "DEFINITION_SWITCHING" | "ERROR_REFRESH" | "UNMUTE" | "MANIFEST" | "NETWORK" | "NETWORK_TIMEOUT" | "NETWORK_FORBIDDEN" | "NETWORK_NOTFOUND" | "DEMUX" | "REMUX" | "MEDIA" | "MEDIA_ERR_CODEC_NOT_SUPPORTED" | "MEDIA_ERR_URL_EMPTY" | "DRM" | "OTHER" | "RUNTIME" | "MODULE_LOAD_ERROR" | "UNKNOWN" | "ERROR_TYPES" | "HAVE_NOTHING" | "HAVE_METADATA" | "HAVE_CURRENT_DATA" | "HAVE_FUTURE_DATA" | "HAVE_ENOUGH_DATA" | "NETWORK_EMPTY" | "NETWORK_IDLE" | "NETWORK_LOADING" | "NETWORK_NO_SOURCE" | "MEDIA_ERR_ABORTED" | "MEDIA_ERR_NETWORK" | "MEDIA_ERR_DECODE" | "MEDIA_ERR_SRC_NOT_SUPPORTED" | "REPLAY" | "ERROR" | "PLAY_TIPS" | "PAUSE_TIPS" | "PLAYNEXT_TIPS" | "DOWNLOAD_TIPS" | "ROTATE_TIPS" | "RELOAD_TIPS" | "FULLSCREEN_TIPS" | "EXITFULLSCREEN_TIPS" | "CSSFULLSCREEN_TIPS" | "EXITCSSFULLSCREEN_TIPS" | "TEXTTRACK" | "PIP" | "SCREENSHOT" | "LIVE" | "OFF" | "OPEN" | "MINI_DRAG" | "MINISCREEN" | "REFRESH_TIPS" | "REFRESH" | "FORWARD" | "LIVE_TIP">;
|
|
3065
|
+
}
|
|
3066
|
+
declare namespace event {
|
|
3067
|
+
const BaseEvents: {
|
|
3068
|
+
SEI: string;
|
|
3069
|
+
PLAYER_CREATE_FINISH: string;
|
|
3070
|
+
FALLBACK_ERROR: string;
|
|
3071
|
+
FALLBACK: string;
|
|
3072
|
+
AUTOPLAY_STARTED: string;
|
|
3073
|
+
AUTOPLAY_PREVENTED: string;
|
|
3074
|
+
DOWNLOAD_SPEED_CHANGE: string;
|
|
3075
|
+
FULLSCREEN_CHANGE: string;
|
|
3076
|
+
CSS_FULLSCREEN_CHANGE: string;
|
|
3077
|
+
MINI_STATE_CHANGE: string;
|
|
3078
|
+
DEFINITION_CHANGE: string;
|
|
3079
|
+
BEFORE_DEFINITION_CHANGE: string;
|
|
3080
|
+
AFTER_DEFINITION_CHANGE: string;
|
|
3081
|
+
VIDEO_RESIZE: string;
|
|
3082
|
+
PIP_CHANGE: string;
|
|
3083
|
+
USER_ACTION: string;
|
|
3084
|
+
AUTOPLAY_UNMUTE: string;
|
|
3085
|
+
LONG_WAITING: string;
|
|
3086
|
+
DEFINITION_FALLBACK: string;
|
|
3087
|
+
AUTOPLAY_FAIL: string;
|
|
3088
|
+
AUTOPLAY_SUCCESS: string;
|
|
3089
|
+
ERROR_REFRESH_CLICK: string;
|
|
3090
|
+
SOURCE_CHANGE: string;
|
|
3091
|
+
};
|
|
3092
|
+
const Events: {
|
|
3093
|
+
SEI: string;
|
|
3094
|
+
PLAYER_CREATE_FINISH: string;
|
|
3095
|
+
FALLBACK_ERROR: string;
|
|
3096
|
+
FALLBACK: string;
|
|
3097
|
+
AUTOPLAY_STARTED: string;
|
|
3098
|
+
AUTOPLAY_PREVENTED: string;
|
|
3099
|
+
DOWNLOAD_SPEED_CHANGE: string;
|
|
3100
|
+
FULLSCREEN_CHANGE: string;
|
|
3101
|
+
CSS_FULLSCREEN_CHANGE: string;
|
|
3102
|
+
MINI_STATE_CHANGE: string;
|
|
3103
|
+
DEFINITION_CHANGE: string;
|
|
3104
|
+
BEFORE_DEFINITION_CHANGE: string;
|
|
3105
|
+
AFTER_DEFINITION_CHANGE: string;
|
|
3106
|
+
VIDEO_RESIZE: string;
|
|
3107
|
+
PIP_CHANGE: string;
|
|
3108
|
+
USER_ACTION: string;
|
|
3109
|
+
AUTOPLAY_UNMUTE: string;
|
|
3110
|
+
LONG_WAITING: string;
|
|
3111
|
+
DEFINITION_FALLBACK: string;
|
|
3112
|
+
AUTOPLAY_FAIL: string;
|
|
3113
|
+
AUTOPLAY_SUCCESS: string;
|
|
3114
|
+
ERROR_REFRESH_CLICK: string;
|
|
3115
|
+
SOURCE_CHANGE: string;
|
|
3116
|
+
REPLAY: string;
|
|
3117
|
+
ERROR: string;
|
|
3118
|
+
PLAY: string;
|
|
3119
|
+
PLAYING: string;
|
|
3120
|
+
ENDED: string;
|
|
3121
|
+
PAUSE: string;
|
|
3122
|
+
SEEKING: string;
|
|
3123
|
+
SEEKED: string;
|
|
3124
|
+
TIME_UPDATE: string;
|
|
3125
|
+
WAITING: string;
|
|
3126
|
+
CANPLAY: string;
|
|
3127
|
+
CANPLAY_THROUGH: string;
|
|
3128
|
+
DURATION_CHANGE: string;
|
|
3129
|
+
VOLUME_CHANGE: string;
|
|
3130
|
+
LOADED_DATA: string;
|
|
3131
|
+
LOADED_METADATA: string;
|
|
3132
|
+
RATE_CHANGE: string;
|
|
3133
|
+
PROGRESS: string;
|
|
3134
|
+
LOAD_START: string;
|
|
3135
|
+
EMPTIED: string;
|
|
3136
|
+
STALLED: string;
|
|
3137
|
+
SUSPEND: string;
|
|
3138
|
+
ABORT: string;
|
|
3139
|
+
BUFFER_CHANGE: string;
|
|
3140
|
+
PLAYER_FOCUS: string;
|
|
3141
|
+
PLAYER_BLUR: string;
|
|
3142
|
+
READY: string;
|
|
3143
|
+
URL_NULL: string;
|
|
3144
|
+
COMPLETE: string;
|
|
3145
|
+
DESTROY: string;
|
|
3146
|
+
URL_CHANGE: string;
|
|
3147
|
+
SEI_PARSED: string;
|
|
3148
|
+
RETRY: string;
|
|
3149
|
+
ROTATE: string;
|
|
3150
|
+
SCREEN_SHOT: string;
|
|
3151
|
+
PLAYNEXT: string;
|
|
3152
|
+
SHORTCUT: string;
|
|
3153
|
+
XGLOG: string;
|
|
3154
|
+
RESET: string;
|
|
3155
|
+
SOURCE_ERROR: string;
|
|
3156
|
+
SOURCE_SUCCESS: string;
|
|
3157
|
+
SWITCH_SUBTITLE: string;
|
|
3158
|
+
VIDEO_EVENTS: string;
|
|
3159
|
+
STATS_EVENTS: string;
|
|
3160
|
+
FPS_STUCK: string;
|
|
3161
|
+
};
|
|
3162
|
+
function transform(event: string, callback?: (data?: any) => void): {
|
|
3163
|
+
xgEventName: string;
|
|
3164
|
+
xgCallback: ((...args: any) => void) | undefined;
|
|
3165
|
+
};
|
|
3166
|
+
}
|
|
3167
|
+
interface VodVePlayerOptions {
|
|
3168
|
+
plugins: any[];
|
|
3169
|
+
}
|
|
3170
|
+
declare function createVodPlayer(options?: VodVePlayerOptions): Promise<VePlayerBase>;
|
|
3171
|
+
export { load, register, createVodPlayer };
|