@volcengine/veplayer 1.9.6-rc.0 → 1.9.6-rc.10
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 +342 -39
- package/index.min.css +1 -1
- package/index.min.js +2 -2
- package/package.json +1 -1
- package/plugin/danmujs.js +2 -1
- package/plugin/dash.js +2 -2
- package/plugin/hls.js +1 -1
- package/plugin/hlsEncrypt.js +2 -2
- package/plugin/vestrategy_adapt_range.js +1 -0
package/index.d.ts
CHANGED
|
@@ -1371,8 +1371,10 @@ export declare type IPlayerOptions = {
|
|
|
1371
1371
|
};
|
|
1372
1372
|
/**
|
|
1373
1373
|
* @brief mobile端交互配置。
|
|
1374
|
-
* @
|
|
1375
|
-
|
|
1374
|
+
* @hidden
|
|
1375
|
+
*/
|
|
1376
|
+
/** {en}
|
|
1377
|
+
* @hidden
|
|
1376
1378
|
*/
|
|
1377
1379
|
export interface IMobileConfig {
|
|
1378
1380
|
/**
|
|
@@ -1481,8 +1483,10 @@ export interface IMobileConfig {
|
|
|
1481
1483
|
}
|
|
1482
1484
|
/**
|
|
1483
1485
|
* @brief 播放器中间切换暂停/播放的按钮。
|
|
1484
|
-
* @
|
|
1485
|
-
|
|
1486
|
+
* @hidden
|
|
1487
|
+
*/
|
|
1488
|
+
/** {en}
|
|
1489
|
+
* @hidden
|
|
1486
1490
|
*/
|
|
1487
1491
|
export interface IStartConfig {
|
|
1488
1492
|
/**
|
|
@@ -2101,7 +2105,7 @@ export interface ISubtitleInfoList {
|
|
|
2101
2105
|
Version: string;
|
|
2102
2106
|
Vid: string;
|
|
2103
2107
|
}
|
|
2104
|
-
export interface
|
|
2108
|
+
export interface IThumbInfoItem {
|
|
2105
2109
|
CaptureNum: number;
|
|
2106
2110
|
CellHeight: number;
|
|
2107
2111
|
CellWidth: number;
|
|
@@ -2121,9 +2125,20 @@ export interface IBarrageMaskInfo {
|
|
|
2121
2125
|
Bitrate: number;
|
|
2122
2126
|
HeadLen: number;
|
|
2123
2127
|
}
|
|
2128
|
+
export interface DashAdaptiveInfo {
|
|
2129
|
+
AdaptiveType: string;
|
|
2130
|
+
BackupPlayUrl: string;
|
|
2131
|
+
MainPlayUrl: string;
|
|
2132
|
+
}
|
|
2133
|
+
export interface ABRInfo {
|
|
2134
|
+
AbrFormat: string;
|
|
2135
|
+
BackupPlayUrl: string;
|
|
2136
|
+
MainPlayUrl: string;
|
|
2137
|
+
}
|
|
2124
2138
|
export interface IGetPlayInfoRes {
|
|
2125
2139
|
Vid: string;
|
|
2126
|
-
AdaptiveInfo?:
|
|
2140
|
+
AdaptiveInfo?: DashAdaptiveInfo;
|
|
2141
|
+
AdaptiveBitrateStreamingInfo?: ABRInfo;
|
|
2127
2142
|
BarrageMaskInfo?: IBarrageMaskInfo;
|
|
2128
2143
|
BarrageMaskUrl: string;
|
|
2129
2144
|
Duration: number;
|
|
@@ -2133,7 +2148,7 @@ export interface IGetPlayInfoRes {
|
|
|
2133
2148
|
PosterUrl: string;
|
|
2134
2149
|
Status: number;
|
|
2135
2150
|
SubtitleInfoList: ISubtitleInfoList[];
|
|
2136
|
-
ThumbInfoList:
|
|
2151
|
+
ThumbInfoList: IThumbInfoItem[];
|
|
2137
2152
|
TotalCount: number;
|
|
2138
2153
|
Version: number;
|
|
2139
2154
|
}
|
|
@@ -2409,6 +2424,16 @@ export interface Stream extends Partial<IPlayInfoListItem> {
|
|
|
2409
2424
|
* @brief 多语言词典中对应的 key。比如 `lineTextKey: LINE_ONE`。
|
|
2410
2425
|
*/
|
|
2411
2426
|
lineTextKey?: string;
|
|
2427
|
+
/**
|
|
2428
|
+
* @brief 该码流视频的宽度,单位为 px
|
|
2429
|
+
* @default -
|
|
2430
|
+
*/
|
|
2431
|
+
width?: number;
|
|
2432
|
+
/**
|
|
2433
|
+
* @brief 该码流视频的高度,单位为 px
|
|
2434
|
+
* @default -
|
|
2435
|
+
*/
|
|
2436
|
+
height?: number;
|
|
2412
2437
|
/**
|
|
2413
2438
|
* @brief 码流的平均码率
|
|
2414
2439
|
* @default -
|
|
@@ -2511,7 +2536,7 @@ export declare type Url = string | Array<{
|
|
|
2511
2536
|
* @brief 播放器实例化配置。
|
|
2512
2537
|
*/
|
|
2513
2538
|
/** {en}
|
|
2514
|
-
* @brief Player
|
|
2539
|
+
* @brief Player instantiation configuration.
|
|
2515
2540
|
*/
|
|
2516
2541
|
export interface IPlayerConfig extends IPlayerOptions {
|
|
2517
2542
|
/** {zh}
|
|
@@ -2519,6 +2544,9 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
2519
2544
|
* @default false
|
|
2520
2545
|
* @hidden
|
|
2521
2546
|
*/
|
|
2547
|
+
/** {en}
|
|
2548
|
+
* @hidden
|
|
2549
|
+
*/
|
|
2522
2550
|
isLive?: boolean;
|
|
2523
2551
|
/** {zh}
|
|
2524
2552
|
* @brief 播放器容器 ID。播放器将被插入在该容器中。
|
|
@@ -2796,6 +2824,9 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
2796
2824
|
* @default 无
|
|
2797
2825
|
* @hidden 直播目前没用到
|
|
2798
2826
|
*/
|
|
2827
|
+
/** {en}
|
|
2828
|
+
* @hidden
|
|
2829
|
+
*/
|
|
2799
2830
|
commonStyle?: ICommonStyle;
|
|
2800
2831
|
/** {zh}
|
|
2801
2832
|
* @brief 是否开启音乐播放模式。开启后,您可还通过 `music` 参数对音乐播放器进行配置。取值如下:
|
|
@@ -2812,6 +2843,9 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
2812
2843
|
* @type {boolean}
|
|
2813
2844
|
* @memberof IPlayerConfig
|
|
2814
2845
|
*/
|
|
2846
|
+
/** {en}
|
|
2847
|
+
* @hidden
|
|
2848
|
+
*/
|
|
2815
2849
|
enableContextmenu?: boolean;
|
|
2816
2850
|
/** {zh}
|
|
2817
2851
|
* @brief 是否关闭 `video` 标签的事件冒泡。取值如下:
|
|
@@ -2829,54 +2863,95 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
2829
2863
|
*/
|
|
2830
2864
|
enableMenu?: boolean;
|
|
2831
2865
|
/**
|
|
2832
|
-
* @brief
|
|
2866
|
+
* @brief 是否禁用 PC 端点击播放器区域切换播放和暂停功能。
|
|
2833
2867
|
* @default false
|
|
2868
|
+
* @hidden
|
|
2869
|
+
*/
|
|
2870
|
+
/** {en}
|
|
2871
|
+
* @brief Whether to disable the ability to toggle play and pause by clicking on the player area on PC.
|
|
2872
|
+
* @hidden
|
|
2834
2873
|
*/
|
|
2835
2874
|
closeVideoClick?: boolean;
|
|
2836
2875
|
/**
|
|
2837
2876
|
* @brief pc端: 是否关闭双击播放器进入全屏的能力
|
|
2838
2877
|
* mobile端: 是否关闭双击切换暂停/播放的能力
|
|
2839
2878
|
* @default pc端: true, mobile端: false
|
|
2879
|
+
* @hidden
|
|
2880
|
+
*/
|
|
2881
|
+
/** {en}
|
|
2882
|
+
* @hidden
|
|
2840
2883
|
*/
|
|
2841
2884
|
closeVideoDblclick?: boolean;
|
|
2842
2885
|
/**
|
|
2843
2886
|
* @brief 是否关闭播放器自动失焦(只在pc端生效)
|
|
2844
2887
|
* @default false
|
|
2888
|
+
* @hidden
|
|
2889
|
+
*/
|
|
2890
|
+
/** {en}
|
|
2891
|
+
* @hidden
|
|
2845
2892
|
*/
|
|
2846
2893
|
closeDelayBlur?: boolean;
|
|
2847
2894
|
/**
|
|
2848
2895
|
* @brief 播放器focus状态自动消失延迟时长,单位为ms
|
|
2849
2896
|
* @default pc端: 2000, mobile端: 3000
|
|
2897
|
+
* @hidden
|
|
2898
|
+
*/
|
|
2899
|
+
/** {en}
|
|
2900
|
+
* @hidden
|
|
2850
2901
|
*/
|
|
2851
2902
|
inactive?: number;
|
|
2852
2903
|
/**
|
|
2853
2904
|
* @brief 用户鼠标离开播放器区域之后,控制栏隐藏延时时间,如果想要鼠标移出播放器区域就隐藏,则配置为0(只在pc端生效)
|
|
2854
2905
|
* @default 0
|
|
2906
|
+
* @hidden
|
|
2907
|
+
*/
|
|
2908
|
+
/** {en}
|
|
2909
|
+
* @hidden
|
|
2855
2910
|
*/
|
|
2856
2911
|
leavePlayerTime?: number;
|
|
2857
2912
|
/**
|
|
2858
2913
|
* @brief 是否关闭play时触发player焦点状态
|
|
2859
2914
|
* @default pc端:true, mobile端:false
|
|
2915
|
+
* @hidden
|
|
2916
|
+
*/
|
|
2917
|
+
/** {en}
|
|
2918
|
+
* @hidden
|
|
2860
2919
|
*/
|
|
2861
2920
|
closePlayVideoFocus?: boolean;
|
|
2862
2921
|
/**
|
|
2863
2922
|
* @brief 是否关闭pause时触发player焦点状态,会强制呼出控制栏
|
|
2864
2923
|
* @default false
|
|
2924
|
+
* @hidden
|
|
2925
|
+
*/
|
|
2926
|
+
/** {en}
|
|
2927
|
+
* @hidden
|
|
2865
2928
|
*/
|
|
2866
2929
|
closePauseVideoFocus?: boolean;
|
|
2867
2930
|
/**
|
|
2868
2931
|
* @brief 是否需要在退出全屏后滚动定位到全屏之前的位置。(一般安卓下退出全屏后页面会滚动)
|
|
2869
2932
|
* @default false
|
|
2933
|
+
* @hidden
|
|
2934
|
+
*/
|
|
2935
|
+
/** {en}
|
|
2936
|
+
* @hidden
|
|
2870
2937
|
*/
|
|
2871
2938
|
needFullscreenScroll?: boolean;
|
|
2872
2939
|
/**
|
|
2873
2940
|
* @brief 移动端交互插件配置
|
|
2874
2941
|
* @default -
|
|
2942
|
+
* @hidden
|
|
2943
|
+
*/
|
|
2944
|
+
/** {en}
|
|
2945
|
+
* @hidden
|
|
2875
2946
|
*/
|
|
2876
2947
|
mobile?: IMobileConfig;
|
|
2877
2948
|
/**
|
|
2878
2949
|
* @brief 播放器中间切换暂停/播放的按钮插件配置
|
|
2879
2950
|
* @default -
|
|
2951
|
+
* @hidden
|
|
2952
|
+
*/
|
|
2953
|
+
/** {en}
|
|
2954
|
+
* @hidden
|
|
2880
2955
|
*/
|
|
2881
2956
|
start?: IStartConfig;
|
|
2882
2957
|
/** {zh}
|
|
@@ -2920,11 +2995,17 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
2920
2995
|
* @brief 默认配置
|
|
2921
2996
|
* @hidden
|
|
2922
2997
|
*/
|
|
2998
|
+
/** {en}
|
|
2999
|
+
* @hidden
|
|
3000
|
+
*/
|
|
2923
3001
|
defaultConfig?: IDefaultConfig;
|
|
2924
3002
|
/** {zh}
|
|
2925
3003
|
* @hidden
|
|
2926
3004
|
* @brief 模拟mobile
|
|
2927
3005
|
*/
|
|
3006
|
+
/** {en}
|
|
3007
|
+
* @hidden
|
|
3008
|
+
*/
|
|
2928
3009
|
isMobile?: boolean;
|
|
2929
3010
|
/** {zh}
|
|
2930
3011
|
* @brief UMD 依赖备用地址。用于依赖的 CDN 发生网络错误时的降级备用地址。支持的依赖如下:
|
|
@@ -3002,6 +3083,9 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
3002
3083
|
* @brief 播放源过期的回调函数。可用来更新播放源数据。
|
|
3003
3084
|
* @default -
|
|
3004
3085
|
*/
|
|
3086
|
+
/** {en}
|
|
3087
|
+
* @hidden
|
|
3088
|
+
*/
|
|
3005
3089
|
onMediaExpired?: () => Promise<SourceConfig>;
|
|
3006
3090
|
/** {zh}
|
|
3007
3091
|
* @brief 临时播放 Token 过期时的回调函数,可用来更新临时播放 Token。
|
|
@@ -3013,12 +3097,18 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
3013
3097
|
* @brief 禁用点播日志配置检测,默认开启,如果未配置line_app_id则会播放报错
|
|
3014
3098
|
* @default -
|
|
3015
3099
|
*/
|
|
3100
|
+
/** {en}
|
|
3101
|
+
* @hidden
|
|
3102
|
+
*/
|
|
3016
3103
|
disableVodLogOptsCheck?: boolean;
|
|
3017
3104
|
/** {zh}
|
|
3018
3105
|
* @hidden
|
|
3019
3106
|
* @brief 是否打开日志打印
|
|
3020
3107
|
* @default false
|
|
3021
3108
|
*/
|
|
3109
|
+
/** {en}
|
|
3110
|
+
* @hidden
|
|
3111
|
+
*/
|
|
3022
3112
|
debug?: boolean;
|
|
3023
3113
|
/** {zh}
|
|
3024
3114
|
* @brief 播放器报错信息。支持配置播放异常时显示的异常文案、图片以及是否提供刷新按钮等。
|
|
@@ -3031,6 +3121,9 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
3031
3121
|
* @default -
|
|
3032
3122
|
* @hidden
|
|
3033
3123
|
*/
|
|
3124
|
+
/** {en}
|
|
3125
|
+
* @hidden
|
|
3126
|
+
*/
|
|
3034
3127
|
rtm?: IRtmConfig;
|
|
3035
3128
|
/** {zh}
|
|
3036
3129
|
* @brief 弹幕及面板配置。支持配置弹幕文字大小、透明度、展示区域等参数。
|
|
@@ -3047,6 +3140,9 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
3047
3140
|
* @brief DASH 播放配置项
|
|
3048
3141
|
* @default -
|
|
3049
3142
|
*/
|
|
3143
|
+
/** {en}
|
|
3144
|
+
* @hidden
|
|
3145
|
+
*/
|
|
3050
3146
|
DASHPlugin?: Partial<IDashPluginConfig>;
|
|
3051
3147
|
/** {zh}
|
|
3052
3148
|
* @brief HLS 加密播放配置。
|
|
@@ -3063,12 +3159,33 @@ export interface IPlayerConfig extends IPlayerOptions {
|
|
|
3063
3159
|
* @brief mp4加密播放配置项
|
|
3064
3160
|
* @default -
|
|
3065
3161
|
*/
|
|
3162
|
+
/** {en}
|
|
3163
|
+
* @hidden
|
|
3164
|
+
*/
|
|
3066
3165
|
Mp4EncryptPlayer?: Partial<IMp4EncryptPlayerConfig> | boolean;
|
|
3067
3166
|
/** {zh}
|
|
3068
3167
|
* @brief 自适应码率配置。
|
|
3069
3168
|
* @default -
|
|
3070
3169
|
*/
|
|
3071
3170
|
autoBitrateOpts?: IAutoBitrateOpts;
|
|
3171
|
+
/** {zh}
|
|
3172
|
+
* @brief Range拆分(动态Buffer)
|
|
3173
|
+
* @default -
|
|
3174
|
+
* @hidden
|
|
3175
|
+
*/
|
|
3176
|
+
/** {en}
|
|
3177
|
+
* @hidden
|
|
3178
|
+
*/
|
|
3179
|
+
adaptRange?: IAdaptRange;
|
|
3180
|
+
/** {zh}
|
|
3181
|
+
* @brief 视频时长。
|
|
3182
|
+
* @default -
|
|
3183
|
+
* @hidden
|
|
3184
|
+
*/
|
|
3185
|
+
/** {en}
|
|
3186
|
+
* @hidden
|
|
3187
|
+
*/
|
|
3188
|
+
duration?: number;
|
|
3072
3189
|
/** {zh}
|
|
3073
3190
|
* @brief 外挂字幕配置。
|
|
3074
3191
|
* @default -
|
|
@@ -3116,6 +3233,9 @@ export declare type SourceConfig = Pick<IPlayerConfig, "url" | "playList" | "get
|
|
|
3116
3233
|
/** {zh}
|
|
3117
3234
|
* @hidden
|
|
3118
3235
|
*/
|
|
3236
|
+
/** {en}
|
|
3237
|
+
* @hidden
|
|
3238
|
+
*/
|
|
3119
3239
|
export interface IDefaultConfig {
|
|
3120
3240
|
/** {zh}
|
|
3121
3241
|
* @brief “点播”还是“直播”
|
|
@@ -3255,17 +3375,20 @@ export interface IPlayAuthTokenConfig {
|
|
|
3255
3375
|
/**
|
|
3256
3376
|
* @brief 商业DRM 获取license的token
|
|
3257
3377
|
* @default -
|
|
3378
|
+
* @hidden
|
|
3258
3379
|
*/
|
|
3259
3380
|
thirdPartyDrmAuthToken?: string;
|
|
3260
3381
|
/**
|
|
3261
3382
|
* @brief 商业DRM,获取fairplay证书的地址
|
|
3262
3383
|
* @default -
|
|
3384
|
+
* @hidden
|
|
3263
3385
|
*/
|
|
3264
3386
|
serverCertificatePath?: string;
|
|
3265
3387
|
/**
|
|
3266
3388
|
* @brief 商业DRM播放时,是否开启防录屏检测
|
|
3267
3389
|
* @notice 如果开启后检测到当前环境不支持,则报错
|
|
3268
3390
|
* @default true
|
|
3391
|
+
* @hidden
|
|
3269
3392
|
*/
|
|
3270
3393
|
unRecord?: boolean;
|
|
3271
3394
|
/** {zh}
|
|
@@ -3598,12 +3721,16 @@ declare enum StrategyNames {
|
|
|
3598
3721
|
/**
|
|
3599
3722
|
* 预加载
|
|
3600
3723
|
*/
|
|
3601
|
-
PRELOAD = "preload"
|
|
3724
|
+
PRELOAD = "preload",
|
|
3725
|
+
/**
|
|
3726
|
+
* Range拆分-动态Buffer
|
|
3727
|
+
*/
|
|
3728
|
+
ADAPT_RANGE = "adaptRange"
|
|
3602
3729
|
}
|
|
3603
3730
|
/**{zh}
|
|
3604
3731
|
* @hidden
|
|
3605
3732
|
* h265策略配置
|
|
3606
|
-
* @detail
|
|
3733
|
+
* @detail Options
|
|
3607
3734
|
*/
|
|
3608
3735
|
export declare type IH265Config = {
|
|
3609
3736
|
/**
|
|
@@ -3617,7 +3744,11 @@ export declare type IH265Config = {
|
|
|
3617
3744
|
} & VeStrategyH265Config;
|
|
3618
3745
|
/**{zh}
|
|
3619
3746
|
* 预加载初始配置
|
|
3620
|
-
* @detail
|
|
3747
|
+
* @detail Options
|
|
3748
|
+
* @hidden
|
|
3749
|
+
*/
|
|
3750
|
+
/** {en}
|
|
3751
|
+
* @hidden
|
|
3621
3752
|
*/
|
|
3622
3753
|
export declare type IPreloadConfig = {
|
|
3623
3754
|
/**
|
|
@@ -3655,12 +3786,33 @@ export declare type IPreloadConfig = {
|
|
|
3655
3786
|
disabled?: boolean;
|
|
3656
3787
|
};
|
|
3657
3788
|
/**{zh}
|
|
3658
|
-
*
|
|
3789
|
+
* Range拆分(动态Buffer)策略初始配置
|
|
3659
3790
|
* @detail detail
|
|
3791
|
+
* @hidden
|
|
3792
|
+
*/
|
|
3793
|
+
/** {en}
|
|
3794
|
+
* @hidden
|
|
3795
|
+
*/
|
|
3796
|
+
export declare type IAdaptRangeConfig = {
|
|
3797
|
+
/**
|
|
3798
|
+
* 预加载依赖Module
|
|
3799
|
+
*/
|
|
3800
|
+
Strategy?: any;
|
|
3801
|
+
/**
|
|
3802
|
+
* 是否禁用Range拆分策略
|
|
3803
|
+
*/
|
|
3804
|
+
disabled?: boolean;
|
|
3805
|
+
};
|
|
3806
|
+
/**{zh}
|
|
3807
|
+
* 高级能力(策略)配置
|
|
3808
|
+
* @detail Options
|
|
3809
|
+
* @hidden
|
|
3810
|
+
*/
|
|
3811
|
+
/** {en}
|
|
3812
|
+
* @hidden
|
|
3660
3813
|
*/
|
|
3661
3814
|
export declare type StrategyConfigOptions = {
|
|
3662
3815
|
/**
|
|
3663
|
-
* @hidden
|
|
3664
3816
|
* h265策略配置
|
|
3665
3817
|
*/
|
|
3666
3818
|
[StrategyNames.H265]?: boolean | IH265Config;
|
|
@@ -3668,10 +3820,18 @@ export declare type StrategyConfigOptions = {
|
|
|
3668
3820
|
* 预加载配置
|
|
3669
3821
|
*/
|
|
3670
3822
|
[StrategyNames.PRELOAD]?: boolean | IPreloadConfig;
|
|
3823
|
+
/**
|
|
3824
|
+
* Range拆分(动态Buffer)
|
|
3825
|
+
*/
|
|
3826
|
+
[StrategyNames.ADAPT_RANGE]?: boolean | IAdaptRangeConfig;
|
|
3671
3827
|
};
|
|
3672
3828
|
/**{zh}
|
|
3673
3829
|
* 播放器预初始化配置
|
|
3674
|
-
* @detail
|
|
3830
|
+
* @detail Options
|
|
3831
|
+
* @hidden
|
|
3832
|
+
*/
|
|
3833
|
+
/** {en}
|
|
3834
|
+
* @hidden
|
|
3675
3835
|
*/
|
|
3676
3836
|
export declare type StrategyInitOptions = {
|
|
3677
3837
|
/**
|
|
@@ -3697,7 +3857,8 @@ export declare type StrategyInitOptions = {
|
|
|
3697
3857
|
};
|
|
3698
3858
|
/**{zh}
|
|
3699
3859
|
* 预加载实例,通过预加载实例可执行一些高级方法
|
|
3700
|
-
* @detail
|
|
3860
|
+
* @detail Options
|
|
3861
|
+
* @hidden
|
|
3701
3862
|
*/
|
|
3702
3863
|
export declare type PreloaderManager = {
|
|
3703
3864
|
/**
|
|
@@ -3733,7 +3894,8 @@ declare enum PreloaderStatus {
|
|
|
3733
3894
|
}
|
|
3734
3895
|
/**{zh}
|
|
3735
3896
|
* 预加载配置更新
|
|
3736
|
-
* @detail
|
|
3897
|
+
* @detail Options
|
|
3898
|
+
* @hidden
|
|
3737
3899
|
*/
|
|
3738
3900
|
export declare type IPreloadUpdateConfig = {
|
|
3739
3901
|
/**
|
|
@@ -3747,7 +3909,11 @@ export declare type IPreloadUpdateConfig = {
|
|
|
3747
3909
|
};
|
|
3748
3910
|
/**{zh}
|
|
3749
3911
|
* 预加载视频资源
|
|
3750
|
-
* @detail
|
|
3912
|
+
* @detail Options
|
|
3913
|
+
* @hidden
|
|
3914
|
+
*/
|
|
3915
|
+
/** {en}
|
|
3916
|
+
* @hidden
|
|
3751
3917
|
*/
|
|
3752
3918
|
export declare type IPreloadStream = {
|
|
3753
3919
|
/**
|
|
@@ -3812,12 +3978,83 @@ declare class VeStrategyWrapper {
|
|
|
3812
3978
|
prepare(): Promise<boolean>;
|
|
3813
3979
|
getDeviceId(): string;
|
|
3814
3980
|
isReady(): boolean;
|
|
3815
|
-
getStrategyRecommendations(): StrategyRecommendation;
|
|
3816
|
-
getStrategyRecommendationsAsync(): Promise<StrategyRecommendation>;
|
|
3981
|
+
getStrategyRecommendations(options?: any, commonOptions?: any): StrategyRecommendation;
|
|
3982
|
+
getStrategyRecommendationsAsync(options?: any, commonOptions?: any): Promise<StrategyRecommendation>;
|
|
3817
3983
|
isHevcRecommended(): boolean;
|
|
3818
3984
|
private initPreloaderConfig;
|
|
3819
3985
|
}
|
|
3820
3986
|
declare const _default: VeStrategyWrapper;
|
|
3987
|
+
export declare type IRes = IGetPlayInfoRes & {
|
|
3988
|
+
Data: IGetPlayInfoRes & {
|
|
3989
|
+
VideoID?: string;
|
|
3990
|
+
};
|
|
3991
|
+
};
|
|
3992
|
+
export interface IDefItem extends Stream {
|
|
3993
|
+
vid: string;
|
|
3994
|
+
lineId?: number;
|
|
3995
|
+
lineName?: string;
|
|
3996
|
+
url: string;
|
|
3997
|
+
streamType: string;
|
|
3998
|
+
backupUrl: string;
|
|
3999
|
+
backUrlList: string[];
|
|
4000
|
+
fileType?: "video" | "audio" | "evideo" | "eaudio";
|
|
4001
|
+
format: string;
|
|
4002
|
+
bitrate?: number;
|
|
4003
|
+
size?: number;
|
|
4004
|
+
kid?: string;
|
|
4005
|
+
vwidth?: number;
|
|
4006
|
+
vheight?: number;
|
|
4007
|
+
}
|
|
4008
|
+
export interface VideoInfoRes {
|
|
4009
|
+
playList: IDefItem[];
|
|
4010
|
+
type?: string;
|
|
4011
|
+
poster: string;
|
|
4012
|
+
vid: string;
|
|
4013
|
+
duration: number;
|
|
4014
|
+
dashOpts: IRes | {
|
|
4015
|
+
Data: IRes;
|
|
4016
|
+
};
|
|
4017
|
+
thumbs: IThumbInfoItem[];
|
|
4018
|
+
barrageMaskUrl: string;
|
|
4019
|
+
enableAdaptive?: boolean;
|
|
4020
|
+
adaptiveBitrateStreamingInfo?: ABRInfo;
|
|
4021
|
+
}
|
|
4022
|
+
declare function isMSESupport(mime?: string): boolean;
|
|
4023
|
+
export interface IAdaptRangeDefaultOptions {
|
|
4024
|
+
maxTargetCacheDur: number;
|
|
4025
|
+
minTargetCacheDur: number;
|
|
4026
|
+
rangeMaxDuration: number;
|
|
4027
|
+
rangeMinDuration: number;
|
|
4028
|
+
cacheSafeFactor: number;
|
|
4029
|
+
estPTcontrol: boolean;
|
|
4030
|
+
estPlayTime: number;
|
|
4031
|
+
minBandwidth: number;
|
|
4032
|
+
minDangerThreshold: number;
|
|
4033
|
+
rangeControl: boolean;
|
|
4034
|
+
rangeMinSize: number;
|
|
4035
|
+
safeFactor: number;
|
|
4036
|
+
targetCacheControl: boolean;
|
|
4037
|
+
}
|
|
4038
|
+
declare abstract class AbstractBaseAdapter {
|
|
4039
|
+
isLive: boolean;
|
|
4040
|
+
playerData: PlayerData;
|
|
4041
|
+
streamType: string;
|
|
4042
|
+
constructor(options: {
|
|
4043
|
+
configs: IPlayerConfig;
|
|
4044
|
+
playerData: PlayerData;
|
|
4045
|
+
streamType: string;
|
|
4046
|
+
});
|
|
4047
|
+
abstract canOpenAbr(vidPlayInfo?: VideoInfoRes): boolean;
|
|
4048
|
+
abstract applyAbrPluginConfig(_finalOptions: any, _autoBitrateOpts: any): void;
|
|
4049
|
+
abstract prepareAbrModule(_playerData: any, _sdkUmdLoader: any): void;
|
|
4050
|
+
abstract needAbrAutoDefinition(): boolean;
|
|
4051
|
+
abstract setAbrDefaultDefiWithAuto(): boolean;
|
|
4052
|
+
abstract generatePlaylistFromServer(res: VideoInfoRes): Stream[];
|
|
4053
|
+
abstract canAdaptRangeEnable(): boolean;
|
|
4054
|
+
abstract adaptRangeDefaultOptions(): IAdaptRangeDefaultOptions | undefined;
|
|
4055
|
+
abstract applyAdaptRangePluginConfig(_finalOptions: any, _adaptRangeOptions: any): void;
|
|
4056
|
+
abstract applyAdaptRangeStrategy(_finalOptions: any, _adaptRangeOptions: any): void;
|
|
4057
|
+
}
|
|
3821
4058
|
declare class PlayerData {
|
|
3822
4059
|
id?: string;
|
|
3823
4060
|
root?: HTMLElement;
|
|
@@ -3861,18 +4098,27 @@ declare class PlayerData {
|
|
|
3861
4098
|
urlExpireDiff: number;
|
|
3862
4099
|
urlCheckExpireInterval: number;
|
|
3863
4100
|
};
|
|
4101
|
+
private isAutoBitrateEnable;
|
|
4102
|
+
adapter: AbstractBaseAdapter;
|
|
3864
4103
|
isBusinessDrm: boolean;
|
|
3865
4104
|
isEncrypt: boolean;
|
|
3866
4105
|
dashOpts: {
|
|
3867
4106
|
Data: IGetPlayInfoRes;
|
|
3868
4107
|
};
|
|
3869
|
-
|
|
4108
|
+
sdk: VePlayer;
|
|
4109
|
+
constructor(configs: IPlayerConfig, sdk: VePlayer);
|
|
3870
4110
|
/**
|
|
3871
4111
|
* 初始化播放数据
|
|
3872
4112
|
* @param configs { IPlayerConfig } 播放器配置
|
|
3873
4113
|
*/
|
|
3874
4114
|
initPlayData(configs: IPlayerConfig): void;
|
|
3875
4115
|
initPlaylistAndGetCurrent(configs: IPlayerConfig): Stream;
|
|
4116
|
+
checkAutoBitratePlayList(): boolean;
|
|
4117
|
+
getABRStreamInfo(streamType: any, originDefaultStream: any): {
|
|
4118
|
+
defaultDefinition: string;
|
|
4119
|
+
defaultStream: any;
|
|
4120
|
+
playList: Stream[];
|
|
4121
|
+
};
|
|
3876
4122
|
isCurrentH265(): boolean;
|
|
3877
4123
|
getCurrentByDefaultConfig(): Stream;
|
|
3878
4124
|
initCurrent(currentStreams: Stream): void;
|
|
@@ -3889,12 +4135,13 @@ declare class PlayerData {
|
|
|
3889
4135
|
* @description: 获取当前直播url
|
|
3890
4136
|
*/
|
|
3891
4137
|
getCurrentUrl(): Url;
|
|
4138
|
+
getTargetStreamType(stream?: Stream): string;
|
|
3892
4139
|
/**
|
|
3893
4140
|
* @description: 获取当前的streamType
|
|
3894
4141
|
*/
|
|
3895
4142
|
getCurrentStreamType(): string;
|
|
3896
4143
|
getStreamType(): string;
|
|
3897
|
-
isOpenABR(
|
|
4144
|
+
isOpenABR(): boolean;
|
|
3898
4145
|
showRealDefinition(): boolean;
|
|
3899
4146
|
isAutoDefinition(def: any): boolean;
|
|
3900
4147
|
isPlayAutoDefinition(def?: string): boolean;
|
|
@@ -3947,8 +4194,8 @@ declare class PlayerData {
|
|
|
3947
4194
|
* 更新playList
|
|
3948
4195
|
*/
|
|
3949
4196
|
updatePlayList(): void;
|
|
4197
|
+
isVidPlay(): boolean;
|
|
3950
4198
|
}
|
|
3951
|
-
declare function isMSESupport(mime?: string): boolean;
|
|
3952
4199
|
/**
|
|
3953
4200
|
* @hidden
|
|
3954
4201
|
* @brief 移动端交互面板配置
|
|
@@ -3998,6 +4245,7 @@ declare enum UmdKeys {
|
|
|
3998
4245
|
VeStrategy = "vestrategy",
|
|
3999
4246
|
VeStrategyH265 = "vestrategy_h265",
|
|
4000
4247
|
VeStrategyPreload = "vestrategy_preload",
|
|
4248
|
+
VeStrategyAdaptRange = "vestrategy_adapt_range",
|
|
4001
4249
|
DashAbralgo = "DashAbralgo",
|
|
4002
4250
|
Preloader = "preloader"
|
|
4003
4251
|
}
|
|
@@ -4081,6 +4329,9 @@ declare class VePlayer {
|
|
|
4081
4329
|
* @type {PlayerData}
|
|
4082
4330
|
* @memberof VePlayer
|
|
4083
4331
|
*/
|
|
4332
|
+
/** {en}
|
|
4333
|
+
* @hidden
|
|
4334
|
+
*/
|
|
4084
4335
|
playerData: PlayerData;
|
|
4085
4336
|
/** {zh}
|
|
4086
4337
|
* @brief 播放器内核实例,详情参考{@link https://www.volcengine.com/docs/4/1249083 播放器内核}。
|
|
@@ -4094,6 +4345,9 @@ declare class VePlayer {
|
|
|
4094
4345
|
* @type {*}
|
|
4095
4346
|
* @memberof VePlayer
|
|
4096
4347
|
*/
|
|
4348
|
+
/** {en}
|
|
4349
|
+
* @hidden
|
|
4350
|
+
*/
|
|
4097
4351
|
mountingDom: Element;
|
|
4098
4352
|
/** {zh}
|
|
4099
4353
|
* @hidden
|
|
@@ -4101,6 +4355,9 @@ declare class VePlayer {
|
|
|
4101
4355
|
* @type {*}
|
|
4102
4356
|
* @memberof VePlayer
|
|
4103
4357
|
*/
|
|
4358
|
+
/** {en}
|
|
4359
|
+
* @hidden
|
|
4360
|
+
*/
|
|
4104
4361
|
playerContainer: any;
|
|
4105
4362
|
/** {zh}
|
|
4106
4363
|
* @hidden
|
|
@@ -4108,6 +4365,9 @@ declare class VePlayer {
|
|
|
4108
4365
|
* @type {*}
|
|
4109
4366
|
* @memberof VePlayer
|
|
4110
4367
|
*/
|
|
4368
|
+
/** {en}
|
|
4369
|
+
* @hidden
|
|
4370
|
+
*/
|
|
4111
4371
|
mobilePanel: any;
|
|
4112
4372
|
/** {zh}
|
|
4113
4373
|
*
|
|
@@ -4165,6 +4425,7 @@ declare class VePlayer {
|
|
|
4165
4425
|
* @memberof VePlayer
|
|
4166
4426
|
*/
|
|
4167
4427
|
sdkUmdLoader: umdLoader;
|
|
4428
|
+
private adapter;
|
|
4168
4429
|
/**
|
|
4169
4430
|
* @hidden
|
|
4170
4431
|
*/
|
|
@@ -4183,33 +4444,35 @@ declare class VePlayer {
|
|
|
4183
4444
|
* @memberof VePlayer
|
|
4184
4445
|
*/
|
|
4185
4446
|
static sdkVersion: string;
|
|
4186
|
-
/**{zh}
|
|
4187
|
-
* @brief
|
|
4447
|
+
/** {zh}
|
|
4448
|
+
* @brief 播放策略预初始化配置
|
|
4188
4449
|
* @param options 初始化配置,详情见{@link StrategyInitOptions}
|
|
4189
4450
|
*/
|
|
4190
4451
|
static prepare(options: StrategyInitOptions): Promise<void>;
|
|
4191
|
-
/**{zh}
|
|
4452
|
+
/** {zh}
|
|
4192
4453
|
* @brief 设置预加载模式
|
|
4193
4454
|
* @param preloadScene 预加载模式,详情见{@link PreloadScene}
|
|
4194
4455
|
* @param options 预加载配置更新,详情见{@link IPreloadUpdateConfig}
|
|
4195
4456
|
*/
|
|
4196
4457
|
static setPreloadScene(preloadScene: PreloadScene, options?: IPreloadUpdateConfig): void;
|
|
4197
|
-
/**{zh}
|
|
4198
|
-
* @
|
|
4199
|
-
* @
|
|
4458
|
+
/** {zh}
|
|
4459
|
+
* @hidden
|
|
4460
|
+
* @brief 获取预加载实例,可通过预加载实例执行高级方法,需在 `VePlayer.prepare` 的 Promise 执行完成之后才能获取到预加载实例。
|
|
4461
|
+
* @returns 预加载实例,详见 {@link PreloaderManager}
|
|
4200
4462
|
*/
|
|
4201
4463
|
static get preloader(): PreloaderManager | undefined;
|
|
4202
|
-
/**{zh}
|
|
4203
|
-
* @
|
|
4204
|
-
* @
|
|
4464
|
+
/** {zh}
|
|
4465
|
+
* @hidden
|
|
4466
|
+
* @brief 获取当前预加载实例状态。
|
|
4467
|
+
* @returns 预加载实例状态,详见 {@link PreloaderStatus}
|
|
4205
4468
|
*/
|
|
4206
4469
|
static get preloaderStatus(): PreloaderStatus;
|
|
4207
|
-
/**{zh}
|
|
4470
|
+
/** {zh}
|
|
4208
4471
|
* @brief 添加待预加载视频列表
|
|
4209
4472
|
* @param list 待预加载视频列表,详情见{@link IPreloadStream[]}。
|
|
4210
4473
|
*/
|
|
4211
4474
|
static addPreloadList(list: IPreloadStream[]): void;
|
|
4212
|
-
/**{zh}
|
|
4475
|
+
/** {zh}
|
|
4213
4476
|
* @brief 设置待预加载视频列表,替换当前已设置的待预加载列表
|
|
4214
4477
|
* @param list 待预加载视频列表,详情见{@link IPreloadStream[]}
|
|
4215
4478
|
*/
|
|
@@ -4318,6 +4581,9 @@ declare class VePlayer {
|
|
|
4318
4581
|
*
|
|
4319
4582
|
* @memberof VePlayer
|
|
4320
4583
|
*/
|
|
4584
|
+
/** {en}
|
|
4585
|
+
* @hidden
|
|
4586
|
+
*/
|
|
4321
4587
|
renderDom(): void;
|
|
4322
4588
|
/** {zh}
|
|
4323
4589
|
* @hidden
|
|
@@ -4325,6 +4591,9 @@ declare class VePlayer {
|
|
|
4325
4591
|
* @return {*}
|
|
4326
4592
|
* @memberof VePlayer
|
|
4327
4593
|
*/
|
|
4594
|
+
/** {en}
|
|
4595
|
+
* @hidden
|
|
4596
|
+
*/
|
|
4328
4597
|
renderPoster(): void;
|
|
4329
4598
|
/**
|
|
4330
4599
|
* @brief 获取西瓜的definition的配置,用于在创建player或者在playNext()时传入definition,
|
|
@@ -4338,6 +4607,9 @@ declare class VePlayer {
|
|
|
4338
4607
|
* @return {*}
|
|
4339
4608
|
* @memberof VePlayer
|
|
4340
4609
|
*/
|
|
4610
|
+
/** {en}
|
|
4611
|
+
* @hidden
|
|
4612
|
+
*/
|
|
4341
4613
|
createPlayer(): Promise<PlayerCore>;
|
|
4342
4614
|
/** {zh}
|
|
4343
4615
|
* @hidden
|
|
@@ -4346,6 +4618,9 @@ declare class VePlayer {
|
|
|
4346
4618
|
* @return {void}
|
|
4347
4619
|
* @memberof VePlayer
|
|
4348
4620
|
*/
|
|
4621
|
+
/** {en}
|
|
4622
|
+
* @hidden
|
|
4623
|
+
*/
|
|
4349
4624
|
setPluginConfig(finalOptions: IPlayerConfig): void;
|
|
4350
4625
|
/** {zh}
|
|
4351
4626
|
* @hidden
|
|
@@ -4353,6 +4628,9 @@ declare class VePlayer {
|
|
|
4353
4628
|
* @param {string} url 地址
|
|
4354
4629
|
* @memberof VePlayer
|
|
4355
4630
|
*/
|
|
4631
|
+
/** {en}
|
|
4632
|
+
* @hidden
|
|
4633
|
+
*/
|
|
4356
4634
|
detectCodec(url: string): Promise<void>;
|
|
4357
4635
|
/** {zh}
|
|
4358
4636
|
* @hidden
|
|
@@ -4361,6 +4639,9 @@ declare class VePlayer {
|
|
|
4361
4639
|
* @return {*}
|
|
4362
4640
|
* @memberof VePlayer
|
|
4363
4641
|
*/
|
|
4642
|
+
/** {en}
|
|
4643
|
+
* @hidden
|
|
4644
|
+
*/
|
|
4364
4645
|
setDefaultConfigOptions(options: any): void;
|
|
4365
4646
|
/** {zh}
|
|
4366
4647
|
* @brief 获取当前播放视频数据
|
|
@@ -4368,6 +4649,9 @@ declare class VePlayer {
|
|
|
4368
4649
|
* @return {any}
|
|
4369
4650
|
* @memberof VePlayer
|
|
4370
4651
|
*/
|
|
4652
|
+
/** {en}
|
|
4653
|
+
* @hidden
|
|
4654
|
+
*/
|
|
4371
4655
|
getCurrentPlayerConfig(): {
|
|
4372
4656
|
type?: "vod" | "live";
|
|
4373
4657
|
isLive?: boolean;
|
|
@@ -4476,6 +4760,9 @@ declare class VePlayer {
|
|
|
4476
4760
|
* @param {*} pluginName
|
|
4477
4761
|
* @param {*} IsShow
|
|
4478
4762
|
*/
|
|
4763
|
+
/** {en}
|
|
4764
|
+
* @hidden
|
|
4765
|
+
*/
|
|
4479
4766
|
changePluginsIcon(pluginName: any, IsShow: any): void;
|
|
4480
4767
|
/** {zh}
|
|
4481
4768
|
* @hidden
|
|
@@ -4485,18 +4772,23 @@ declare class VePlayer {
|
|
|
4485
4772
|
* @return {*}
|
|
4486
4773
|
* @memberof VePlayer
|
|
4487
4774
|
*/
|
|
4775
|
+
/** {en}
|
|
4776
|
+
* @hidden
|
|
4777
|
+
*/
|
|
4488
4778
|
getSdkPlugin(name: any): any;
|
|
4489
4779
|
/** {zh}
|
|
4490
4780
|
* @brief 播放时更换临时播放 Token,以更换视频源。
|
|
4491
4781
|
* @memberof VePlayer
|
|
4492
4782
|
* @param config 临时播放 Token 配置。
|
|
4493
4783
|
* @param isNewVideo 是否为新视频。为 `false` 时,更换后,会从更换前的时间点继续播放。
|
|
4784
|
+
* @notes 此接口不支持切换火山引擎私有加密 Token。
|
|
4494
4785
|
*/
|
|
4495
4786
|
switchAuthToken(config: IPlayAuthTokenConfig, isNewVideo?: boolean): Promise<void>;
|
|
4496
4787
|
/** {zh}
|
|
4497
4788
|
* @brief 更新临时播放 Token。
|
|
4498
4789
|
* @memberof VePlayer
|
|
4499
|
-
* @notes 播放前临时播放 Token 过期(收到 `play_auth_token_expired` 事件或者 `onTokenExpired` 回调触发)时,调用此方法更新临时播放 Token。
|
|
4790
|
+
* @notes - 播放前临时播放 Token 过期(收到 `play_auth_token_expired` 事件或者 `onTokenExpired` 回调触发)时,调用此方法更新临时播放 Token。
|
|
4791
|
+
* - 此接口不支持切换火山引擎私有加密 Token。
|
|
4500
4792
|
* @param config 临时播放 Token 配置。
|
|
4501
4793
|
*/
|
|
4502
4794
|
updateAuthToken(config: IPlayAuthTokenConfig): Promise<void>;
|
|
@@ -4518,9 +4810,7 @@ declare class VePlayer {
|
|
|
4518
4810
|
* @notes 更换后,会从更换前的时间点继续播放。
|
|
4519
4811
|
* @param url 视频播放地址。
|
|
4520
4812
|
*/
|
|
4521
|
-
switchURL(url: Url
|
|
4522
|
-
seamless?: boolean;
|
|
4523
|
-
}): Promise<void>;
|
|
4813
|
+
switchURL(url: Url): Promise<void>;
|
|
4524
4814
|
/** {zh}
|
|
4525
4815
|
* @memberof VePlayer
|
|
4526
4816
|
* @brief 针对不同格式的视频,重建播放器内核播放下一个视频。
|
|
@@ -4528,12 +4818,16 @@ declare class VePlayer {
|
|
|
4528
4818
|
* @param config 播放器配置。
|
|
4529
4819
|
* @param isNewVideo 是否为新视频,默认为 `true`。为 `false` 时表示是同一个视频更换 token。更换后,会从更换前的时间点继续播放。
|
|
4530
4820
|
*/
|
|
4821
|
+
/** {en}
|
|
4822
|
+
* @hidden
|
|
4823
|
+
*/
|
|
4531
4824
|
next(config: IPlayerConfig, isNewVideo?: boolean): Promise<void>;
|
|
4532
4825
|
/** {zh}
|
|
4533
4826
|
* @brief 播放下一视频。
|
|
4534
4827
|
* @return{Promise<any>}
|
|
4535
4828
|
* @memberof VePlayer
|
|
4536
|
-
* @notes
|
|
4829
|
+
* @notes - 成功更换视频源后,默认是暂停状态。如果设置了自动播放,则会自动播放。
|
|
4830
|
+
* - 此接口不支持切换火山引擎私有加密视频。
|
|
4537
4831
|
* @param config 播放器实例化配置。
|
|
4538
4832
|
* @param isNewVideo 是否为新视频。为 `false` 时,更换后,会从更换前的时间点继续播放。
|
|
4539
4833
|
*/
|
|
@@ -4552,6 +4846,9 @@ declare class VePlayer {
|
|
|
4552
4846
|
* @return {*}
|
|
4553
4847
|
* @memberof VePlayer
|
|
4554
4848
|
*/
|
|
4849
|
+
/** {en}
|
|
4850
|
+
* @hidden
|
|
4851
|
+
*/
|
|
4555
4852
|
getPlayerInstance(): PlayerCore;
|
|
4556
4853
|
/** {zh}
|
|
4557
4854
|
* @hidden
|
|
@@ -4559,6 +4856,9 @@ declare class VePlayer {
|
|
|
4559
4856
|
* @return {*}
|
|
4560
4857
|
* @memberof VePlayer
|
|
4561
4858
|
*/
|
|
4859
|
+
/** {en}
|
|
4860
|
+
* @hidden
|
|
4861
|
+
*/
|
|
4562
4862
|
getSoftDecodingOption(isOpenSoftDecoding: boolean, url: string, type: string): Promise<{
|
|
4563
4863
|
mediaType?: string;
|
|
4564
4864
|
innerDegrade?: number;
|
|
@@ -4571,6 +4871,9 @@ declare class VePlayer {
|
|
|
4571
4871
|
* @brief 获取h265软解播放时的播放列表
|
|
4572
4872
|
* @memberof VePlayer
|
|
4573
4873
|
*/
|
|
4874
|
+
/** {en}
|
|
4875
|
+
* @hidden
|
|
4876
|
+
*/
|
|
4574
4877
|
setH265SoftPlayList(): void;
|
|
4575
4878
|
/** {zh}
|
|
4576
4879
|
* @brief 切换清晰度
|