@volcengine/veplayer 1.9.1 → 1.9.3-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
+ import VeStrategy from '@byted/volcengine-vestrategy';
2
+ import { StrategyRecommendation } from '@byted/volcengine-vestrategy';
3
+ import { VeStrategyH265Config } from '@byted/volcengine-vestrategy-h265';
4
+ import { PreloaderManager as PreloaderManagerOrigin } from '@byted/volcengine-vestrategy-preload';
1
5
  import VodLogger from '@byted/xgplayer-app-logger/es/logger.js';
2
- import VeStrategy from '@volcengine/vestrategy';
3
- import { StrategyRecommendation, VeStrategyInitOptions } from '@volcengine/vestrategy';
4
- import { VeStrategyH265Config } from '@volcengine/vestrategy-h265';
5
6
  import EventEmitter from 'eventemitter3';
6
7
  import Player from 'xgplayer';
7
8
  import { BasePlugin, I18N, IXGI18nText, Plugin } from 'xgplayer';
@@ -199,7 +200,8 @@ export interface IRtmConfig {
199
200
  * @kind property
200
201
  */
201
202
  /** {en}
202
- * @brief 弹幕相关设置
203
+ * @list Options
204
+ * @kind property
203
205
  */
204
206
  export interface IDanmuConfig {
205
207
  /**
@@ -306,7 +308,11 @@ export interface IMaskConfig {
306
308
  maskOffset?: number;
307
309
  interval?: number;
308
310
  }
309
- /**
311
+ /** {zh}
312
+ * @hidden
313
+ * @brief 语言类型
314
+ */
315
+ /** {en}
310
316
  * @hidden
311
317
  * @brief 语言类型
312
318
  */
@@ -315,7 +321,7 @@ export interface Lang {
315
321
  en: string;
316
322
  [props: string]: string;
317
323
  }
318
- /**
324
+ /** {zh}
319
325
  * @brief 弹幕项
320
326
  * @list Options
321
327
  * @kind property
@@ -323,7 +329,11 @@ export interface Lang {
323
329
  * @interface DanmuItem
324
330
  */
325
331
  /** {en}
326
- * @brief 弹幕项配置
332
+ * @list Options
333
+ * @kind property
334
+ * @export
335
+ * @interface DanmuItem
336
+ * @brief 弹幕项
327
337
  */
328
338
  export interface DanmuItem {
329
339
  /**
@@ -1359,6 +1369,146 @@ export declare type IPlayerOptions = {
1359
1369
  volumeColor?: string;
1360
1370
  };
1361
1371
  };
1372
+ /**
1373
+ * @brief mobile端交互配置。
1374
+ * @list Options
1375
+ * @kind property
1376
+ */
1377
+ export interface IMobileConfig {
1378
+ /**
1379
+ * @brief 是否禁用手势,手势包括:
1380
+ * - 水平手势滑动快进/快退
1381
+ * - 左侧手势滑动调节亮度
1382
+ * - 右侧手势滑动调节音量(iOS不可用)
1383
+ * @default false
1384
+ */
1385
+ disableGesture?: boolean;
1386
+ /**
1387
+ * @brief 是否启用水平手势处理,水平手势快进/快退
1388
+ * @default false
1389
+ */
1390
+ gestureX?: boolean;
1391
+ /**
1392
+ * @brief 是否启用垂直手势处理, 垂直手势包括屏幕右侧和屏幕左侧,默认左侧调节亮度,右侧调节音量,左右范围比例通过scopeL和scopeR设置
1393
+ * @default false
1394
+ */
1395
+ gestureY?: boolean;
1396
+ /**
1397
+ * @brief 左侧手势范围比例,取值0-1
1398
+ * @default 0.25
1399
+ */
1400
+ scopeL?: number;
1401
+ /**
1402
+ * @brief 右侧手势范围,取值0-1
1403
+ * @default 0.25
1404
+ */
1405
+ scopeR?: number;
1406
+ /**
1407
+ * @brief 是否启用左侧调暗功能,因为web端无法调用系统的亮度,这个功能实际使用透明蒙层实
1408
+ * @default true
1409
+ */
1410
+ darkness?: boolean;
1411
+ /**
1412
+ * @brief 播放器可调节的最大暗度,即蒙层最大透明度
1413
+ * @default 0.6
1414
+ */
1415
+ maxDarkness?: number;
1416
+ /**
1417
+ * @brief 是否启用上下渐变阴影,即在播放器在激活时上下范围内有阴影
1418
+ * - normal 上下阴影
1419
+ * - none 无阴影
1420
+ * - top 仅上阴影
1421
+ * - bottom 仅下阴影
1422
+ * @default normal
1423
+ */
1424
+ gradient?: "normal" | "none" | "top" | "bottom";
1425
+ /**
1426
+ * @brief 是否在touchMove事件触发时(即手势滑动时)同时更新播放器的currentTime, 在手势移动过程中,不会直接调用播放器的快进快退,在toucheEnd的时候再设置
1427
+ * @default false
1428
+ */
1429
+ isTouchingSeek?: boolean;
1430
+ /**
1431
+ * @brief 手势滑动的最小步伐,单位px,即滑动距离超过多少算作滑动,以减少不必要的滑动手势事件触发
1432
+ * @default 5
1433
+ */
1434
+ miniMoveStep?: number;
1435
+ /**
1436
+ * @brief 长按快进倍速
1437
+ * @default 2
1438
+ */
1439
+ pressRate?: number;
1440
+ /**
1441
+ * @brief 是否禁用时间预览雪碧图面板
1442
+ * @notice 前提需要配置进度条预览雪碧图 thumbnail
1443
+ * @default true
1444
+ */
1445
+ disableActive?: boolean;
1446
+ /**
1447
+ * @brief 是否禁用时间进度条,即拖动时不展示mini进度条
1448
+ * @default false
1449
+ */
1450
+ disableTimeProgress?: boolean;
1451
+ /**
1452
+ * @brief 手势拖动的时候是否隐藏控制栏
1453
+ * @default true
1454
+ */
1455
+ hideControlsActive?: boolean;
1456
+ /**
1457
+ * @brief 手势结束时隐藏控制栏
1458
+ * @default false
1459
+ */
1460
+ hideControlsEnd?: boolean;
1461
+ /**
1462
+ * @brief 滑动播放器区域快进/快退时,播放器区域对应的时长,即完整滑过播放器所对应的时长,单位ms
1463
+ * @default 360000
1464
+ */
1465
+ moveDuration?: number;
1466
+ /**
1467
+ * @brief 是否关闭双击切换暂停/播放的能力,同closeVideoDblclick
1468
+ * @default false
1469
+ */
1470
+ closedbClick?: boolean;
1471
+ /**
1472
+ * @brief 禁用长按倍速调整
1473
+ * @default true
1474
+ */
1475
+ disablePress?: boolean;
1476
+ /**
1477
+ * @brief 是否禁用快进/快退的时候按钮提示
1478
+ * @default false
1479
+ */
1480
+ disableSeekIcon?: boolean;
1481
+ }
1482
+ /**
1483
+ * @brief 播放器中间切换暂停/播放的按钮。
1484
+ * @list Options
1485
+ * @kind property
1486
+ */
1487
+ export interface IStartConfig {
1488
+ /**
1489
+ * @brief 暂停是否常驻
1490
+ * @default true
1491
+ */
1492
+ isShowPause?: boolean;
1493
+ /**
1494
+ * @brief 是否播放结束常驻
1495
+ * @default false
1496
+ */
1497
+ isShowEnd?: boolean;
1498
+ /**
1499
+ * @brief 是否禁用点击动画
1500
+ * @default pc:true,mobile:false
1501
+ */
1502
+ disableAnimate?: boolean;
1503
+ /**
1504
+ * @brief 按钮的跟随模式
1505
+ * - hide:起播之后隐藏
1506
+ * - show:常驻一直存在
1507
+ * - auto:自动跟随,播放器激活时即player.isActive=true的时候显示,否则隐藏
1508
+ * @default hide
1509
+ */
1510
+ mode?: "hide" | "show" | "auto";
1511
+ }
1362
1512
  /**
1363
1513
  * @brief 自动播放配置。
1364
1514
  * @list Options
@@ -1408,7 +1558,7 @@ export interface IAutoplayPluginConfig {
1408
1558
  */
1409
1559
  enableUserActionAutoplay?: boolean;
1410
1560
  /**
1411
- * @brief 静音自动播放时,是否在播放器容器上居中展示取消静音的大按钮
1561
+ * @brief 静音自动播放时,是否在播放器容器上居中展示取消静音的大按钮。
1412
1562
  * @default true
1413
1563
  */
1414
1564
  showUnmuteBtn?: boolean;
@@ -1462,12 +1612,13 @@ export declare const enum TOGGLE_MODES {
1462
1612
  */
1463
1613
  export interface IPlayListItem {
1464
1614
  /**
1465
- * @notes `playAuthToken` 为空时,此参数必传。
1615
+ * @notes 临时播放 Token 为空时,此参数必传。
1466
1616
  * @default -
1467
1617
  * @listtip `playAuthToken` 为空时,此参数必传。
1468
1618
  * @brief 视频地址。
1469
1619
  */
1470
1620
  /** {en}
1621
+ * @notes 临时播放 Token 为空时,此参数必传。
1471
1622
  */
1472
1623
  url?: string;
1473
1624
  /**
@@ -1902,18 +2053,21 @@ export declare class MemoryPlay extends Plugin {
1902
2053
  getTimeByStorage(memoryId: string): string | 0;
1903
2054
  destroy(): void;
1904
2055
  }
2056
+ declare enum EDRMTYPE {
2057
+ DRM_ENCRYPT = "drm_encrypt"
2058
+ }
1905
2059
  export interface IPlayInfoListItem {
1906
2060
  BackupPlayUrl: string;
1907
2061
  BackupUrlExpire: string;
1908
2062
  BarrageMaskOffset: string;
1909
2063
  Bitrate: number;
1910
2064
  CheckInfo: string;
1911
- Codec: string;
2065
+ Codec: CodecType;
1912
2066
  Definition: string;
1913
2067
  Duration: number;
1914
2068
  FileId: string;
1915
2069
  FileType: string;
1916
- Format: string;
2070
+ Format: EVideoFormat | EAudioFormat;
1917
2071
  Height: number;
1918
2072
  IndexRange: string;
1919
2073
  InitRange: string;
@@ -1928,16 +2082,85 @@ export interface IPlayInfoListItem {
1928
2082
  Size: number;
1929
2083
  Volume?: number;
1930
2084
  Width: number;
2085
+ DrmType?: EDRMTYPE;
2086
+ }
2087
+ export interface ISubtitleInfoList {
2088
+ CreateTime: string;
2089
+ FileId: string;
2090
+ Format: string;
2091
+ Language: string;
2092
+ LanguageId: number;
2093
+ Source: string;
2094
+ Status: string;
2095
+ StoreUri: string;
2096
+ SubtitleId: string;
2097
+ SubtitleUrl: string;
2098
+ Tag: string;
2099
+ Title: string;
2100
+ Version: string;
2101
+ Vid: string;
2102
+ }
2103
+ export interface IThumbInfoList {
2104
+ CaptureNum: number;
2105
+ CellHeight: number;
2106
+ CellWidth: number;
2107
+ Format: string;
2108
+ ImgXLen: number;
2109
+ ImgYLen: number;
2110
+ Interval: number;
2111
+ StoreUrls: string[];
2112
+ }
2113
+ export interface IBarrageMaskInfo {
2114
+ Version: string;
2115
+ BarrageMaskUrl: string;
2116
+ FileId: string;
2117
+ FileSize: number;
2118
+ FileHash: string;
2119
+ UpdatedAt: string;
2120
+ Bitrate: number;
2121
+ HeadLen: number;
2122
+ }
2123
+ export interface IGetPlayInfoRes {
2124
+ Vid: string;
2125
+ AdaptiveInfo?: any;
2126
+ BarrageMaskInfo?: IBarrageMaskInfo;
2127
+ BarrageMaskUrl: string;
2128
+ Duration: number;
2129
+ EnableAdaptive: boolean;
2130
+ FileType: string;
2131
+ PlayInfoList: IPlayInfoListItem[];
2132
+ PosterUrl: string;
2133
+ Status: number;
2134
+ SubtitleInfoList: ISubtitleInfoList[];
2135
+ ThumbInfoList: IThumbInfoList[];
2136
+ TotalCount: number;
2137
+ Version: number;
1931
2138
  }
1932
2139
  declare enum CodecType {
2140
+ /** {zh}
2141
+ * @brief H.264
2142
+ */
2143
+ H264 = "h264",
1933
2144
  /** {zh}
1934
2145
  * @brief H.265
1935
2146
  */
1936
2147
  H265 = "h265",
1937
2148
  /** {zh}
1938
- * @brief H.264
2149
+ * @brief H.266
1939
2150
  */
1940
- H264 = "h264",
2151
+ H266 = "h266",
2152
+ /** {zh}
2153
+ * @brief 音频AAC,含 heaacv2
2154
+ */
2155
+ AAC = "aac",
2156
+ /** {zh}
2157
+ * @brief 音频MP3
2158
+ */
2159
+ MP3 = "mp3",
2160
+ /** {zh}
2161
+ * @brief 音频OPUS
2162
+ */
2163
+ OPUS = "opus",
1941
2164
  /** {zh}
1942
2165
  * @brief 未知编码格式
1943
2166
  */
@@ -1946,6 +2169,19 @@ declare enum CodecType {
1946
2169
  declare enum RTMCodec {
1947
2170
  H264 = "h264"
1948
2171
  }
2172
+ declare enum EVideoFormat {
2173
+ MP4 = "mp4",
2174
+ DASH = "dash",
2175
+ HLS = "hls"
2176
+ }
2177
+ declare enum EAudioFormat {
2178
+ M4A = "m4a",
2179
+ MP4 = "mp4",
2180
+ MP3 = "mp3",
2181
+ DASH = "dash",
2182
+ HLS = "hls",
2183
+ OGG = "ogg"
2184
+ }
1949
2185
  /** {zh}
1950
2186
  * @brief 区域类型:
1951
2187
  * - `'cn'`:中国内地
@@ -1953,6 +2189,8 @@ declare enum RTMCodec {
1953
2189
  * - `'sg'`:暂不生效
1954
2190
  * - `'va'`:暂不生效
1955
2191
  */
2192
+ /** {en}
2193
+ */
1956
2194
  export declare type TRegionType = "cn" | "mya" | "va" | "sg";
1957
2195
  /** {zh}
1958
2196
  * @brief 音乐循环模式:
@@ -1961,6 +2199,8 @@ export declare type TRegionType = "cn" | "mya" | "va" | "sg";
1961
2199
  * - `'loop'`:列表循环
1962
2200
  * - `'random'`:列表随机
1963
2201
  */
2202
+ /** {en}
2203
+ */
1964
2204
  export declare type PlayModeType = "order" | "sloop" | "loop" | "random";
1965
2205
  export interface IMusicListItem {
1966
2206
  /** {zh}
@@ -1996,6 +2236,10 @@ export interface IMusicListItem {
1996
2236
  * @list Options
1997
2237
  * @kind property
1998
2238
  */
2239
+ /** {en}
2240
+ * @list Options
2241
+ * @kind property
2242
+ */
1999
2243
  export interface IABCycle {
2000
2244
  /** {zh}
2001
2245
  * @default 0
@@ -2030,6 +2274,10 @@ export interface IABCycle {
2030
2274
  * @brief 音乐播放模式配置。
2031
2275
  * @kind property
2032
2276
  */
2277
+ /** {en}
2278
+ * @list Options
2279
+ * @kind property
2280
+ */
2033
2281
  export interface IMusicConfig {
2034
2282
  /** {zh}
2035
2283
  * @default false
@@ -2080,7 +2328,12 @@ export interface IMusicConfig {
2080
2328
  * @list Options
2081
2329
  * @brief 播放地址列表,可配置多线路和多清晰度。
2082
2330
  * @kind property
2083
- *
2331
+ * @export
2332
+ * @interface Stream
2333
+ */
2334
+ /** {en}
2335
+ * @list Options
2336
+ * @kind property
2084
2337
  * @export
2085
2338
  * @interface Stream
2086
2339
  */
@@ -2096,8 +2349,7 @@ export interface Stream extends Partial<IPlayInfoListItem> {
2096
2349
  */
2097
2350
  streamType?: string;
2098
2351
  /** {zh}
2099
- * @brief 播放地址
2100
- * 如果是数组形式,则数组每项需要传入src和type,分别表示视频地址及类型,在非MSE的播放方式下,将以HTML@{link https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/source <source>} 形式设置视频资源
2352
+ * @brief 视频播放地址。
2101
2353
  * @type {Url}
2102
2354
  * @memberof IPlayerConfig
2103
2355
  */
@@ -2169,6 +2421,9 @@ export interface Stream extends Partial<IPlayInfoListItem> {
2169
2421
  /** {zh}
2170
2422
  * @hidden
2171
2423
  */
2424
+ /** {en}
2425
+ * @hidden
2426
+ */
2172
2427
  export interface Condition {
2173
2428
  definition?: string;
2174
2429
  lineId?: number | string;
@@ -2177,12 +2432,45 @@ export interface Condition {
2177
2432
  /** {zh}
2178
2433
  * @hidden
2179
2434
  */
2180
- export interface Current {
2435
+ /** {en}
2436
+ * @hidden
2437
+ */
2438
+ export interface Current extends Partial<Stream> {
2439
+ /**
2440
+ * @brief 清晰度
2441
+ * @default -
2442
+ */
2181
2443
  definition: string;
2444
+ /**
2445
+ * @brief 视频格式/协议
2446
+ * @default -
2447
+ */
2182
2448
  streamType: string;
2449
+ /**
2450
+ * @brief 视频流语言
2451
+ * @default -
2452
+ */
2183
2453
  language: string;
2454
+ /**
2455
+ * @brief 视频流id
2456
+ * @default -
2457
+ */
2184
2458
  lineId?: number | string;
2459
+ /**
2460
+ * @brief 视频编码格式
2461
+ * @default unknown
2462
+ */
2185
2463
  codec?: CodecType;
2464
+ /**
2465
+ * @brief 视频为加密视频时的密钥KeyId
2466
+ * @default -
2467
+ */
2468
+ kid?: string;
2469
+ /**
2470
+ * @brief 视频为加密视频时的加密类型
2471
+ * @default -
2472
+ */
2473
+ drmType?: string;
2186
2474
  /**
2187
2475
  * @brief 地址的过期时间戳,vid模式下不用输入,播放器自动获取。如果是火山引擎的CDN分发地址,在不传入过期时间戳时,则需指定urlType,支持{@link https://www.volcengine.com/docs/4/177191 A-E类型},其他云厂商或者业务服务器存储的地址不支持。
2188
2476
  * @default -
@@ -2193,10 +2481,13 @@ export interface Current {
2193
2481
  */
2194
2482
  [propName: string]: any;
2195
2483
  }
2196
- /**
2484
+ /** {zh}
2485
+ * @detail Options
2486
+ * @brief URL 类型。支持字符串和数组。如果是数组形式,则每个数组项应包含视频播放地址 `src` 和视频容器格式类型 `type`,在 HTML `<video />` 元素中使用 [`<source />`](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/source) 元素设置多种格式的视频源。以 `<source />` 元素设置的地址不支持 MSE(媒体源扩展)播放场景,例如 PC 上播放 HLS 视频或安卓上播放 HLS 加密视频。
2487
+ */
2488
+ /** {en}
2197
2489
  * @detail Options
2198
- * @brief url 类型,支持字符串和数组,当为数组时将以HTML@{link https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/source <source>} 形式设置视频资源,可设置多个格式以兼容不同的浏览器
2199
- * 注意:数组形式的url不支持hls、dash等的MSE方式播放
2490
+ * @brief URL type. Supports strings and arrays. If it's in the form of an array, each item in the array should contain the video playback address `src` and the video container format type `type`. Use the [<source />](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/source) element in the HTML `<video />` element to set multiple format video sources. The addresses set with the `<source />` element do not support MSE (Media Source Extensions) playback scenarios, such as playing HLS videos on PCs or encrypted HLS videos on Android.
2200
2491
  */
2201
2492
  export declare type Url = string | Array<{
2202
2493
  src: string;
@@ -2233,7 +2524,6 @@ export interface IPlayerConfig extends IPlayerOptions {
2233
2524
  root?: HTMLElement;
2234
2525
  /** {zh}
2235
2526
  * @brief 视频播放地址。
2236
- * 如果是数组形式,则数组每项需要传入src和type,分别表示视频地址及类型,在非MSE的播放方式下,将以HTML@{link https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/source <source>} 形式设置视频资源
2237
2527
  * @default -
2238
2528
  */
2239
2529
  url?: Url;
@@ -2247,7 +2537,7 @@ export interface IPlayerConfig extends IPlayerOptions {
2247
2537
  */
2248
2538
  vid?: string;
2249
2539
  /** {zh}
2250
- * @brief Vid 播放配置项。应用服务端需通过 `vid` 生成临时 `playAuthToken`,下发给客户端。
2540
+ * @brief Vid 播放配置项。应用服务端需通过 `vid` 生成临时临时播放 Token,下发给客户端。
2251
2541
  * @type {IPlayAuthTokenConfig}
2252
2542
  * @memberof IPlayerConfig
2253
2543
  */
@@ -2527,6 +2817,57 @@ export interface IPlayerConfig extends IPlayerOptions {
2527
2817
  * @default false
2528
2818
  */
2529
2819
  enableMenu?: boolean;
2820
+ /**
2821
+ * @brief 是否关闭pc端单击播放器区域切换播放/暂停
2822
+ * @default false
2823
+ */
2824
+ closeVideoClick?: boolean;
2825
+ /**
2826
+ * @brief pc端: 是否关闭双击播放器进入全屏的能力
2827
+ * mobile端: 是否关闭双击切换暂停/播放的能力
2828
+ * @default pc端: true, mobile端: false
2829
+ */
2830
+ closeVideoDblclick?: boolean;
2831
+ /**
2832
+ * @brief 是否关闭播放器自动失焦(只在pc端生效)
2833
+ * @default false
2834
+ */
2835
+ closeDelayBlur?: boolean;
2836
+ /**
2837
+ * @brief 播放器focus状态自动消失延迟时长,单位为ms
2838
+ * @default pc端: 2000, mobile端: 3000
2839
+ */
2840
+ inactive?: number;
2841
+ /**
2842
+ * @brief 用户鼠标离开播放器区域之后,控制栏隐藏延时时间,如果想要鼠标移出播放器区域就隐藏,则配置为0(只在pc端生效)
2843
+ * @default 0
2844
+ */
2845
+ leavePlayerTime?: number;
2846
+ /**
2847
+ * @brief 是否关闭play时触发player焦点状态
2848
+ * @default pc端:true, mobile端:false
2849
+ */
2850
+ closePlayVideoFocus?: boolean;
2851
+ /**
2852
+ * @brief 是否关闭pause时触发player焦点状态,会强制呼出控制栏
2853
+ * @default false
2854
+ */
2855
+ closePauseVideoFocus?: boolean;
2856
+ /**
2857
+ * @brief 是否需要在退出全屏后滚动定位到全屏之前的位置。(一般安卓下退出全屏后页面会滚动)
2858
+ * @default false
2859
+ */
2860
+ needFullscreenScroll?: boolean;
2861
+ /**
2862
+ * @brief 移动端交互插件配置
2863
+ * @default -
2864
+ */
2865
+ mobile?: IMobileConfig;
2866
+ /**
2867
+ * @brief 播放器中间切换暂停/播放的按钮插件配置
2868
+ * @default -
2869
+ */
2870
+ start?: IStartConfig;
2530
2871
  /** {zh}
2531
2872
  * @brief 是否开启 HLS 视频的 MSE 模式。仅移动端生效。默认情况下,在移动端使用原生 `video` 播放 HLS 视频。开启后,将采用 MSE 方式播放 HLS 视频,实现更好的兼容性、能控制缓存、节省流量。
2532
2873
  * @notes 仅移动端生效,开启后采用MSE方式播放HLS,默认在移动端使用原生video播放hls
@@ -2626,7 +2967,7 @@ export interface IPlayerConfig extends IPlayerOptions {
2626
2967
  */
2627
2968
  enableH265Degrade?: boolean;
2628
2969
  /** {zh}
2629
- * @brief 是否开启地址过期检测,开启后以轮询的方式将当前时间与过期时间戳进行对比,以判断是否过期
2970
+ * @brief 是否开启视频播放地址过期检测。开启后,播放器会轮询地将播放器所在的客户端时间与过期时间戳进行比较,以判断视频播放地址是否过期。
2630
2971
  * @default false
2631
2972
  */
2632
2973
  enableUrlExpireCheck?: boolean;
@@ -2636,23 +2977,23 @@ export interface IPlayerConfig extends IPlayerOptions {
2636
2977
  */
2637
2978
  urlExpireTimestamp?: number;
2638
2979
  /**
2639
- * @brief 判断地址过期的阈值,单位秒(s)。如设置为500时,则在过期前500ms时就可以检测出过期执行更新地址操作,为更新地址留足足够缓冲时间。
2980
+ * @brief 判断视频播放地址过期的阈值。单位为秒。如设置为 500,则 SDK 会在地址过期前 500 秒时就触发过期事件 `Events.MEDIA_EXPIRED`,为您更新地址留足缓冲时间。
2640
2981
  * @default 60
2641
2982
  */
2642
2983
  urlExpireDiff?: number;
2643
2984
  /**
2644
- * @brief 地址过期检测任务的时间间隔,单位ms。
2985
+ * @brief 视频播放地址过期检测的时间间隔。单位为毫秒。播放器以这个时间间隔轮询地将播放器所在的客户端时间与过期时间戳进行比较,以判断地址是否过期。
2645
2986
  * @default 400
2646
2987
  */
2647
2988
  urlCheckExpireInterval?: number;
2648
2989
  /** {zh}
2649
2990
  * @hidden
2650
- * @brief 资源过期时的回调函数,用来更新视频资源
2991
+ * @brief 播放源过期的回调函数。可用来更新播放源数据。
2651
2992
  * @default -
2652
2993
  */
2653
2994
  onMediaExpired?: () => Promise<SourceConfig>;
2654
2995
  /** {zh}
2655
- * @brief `playAuthToken` 过期时的回调函数,可用来更新 `playAuthToken`。
2996
+ * @brief 临时播放 Token 过期时的回调函数,可用来更新临时播放 Token。
2656
2997
  * @default -
2657
2998
  */
2658
2999
  onTokenExpired?: () => Promise<IPlayAuthTokenConfig>;
@@ -2702,7 +3043,7 @@ export interface IPlayerConfig extends IPlayerOptions {
2702
3043
  */
2703
3044
  EncryptHlsPlugin?: Partial<IEncryptHlsPluginConfig> | boolean;
2704
3045
  /** {zh}
2705
- * @brief 质量日志上报配置
3046
+ * @brief 质量日志上报配置。
2706
3047
  * @default -
2707
3048
  */
2708
3049
  vodLogOpts?: Partial<IVodLogOptsConfig>;
@@ -2713,7 +3054,7 @@ export interface IPlayerConfig extends IPlayerOptions {
2713
3054
  */
2714
3055
  Mp4EncryptPlayer?: Partial<IMp4EncryptPlayerConfig> | boolean;
2715
3056
  /** {zh}
2716
- * @brief 自适应码率配置项
3057
+ * @brief 自适应码率配置。
2717
3058
  * @default -
2718
3059
  */
2719
3060
  autoBitrateOpts?: IAutoBitrateOpts;
@@ -2747,18 +3088,18 @@ export interface IPlayerConfig extends IPlayerOptions {
2747
3088
  */
2748
3089
  playListPlugin?: IPlayListConfig;
2749
3090
  /** {zh}
2750
- * @brief 动态水印配置
3091
+ * @brief 动态水印配置。
2751
3092
  * @default -
2752
3093
  */
2753
3094
  dynamicwatermark?: IWatermarkConfig;
2754
3095
  /** {zh}
2755
- * @brief 进度条预览缩略图配置
3096
+ * @brief 进度条预览缩略图配置。
2756
3097
  * @default -
2757
3098
  */
2758
3099
  thumbnail?: IThumbnailConfig;
2759
3100
  }
2760
3101
  /**
2761
- * @brief source数据,可包含urlplayList、getVideoByToken和urlExpireTimestamp
3102
+ * @brief 播放源数据。支持传入视频播放地址 `url`、播放列表 `playList` 或者 `vid` `playAuthToken`,还需包含新地址的过期时间戳 `urlExpireTimestamp`。
2762
3103
  */
2763
3104
  export declare type SourceConfig = Pick<IPlayerConfig, "url" | "playList" | "getVideoByToken" | "urlExpireTimestamp">;
2764
3105
  /** {zh}
@@ -2900,6 +3241,22 @@ export interface IPlayAuthTokenConfig {
2900
3241
  * @default -
2901
3242
  */
2902
3243
  getDrmAuthToken?: (playAuthIds: string, vid: string, unionInfo: string) => Promise<string>;
3244
+ /**
3245
+ * @brief 商业DRM 获取license的token
3246
+ * @default -
3247
+ */
3248
+ thirdPartyDrmAuthToken?: string;
3249
+ /**
3250
+ * @brief 商业DRM,获取fairplay证书的地址
3251
+ * @default -
3252
+ */
3253
+ serverCertificatePath?: string;
3254
+ /**
3255
+ * @brief 商业DRM播放时,是否开启防录屏
3256
+ * @notice 如果开启后,但当前环境不支持,则报错
3257
+ * @default true
3258
+ */
3259
+ unRecord?: boolean;
2903
3260
  /** {zh}
2904
3261
  * @brief 可携带aid等透传参数,如:
2905
3262
  * {aid: 1234},以playAuthToken下发的参数的优先级最高。
@@ -3212,50 +3569,248 @@ export interface ApiMapConfig {
3212
3569
  playDomain: string;
3213
3570
  backupPlayDomain?: string;
3214
3571
  }
3572
+ declare enum PreloadScene {
3573
+ /**
3574
+ * 普通场景(手动执行预加载)
3575
+ */
3576
+ NORMAL = 0,
3577
+ /**
3578
+ * Feed流场景(播放器自动执行预加载)
3579
+ */
3580
+ FEED = 1
3581
+ }
3215
3582
  declare enum StrategyNames {
3216
- H265 = "h265"
3583
+ /**
3584
+ * h265
3585
+ */
3586
+ H265 = "h265",
3587
+ /**
3588
+ * 预加载
3589
+ */
3590
+ PRELOAD = "preload"
3217
3591
  }
3218
- /**
3592
+ /**{zh}
3219
3593
  * @hidden
3220
- * @brief 策略配置项
3594
+ * h265策略配置
3595
+ * @detail detail
3596
+ */
3597
+ export declare type IH265Config = {
3598
+ /**
3599
+ * h265策略依赖Module
3600
+ */
3601
+ Strategy?: any;
3602
+ /**
3603
+ * 是否禁用265策略
3604
+ */
3605
+ disabled?: boolean;
3606
+ } & VeStrategyH265Config;
3607
+ /**{zh}
3608
+ * 预加载初始配置
3609
+ * @detail detail
3610
+ */
3611
+ export declare type IPreloadConfig = {
3612
+ /**
3613
+ * 预加载场景
3614
+ * @default 0
3615
+ * */
3616
+ preloadScene?: PreloadScene;
3617
+ /**
3618
+ * 向前预加载视频个数,Feed流场景时生效
3619
+ * @default 1
3620
+ */
3621
+ prevCount?: number;
3622
+ /**
3623
+ * 向后预加载视频个数,Feed流场景生效
3624
+ * @default 2
3625
+ */
3626
+ nextCount?: number;
3627
+ /**
3628
+ * 单个视频预加载时长
3629
+ * @default 5
3630
+ */
3631
+ preloadTime?: number;
3632
+ /**
3633
+ * 最大视频缓存个数
3634
+ * @default 15
3635
+ */
3636
+ preloadMaxCacheCount?: number;
3637
+ /**
3638
+ * 预加载依赖Module
3639
+ */
3640
+ Strategy?: any;
3641
+ /**
3642
+ * 是否禁用预加载
3643
+ */
3644
+ disabled?: boolean;
3645
+ };
3646
+ /**{zh}
3647
+ * 高级能力(策略)配置
3648
+ * @detail detail
3221
3649
  */
3222
3650
  export declare type StrategyConfigOptions = {
3223
- [StrategyNames.H265]?: boolean | {
3224
- Strategy?: any;
3225
- disabled?: boolean;
3226
- config?: VeStrategyH265Config;
3227
- };
3651
+ /**
3652
+ * @hidden
3653
+ * h265策略配置
3654
+ */
3655
+ [StrategyNames.H265]?: boolean | IH265Config;
3656
+ /**
3657
+ * 预加载配置
3658
+ */
3659
+ [StrategyNames.PRELOAD]?: boolean | IPreloadConfig;
3228
3660
  };
3229
- export declare type StrategyInitOptions = Omit<VeStrategyInitOptions, "strategies"> & {
3230
- Module: typeof VeStrategy;
3661
+ /**{zh}
3662
+ * 播放器预初始化配置
3663
+ * @detail detail
3664
+ */
3665
+ export declare type StrategyInitOptions = {
3666
+ /**
3667
+ * 应用ID
3668
+ */
3669
+ appId: number;
3670
+ /**
3671
+ * 高级能力(策略)配置
3672
+ */
3231
3673
  strategies: StrategyConfigOptions;
3674
+ /**
3675
+ * 设备ID
3676
+ */
3677
+ deviceId?: string;
3678
+ /**
3679
+ * 手动注入依赖插件,默认自动加载
3680
+ */
3681
+ plugins?: any[];
3682
+ /**
3683
+ * 策略Module,默认自动加载
3684
+ */
3685
+ Module?: typeof VeStrategy;
3686
+ };
3687
+ /**{zh}
3688
+ * 预加载实例,通过预加载实例可执行一些高级方法
3689
+ * @detail detail
3690
+ */
3691
+ export declare type PreloaderManager = {
3692
+ /**
3693
+ * 移除所有已预加载数据
3694
+ */
3695
+ removeAll(): void;
3696
+ /**
3697
+ * 移除所有预加载任务
3698
+ */
3699
+ removeAllPreloadTask(): void;
3700
+ /**
3701
+ * 清空待预加载列表
3702
+ */
3703
+ clearPreloadList(): void;
3704
+ };
3705
+ declare enum PreloaderStatus {
3706
+ /**
3707
+ * 不可用
3708
+ */
3709
+ DISABLED = 0,
3710
+ /**
3711
+ * 初始状态
3712
+ */
3713
+ INITIALIZING = 1,
3714
+ /**
3715
+ * 已Ready
3716
+ */
3717
+ READY = 2,
3718
+ /**
3719
+ * 加载失败
3720
+ */
3721
+ FAILED = 3
3722
+ }
3723
+ /**{zh}
3724
+ * 预加载配置更新
3725
+ * @detail detail
3726
+ */
3727
+ export declare type IPreloadUpdateConfig = {
3728
+ /**
3729
+ * 向前加载视频个数
3730
+ */
3731
+ prevCount?: number;
3732
+ /**
3733
+ * 向后加载视频个数
3734
+ */
3735
+ nextCount?: number;
3736
+ };
3737
+ /**{zh}
3738
+ * 预加载视频资源
3739
+ * @detail detail
3740
+ */
3741
+ export declare type IPreloadStream = {
3742
+ /**
3743
+ * 视频唯一ID
3744
+ */
3745
+ vid: string;
3746
+ /**
3747
+ * 播放地址
3748
+ */
3749
+ url: string;
3750
+ /**
3751
+ * 视频清晰度
3752
+ */
3753
+ definition: string;
3754
+ /**
3755
+ * 视频streamType,暂只支持 mp4
3756
+ */
3757
+ streamType: string;
3758
+ /**
3759
+ * 视频codec,暂支持 h264
3760
+ */
3761
+ codec: string;
3762
+ /**
3763
+ * 码率, 数据统计需要,可选填
3764
+ */
3765
+ bitrate: number;
3766
+ /**
3767
+ * 视频时长,数据统计需要,可选填
3768
+ */
3769
+ duration: number;
3770
+ /**
3771
+ * 视频大小,数据统计需要,可选填
3772
+ */
3773
+ size: number;
3232
3774
  };
3233
3775
  declare class VeStrategyWrapper {
3776
+ private tea;
3234
3777
  private static mapStrategyNameToUmdKey;
3235
3778
  private static TEA_ID;
3779
+ preloader: PreloaderManagerOrigin | undefined;
3780
+ preloaderStatus: PreloaderStatus;
3236
3781
  private sdkUmdLoader;
3237
3782
  private webId;
3238
3783
  private config;
3239
3784
  private status;
3240
3785
  private initPromise;
3786
+ private preloadCacheConfig;
3787
+ private preloadCacheScene;
3788
+ private preloadCacheList;
3241
3789
  constructor();
3242
3790
  private initUmdLoader;
3243
3791
  private fetchWebId;
3792
+ private initTea;
3244
3793
  private fetchVeStrategy;
3245
3794
  private fetchStrategies;
3246
3795
  private initOnce;
3247
3796
  init(config: StrategyInitOptions): Promise<boolean>;
3797
+ initPreloadService(options: StrategyInitOptions): Promise<boolean>;
3798
+ addPreloadList(list: IPreloadStream[]): void;
3799
+ setPreloadList(list: IPreloadStream[]): Promise<void>;
3800
+ setPreloadScene(preloadScene: PreloadScene, options?: any): void;
3248
3801
  prepare(): Promise<boolean>;
3249
3802
  getDeviceId(): string;
3250
3803
  isReady(): boolean;
3251
3804
  getStrategyRecommendations(): StrategyRecommendation;
3805
+ getStrategyRecommendationsAsync(): Promise<StrategyRecommendation>;
3252
3806
  isHevcRecommended(): boolean;
3807
+ private initPreloaderConfig;
3253
3808
  }
3254
3809
  declare const _default: VeStrategyWrapper;
3255
3810
  declare class PlayerData {
3256
3811
  id?: string;
3257
3812
  root?: HTMLElement;
3258
- configs: any;
3813
+ configs: IPlayerConfig;
3259
3814
  strategyConfig?: StrategyConfigOptions;
3260
3815
  type: string;
3261
3816
  isLive: boolean;
@@ -3295,6 +3850,11 @@ declare class PlayerData {
3295
3850
  urlExpireDiff: number;
3296
3851
  urlCheckExpireInterval: number;
3297
3852
  };
3853
+ isBusinessDrm: boolean;
3854
+ isEncrypt: boolean;
3855
+ dashOpts: {
3856
+ Data: IGetPlayInfoRes;
3857
+ };
3298
3858
  constructor(configs: IPlayerConfig);
3299
3859
  /**
3300
3860
  * 初始化播放数据
@@ -3321,12 +3881,12 @@ declare class PlayerData {
3321
3881
  /**
3322
3882
  * @description: 获取当前的streamType
3323
3883
  */
3324
- getCurrentStreamType(): any;
3325
- getStreamType(): any;
3884
+ getCurrentStreamType(): string;
3885
+ getStreamType(): string;
3326
3886
  isOpenABR(streamType?: string): boolean;
3327
3887
  showRealDefinition(): boolean;
3328
3888
  isAutoDefinition(def: any): boolean;
3329
- isPlayAutoDefinition(def?: string): any;
3889
+ isPlayAutoDefinition(def?: string): boolean;
3330
3890
  isDefinitionMatch(pre: any, next: any): boolean;
3331
3891
  /**
3332
3892
  * @description: 获取满足当前直播条件的流
@@ -3426,7 +3986,9 @@ declare enum UmdKeys {
3426
3986
  StreamProbe = "streamprobe",
3427
3987
  VeStrategy = "vestrategy",
3428
3988
  VeStrategyH265 = "vestrategy_h265",
3429
- DashAbralgo = "DashAbralgo"
3989
+ VeStrategyPreload = "vestrategy_preload",
3990
+ DashAbralgo = "DashAbralgo",
3991
+ Preloader = "preloader"
3430
3992
  }
3431
3993
  /**
3432
3994
  * @hidden
@@ -3473,7 +4035,10 @@ declare class umdLoader {
3473
4035
  */
3474
4036
  loadPlugins(pluginName: UmdKeys, successCallback?: () => void): Promise<any>;
3475
4037
  }
3476
- /**
4038
+ /** {zh}
4039
+ * @hidden
4040
+ */
4041
+ /** {en}
3477
4042
  * @hidden
3478
4043
  */
3479
4044
  export declare type PlayerCore = Player & {
@@ -3595,6 +4160,37 @@ declare class VePlayer {
3595
4160
  * @memberof VePlayer
3596
4161
  */
3597
4162
  static sdkVersion: string;
4163
+ /**{zh}
4164
+ * @brief 播放器预初始化配置
4165
+ * @param options 初始化配置,详情见{@link StrategyInitOptions}
4166
+ */
4167
+ static prepare(options: StrategyInitOptions): Promise<void>;
4168
+ /**{zh}
4169
+ * @brief 设置预加载模式
4170
+ * @param preloadScene 预加载模式,详情见{@link PreloadScene}
4171
+ * @param options 预加载配置更新,详情见{@link IPreloadUpdateConfig}
4172
+ */
4173
+ static setPreloadScene(preloadScene: PreloadScene, options?: IPreloadUpdateConfig): void;
4174
+ /**{zh}
4175
+ * @brief 获取预加载实例,可通过预加载实例执行高级方法,需在VePlayer.prepare Promise执行完成之后才能获取到预加载实例
4176
+ * @returns 预加载实例,详情见{@link PreloaderManager}
4177
+ */
4178
+ static get preloader(): PreloaderManager | undefined;
4179
+ /**{zh}
4180
+ * @brief 获取当前预加载实例状态
4181
+ * @returns 预加载实例状态,详情见{@link PreloaderStatus}
4182
+ */
4183
+ static get preloaderStatus(): PreloaderStatus;
4184
+ /**{zh}
4185
+ * @brief 添加待预加载视频列表
4186
+ * @param list 待预加载视频列表,详情见{@link IPreloadStream[]}。
4187
+ */
4188
+ static addPreloadList(list: IPreloadStream[]): void;
4189
+ /**{zh}
4190
+ * @brief 设置待预加载视频列表,替换当前已设置的待预加载列表
4191
+ * @param list 待预加载视频列表,详情见{@link IPreloadStream[]}
4192
+ */
4193
+ static setPreloadList(list: IPreloadStream[]): Promise<void>;
3598
4194
  /**
3599
4195
  * @hidden
3600
4196
  * @param codec
@@ -3606,7 +4202,7 @@ declare class VePlayer {
3606
4202
  private vodLogCommon;
3607
4203
  /**
3608
4204
  * @hidden
3609
- * 延时触发的events,即保证在palyer创建之后才触发
4205
+ * 延时触发的events,即保证在player创建之后才触发
3610
4206
  */
3611
4207
  delayEvents: Array<{
3612
4208
  name: string;
@@ -3819,8 +4415,8 @@ declare class VePlayer {
3819
4415
  */
3820
4416
  private _onMediaExpiredAction;
3821
4417
  /**
3822
- * @brief 更新视频源,常用于地址过期时或者过期前更新视频地址及过期时间戳
3823
- * @param source 视频资源配置,支持传入地址urlplayList、getVideByToken以及过期检查的相关配置
4418
+ * @brief 更新播放源。您可在视频播放地址过期前调用此方法更新地址及过期时间戳。
4419
+ * @param source 播放源配置。详见 [SourceConfig](1248901#sourceconfig)。支持传入视频播放地址 `url`、播放列表 `playList` 或者 `vid` 和 `playAuthToken`,还需包含新地址的过期时间戳 `urlExpireTimestamp`。
3824
4420
  */
3825
4421
  updateMediaSource(source: SourceConfig): Promise<void>;
3826
4422
  /** {zh}
@@ -3868,17 +4464,17 @@ declare class VePlayer {
3868
4464
  */
3869
4465
  getSdkPlugin(name: any): any;
3870
4466
  /** {zh}
3871
- * @brief 播放时更换 `playAuthToken`,以更换视频源。
4467
+ * @brief 播放时更换临时播放 Token,以更换视频源。
3872
4468
  * @memberof VePlayer
3873
- * @param config `playAuthToken` 配置。
4469
+ * @param config 临时播放 Token 配置。
3874
4470
  * @param isNewVideo 是否为新视频。为 `false` 时,更换后,会从更换前的时间点继续播放。
3875
4471
  */
3876
4472
  switchAuthToken(config: IPlayAuthTokenConfig, isNewVideo?: boolean): Promise<void>;
3877
4473
  /** {zh}
3878
- * @brief 更新 `playAuthToken`。
4474
+ * @brief 更新临时播放 Token。
3879
4475
  * @memberof VePlayer
3880
- * @notes 播放前 `playAuthToken` 过期(收到 `play_auth_token_expired` 事件或者 `onTokenExpired` 回调触发)时,调用此方法更新 `playAuthToken`。
3881
- * @param config `playAuthToken` 配置。
4476
+ * @notes 播放前临时播放 Token 过期(收到 `play_auth_token_expired` 事件或者 `onTokenExpired` 回调触发)时,调用此方法更新临时播放 Token。
4477
+ * @param config 临时播放 Token 配置。
3882
4478
  */
3883
4479
  updateAuthToken(config: IPlayAuthTokenConfig): Promise<void>;
3884
4480
  private _playerPlayNext;
@@ -4103,6 +4699,11 @@ declare class VePlayer {
4103
4699
  * @param pluginName 插件名。
4104
4700
  */
4105
4701
  getPlugin(pluginName: string): null | BasePlugin;
4702
+ /**
4703
+ * @brief 当前浏览器环境是否支持商业drm防录屏
4704
+ * @return boolean 是否支持商业drm防录屏
4705
+ */
4706
+ isDrmSupportUnRecord(): Promise<boolean>;
4106
4707
  /** {zh}
4107
4708
  * @memberof VePlayer
4108
4709
  * @brief 销毁当前播放器实例。
@@ -4967,6 +5568,34 @@ export declare const Events: {
4967
5568
  * @brief UMD 加载失败。
4968
5569
  */
4969
5570
  UMD_LOAD_FAIL: string;
5571
+ /** {zh}
5572
+ * @brief 切换下一个视频,playNext方法调用后触发
5573
+ */
5574
+ PLAYNEXT: string;
5575
+ /** {zh}
5576
+ * @brief 视频地址为空
5577
+ */
5578
+ URL_NULL: string;
5579
+ /** {zh}
5580
+ * @brief 鼠标移出
5581
+ */
5582
+ LEAVE_PLAYER: string;
5583
+ /** {zh}
5584
+ * @brief 鼠标移出
5585
+ */
5586
+ ENTER_PLAYER: string;
5587
+ /** {zh}
5588
+ * @brief 播放器状态重置
5589
+ */
5590
+ RESET: string;
5591
+ /** {zh}
5592
+ * @brief <source> 加载错误,表示<source>不支持或播放失败
5593
+ */
5594
+ SOURCE_ERROR: string;
5595
+ /** {zh}
5596
+ * @brief <source> 加载成功
5597
+ */
5598
+ SOURCE_SUCCESS: string;
4970
5599
  /** {zh}
4971
5600
  * @brief 在播放被终止时触发。例如当播放中的视频重新开始播放。
4972
5601
  */
@@ -5256,6 +5885,34 @@ export declare const Event: {
5256
5885
  * @brief UMD 加载失败。
5257
5886
  */
5258
5887
  UMD_LOAD_FAIL: string;
5888
+ /** {zh}
5889
+ * @brief 切换下一个视频,playNext方法调用后触发
5890
+ */
5891
+ PLAYNEXT: string;
5892
+ /** {zh}
5893
+ * @brief 视频地址为空
5894
+ */
5895
+ URL_NULL: string;
5896
+ /** {zh}
5897
+ * @brief 鼠标移出
5898
+ */
5899
+ LEAVE_PLAYER: string;
5900
+ /** {zh}
5901
+ * @brief 鼠标移出
5902
+ */
5903
+ ENTER_PLAYER: string;
5904
+ /** {zh}
5905
+ * @brief 播放器状态重置
5906
+ */
5907
+ RESET: string;
5908
+ /** {zh}
5909
+ * @brief <source> 加载错误,表示<source>不支持或播放失败
5910
+ */
5911
+ SOURCE_ERROR: string;
5912
+ /** {zh}
5913
+ * @brief <source> 加载成功
5914
+ */
5915
+ SOURCE_SUCCESS: string;
5259
5916
  };
5260
5917
  PluginEvents: {
5261
5918
  /** {zh}