import VeStrategy from '@byted/volcengine-vestrategy'; import { StrategyRecommendation } from '@byted/volcengine-vestrategy'; import { VeStrategyH265Config } from '@byted/volcengine-vestrategy-h265'; import { PreloaderManager as PreloaderManagerOrigin } from '@byted/volcengine-vestrategy-preload'; import VodLogger from '@byted/xgplayer-app-logger/es/logger'; import EventEmitter from 'eventemitter3'; import Player from 'xgplayer'; import { BasePlugin, I18N, IXGI18nText, Plugin } from 'xgplayer'; import SubTitles from 'xgplayer-subtitles'; import { IUrl } from 'xgplayer/es/defaultConfig'; /** * @brief 插件按钮位置 */ export declare const enum POSITIONS { /** * @brief 播放器根节点 */ ROOT = "root", /** * @brief 播放器根节点左侧 */ ROOT_LEFT = "rootLeft", /** * @brief 播放器根节点右侧 */ ROOT_RIGHT = "rootRight", /** * @brief 播放器根节点顶部 */ ROOT_TOP = "rootTop", /** * @brief 播控栏左侧 */ CONTROLS_LEFT = "controlsLeft", /** * @brief 播控栏左侧 */ CONTROLS_RIGTH = "controlsRight", /** * @brief 播控栏右侧 */ CONTROLS_RIGHT = "controlsRight", /** * @brief 播控栏中间 */ CONTROLS_CENTER = "controlsCenter", /** @hidden * @brief 播控栏左侧 */ CONTROLS = "controls" } /** * @brief 播放器发生错误时的 UI 配置。 * @list Options * @kind property */ /** {en} * @brief 发错错误时的UI表现配置 */ export interface ISdkErrorConfig { /** {zh} * @brief 报错时是否展示提示图片。 * @default true */ errorImg?: boolean; /** {zh} * @brief 报错时是否展示报错文案。 * @default true */ errorTips?: boolean; /** {zh} * @brief 报错时是否展示刷新按钮。 * @default ture */ isNeedRefreshButton?: boolean; /** {zh} * @brief 报错后是否进行降级,true则降级到playlist中相应 backUrlList字段(type为 rtm 不能设置true) * @default false * @hidden */ isNeedDemoteBack?: boolean; /** {zh} * @brief 报错后重试次数。 * @default 1 */ retryLoopNum?: number; /** {zh} * @brief 不同语言对应的报错提示文案。 * @default 播放发生错误,点击刷新试试吧 */ /** {en} * @brief Prompt copy after error * @default An error occurred while playing, click refresh to try */ errorTipsText?: TipsTextConfig; /** {zh} * @hidden * @brief 播放器中所处的位置 */ position?: POSITIONS; } /** * @list Options * @brief 报错文案配置。 * @kind property */ /** {en} * @brief 错误文案配置 */ export interface TipsTextConfig { /** * @brief 中文错误文案。 * @default 播放发生错误,点击刷新试试吧 */ /** {en} * @brief 中文错误文案 */ zh?: HTMLElement | string; /** * @brief 英文错误文案。 * @default An error occurred while playing, click refresh to try */ /** {en} * @brief 英文错误文案 */ en?: HTMLElement | string; /** * @brief 日文错误文案。 * @default 再生中にエラーが発生しました。[更新]をクリックして試してください */ /** {en} * @brief 日文错误文案 */ jp?: HTMLElement | string; /** * @brief 香港繁体中文错误文案。 * @default 播放發生錯誤,點擊刷新試試吧 */ "zh-hk"?: HTMLElement | string; } /** * @hidden * @brief rtm配置 * @list Options * @interface IRtmConfig */ export interface IRtmConfig { /** * sdp接口请求超时等待时间, 单位 ms * @default 5000 * * @type {number} * @memberof IRtmConfig */ loadTimeout?: number; /** * sdp接口请求失败时重试间隔时间, 单位 ms * @default 1000 * * @type {number} * @memberof IRtmConfig */ retryDelay?: number; /** * sdp接口请求失败时的重试次数 * @default 0 * * @type {number} * @memberof IRtmConfig */ retryCount?: number; /** * rtc播放video不会触发waiting,通过timeupdate事件模拟,两次timeupdate事件触发间隔时间大于此值时模拟waiting事件触发 , 单位 ms * @default 300 * * @type {number} * @memberof IRtmConfig */ stallInterval?: number; /** * rtc起播建联失败时降级到flv或hls播放, 指定时开启降级,不指定建联失败对外抛error * @default '' * * @type {string} * @memberof IRtmConfig */ backupURL?: string; /** * 降级到flv或者hls时需要的播放插件, 配合 backupURL使用 * @default null * * @type {('hls' | 'flv')} * @memberof IRtmConfig */ backupStreamType: "hls" | "flv"; } /** * @brief 弹幕配置。 * @list Options * @kind property */ /** {en} * @list Options * @kind property */ export interface IDanmuConfig { /** * @brief 弹幕透明度。取值如下: * * - `0`:透明度 0。 * - `33`:透明度 33%。 * - `66`:透明度 66%。 * - `99`:透明度 100%。 * @default 99 */ /** {en} * @brief 透明度, 枚举值[0, 33, 66, 99], 实际对应0, 0.33, 0.66, 1 */ opacity?: number; /** * @brief 弹幕区域大小。取值如下: * * - `0`:弹幕区域占全屏的 1/4。 * - `33`:弹幕区域占全屏的 1/2。 * - `66`:弹幕区域占全屏的 3/4。 * - `99`:弹幕区域占满全屏。 * @default 99 */ /** {en} * @brief 枚举值[0, 33, 66, 99] 实际对应1/4, 1/2, 3/4, 1 */ area?: number; /** * @brief 弹幕滚动速度。取值如下: * * - `0`:弹幕速度为 1/4。 * - `20`:弹幕速度为 1/2。 * - `40`:弹幕速度为 1。 * - `60`:弹幕速度为 5/4。 * - `80`:弹幕速度为 3/2。 * - `100`:弹幕速度为 2。 * @default 40 */ /** {en} * @brief 速度, 枚举值[0, 20, 40, 60, 80, 100], 实际对应1/4, 1/2,1,5/4,3/2,2 */ speed?: number; /** * @brief 弹幕字体大小。取值如下: * * - `0`:字体大小为 14 px。 * - `50`:字体大小为 16 px。 * - `100`:字体大小为 20 px。 * @default 50 */ /** {en} * @brief 字体大小, 枚举值[0, 50, 100],实际对应14px 16px 20px */ fontSize?: number; /** * @brief 是否默认开启弹幕。取值如下: * * - `false`:关闭。 * - `true`:开启。 * @default false */ /** {en} * @brief 是否默认开启弹幕 */ active?: boolean; /** * @brief 是否展示弹幕设置面板。取值如下: * * - `false`:不展示弹幕设置面板。 * - `true`:展示弹幕设置面板。 * @default true * @hidden */ /** {en} * @brief Whether to enable barrage by default */ usePanel?: boolean; /** * @brief 弹幕列表。 * @default - */ /** {en} * @brief 弹幕列表 */ danmuItems?: DanmuItem[]; /** * @hidden * @type {ExternalItem[]} * @memberof IDanmuConfig */ external?: ExternalItem[]; /** * @brief 蒙版弹幕配置 * @default - */ maskConfig?: IMaskConfig; /** * @brief 是否开启蒙版弹幕,即对应智能挡板开关 * @default false */ maskActive?: boolean; } export interface IMaskConfig { maskUrl: string; maskOffset?: number; interval?: number; } /** {zh} * @hidden * @brief 语言类型 */ /** {en} * @hidden * @brief 语言类型 */ export interface Lang { zh: string; en: string; [props: string]: string; } /** {zh} * @brief 弹幕项 * @list Options * @kind property * @export * @interface DanmuItem */ /** {en} * @list Options * @kind property * @export * @interface DanmuItem * @brief 弹幕项 */ export interface DanmuItem { /** * 弹幕唯一id * * @type {string} * @memberof DanmuItem * @brief 弹幕唯一 ID。 */ /** {en} * @brief 弹幕唯一id */ id: string; /** * 弹幕文案 * * @type {string} * @memberof DanmuItem * @brief 弹幕文案。 */ /** {en} * @brief 弹幕文案 */ txt: string; /** * 弹幕出现时间, 单位为ms * @default 0 * @brief 弹幕出现时间,单位为毫秒。 */ /** {en} * @brief 弹幕出现时间, 单位为ms */ start?: number; /** * 是否优先显示 * @hidden * @type {boolean} * @memberof DanmuItem */ prior?: boolean; /** * 弹幕持续显示时间, 单位为ms * @default 5000 * * @type {number} * @memberof DanmuItem * @brief 弹幕持续显示时长,单位为毫秒。 */ /** {en} * @brief 弹幕持续显示时间, 单位为ms */ duration?: number; /** * @brief 弹幕样式。示例如下:`style : { color: '#ff9500', fontSize: '20px', padding: '2px 11px'}` * @example * ``` javascript * { * color: '#ff9500', * fontSize: '20px', * padding: '2px 11px' * } *``` * @type {Partial>} * @memberof DanmuItem */ /** {en} * @brief 弹幕样式 */ style?: CSSStyleDeclaration; } export interface ExternalItem { key: string; name: string; value: boolean; lang?: Lang; } /** * @brief 外挂字幕配置。 * @list Options * @kind property */ /** {en} * @brief 外挂字幕配置 */ export interface ISubtitleConfig { /** * * @hidden */ [propName: string]: any; /** * @brief 图标位置。 * @default controlsRight */ /** {en} * @brief 图标位置 */ position?: string; /** * @brief 图标排列权重。 * @default 6 */ /** {en} * @brief 图标排列权重 */ index?: number; /** * @brief 字幕列表。 * @default - */ /** {en} * @brief 字幕列表 */ list?: Array; /** * @brief 是否默认打开字幕。 * @default true */ /** {en} * @brief 是否默认打开 */ isDefaultOpen?: boolean; /** * @brief 是否显示图标。 * @default true */ /** {en} * @brief 是否显示图标 */ isShowIcon?: boolean; /** * @brief 字幕渲染模式,取值如下: * - `"external"`:外挂字幕 * - `"native"`:原生字幕 * @default external */ /** {en} * @brief 字幕渲染模式,外挂字幕或原生字幕 */ mode?: "external" | "native"; /** * @brief 字幕更新模式,默认vod * @default vod * @hidden */ updateMode?: "vod" | "live"; /** * @brief 字幕样式。 * @default - */ /** {en} * @brief 字幕样式 */ style?: ISubtitleStyle; } /** * @list Options * @brief 字幕样式配置。 * @kind property */ /** {en} * @brief 字幕样式配置 */ export interface ISubtitleStyle { /** * 是否跟随控制栏调整位置 * @default false * @type {boolean | null} * @memberof ISubtitleStyle * @brief 是否跟随控制栏调整位置。 */ /** {en} * @brief 是否跟随控制栏调整位置 */ follow?: boolean; /** * 字体显示模式,默认是描边 * @default 'stroke' * @type {'stroke' | 'bg'} * @memberof ISubtitleStyle * @brief 字体显示模式,默认如下; * - `"stroke"`:空心字体。 * - `"bg"`:实心字体。 */ /** {en} * @brief 字体显示模式,默认是描边 */ mode?: "stroke" | "bg"; /** * 跟随底部控制栏的高度 * @default 50 * @type {number} * @memberof ISubtitleStyle * @brief 是否跟随底部控制栏的高度。 */ /** {en} * @brief 跟随底部控制栏的高度 */ followBottom?: number; /** * 是否跟随视频自动调整字号 * @default true * @type {boolean} * @memberof ISubtitleStyle * @brief 是否跟随视频自动调整字号。 */ /** {en} * @brief 是否跟随视频自动调整字号 */ fitVideo?: boolean; /** * 字幕距离画面底部百分比 * @default 4 * @type {number} * @memberof ISubtitleStyle * @brief 字幕距离画面底部百分比。 */ /** {en} * @brief 字幕距离画面底部百分比 */ offsetBottom?: number; /** * 横屏视频适配基准字号 * @default 49 * @type {number} * @memberof ISubtitleStyle * @brief 横屏视频适配基准字号。 */ /** {en} * @brief 横屏视频适配基准字号 */ baseSizeX?: number; /** * 竖屏视频适配基准字号 * @default 28 * @type {number} * @memberof ISubtitleStyle * @brief 竖屏视频适配基准字号。 */ /** {en} * @brief 竖屏视频适配基准字号 */ baseSizeY?: number; /** * pc端最小字号 * @default 16 * @type {number} * @memberof ISubtitleStyle * @brief PC 端最小字号. */ /** {en} * @brief pc端最小字号 */ minSize?: number; /** * 移动端最小字号 * @default 13 * @type {number} * @memberof ISubtitleStyle * @brief 移动端最小字号。 */ /** {en} * @brief 移动端最小字号 */ minMobileSize?: number; /** * 最大显示行数 * @default double * @type {'double' | 'single' | 'three'} * @memberof ISubtitleStyle * @brief 最大显示行数。取值如下: * - `"double"`:两行 * - `"single"`:一行 * - `"three"`:三行 */ /** {en} * @brief 最大显示行数 */ line?: "double" | "single" | "three"; /** * 字体颜色, 16位颜色值或rgb值 * @default #fff * @type {string} * @memberof ISubtitleStyle * @brief 字体颜色。可设为 16 位颜色值或 RGB 值。 */ /** {en} * @brief 字体颜色, 16位颜色值或rgb值 */ fontColor?: string; } /** * @list Options * @brief 字幕项。 * @kind property */ /** {en} * @brief 字幕项配置 */ export interface ISubTitleItem { /** * @brief 字幕语言。 * @default - */ /** {en} * @brief 字幕语言 */ language?: string | number; /** * @brief 字幕 ID。 * @default - */ /** {en} * @brief 字幕id */ id?: number | string; /** * @brief 是否为默认选择的字幕。 * @default false */ /** {en} * @brief 是否是默认选择的字幕 */ isDefault?: boolean; /** * @brief 字幕名称。 * @default - */ /** {en} * @brief 字幕名称 */ text?: string; /** * @brief 外挂字幕 URL 地址。 * @default - */ /** {en} * @brief 外挂字幕地址 */ url?: string; /** * stringContent * @default 无 * @hidden * @type {string} * @memberof ISubTitleItem */ stringContent?: string; /** * 字幕内容列表,非url形式时使用 * @default 无 * @type {Array} * @memberof ISubTitleItem * @brief 字幕内容列表。非 `url` 形式时使用。 */ /** {en} * @brief 字幕内容列表,非url形式时使用 */ list?: IListItem[]; } /** * @brief 字幕内容项。 * @list Options * @kind property * @export * @interface IListItem */ /** {en} * @brief 字幕内容项配置 */ export interface IListItem { /** * 开始时间 * @type {number} * @brief 开始时间,单位为秒。 */ /** {en} * @brief 开始时间 */ start: number; /** * 结束时间 * @type {number} * @brief 结束时间,单位为秒。 */ /** {en} * @brief 结束时间 */ end: number; /** * 字幕数据列表 * @type {Array} * @brief 字幕数据列表。 */ /** {en} * @brief 字幕数据列表 */ list: Array; /** * @default 无 * @hidden * @type {any} */ [propName: string]: any; } /** * @breif 字幕文案配置 * @list Options * @kind property */ export interface ITextItem { /** * @default 无 * @hidden * @type {any} */ [propName: string]: any; /** * 开始时间 * @type {number} * @brief 开始时间,单位为秒。 */ /** {en} * @brief 开始时间 */ start: number; /** * 结束时间 * @type {number} * @brief 结束时间,单位为秒。 */ /** {en} * @brief 结束时间 */ end: number; /** * 字幕文案数组 * @type {string[]} * @brief 字幕文案数组。 */ /** {en} * @brief 字幕文案数组 */ text: string[]; /** * 字幕顺序 * @type {number} * @brief 字幕顺序。 */ /** {en} * @brief 字幕顺序 */ index?: number; } /** * @brief 清晰度降级配置。 * @list Options * @kind property */ /** {en} * @brief 清晰度降级配置 */ export interface IDefinitionDemotePlugin { /** * @brief 是否开启自动降级,取值如下: * - `false`:关闭自动降级。 * - `true`:开启自动降级。 * @default true * */ /** {en} * @brief Is automatic downgrade enabled? The values are as follows: * - `false`: automatic downgrade is disabled. * - `true`: automatic downgrade is enabled. */ isNeedAutoDemote?: boolean; /** * @brief 清晰度降级顺序。数组中的元素需与 `playList` 中的 `definition` 相对应。 * @default [] * * @type {string[]} * @memberof IDefinitionDemotePlugin */ /** {en} */ demotePriority: string[]; /** * @brief 长时间卡顿的时间阈值,单位为毫秒。卡顿时长超过该值,即视为长时间卡顿。发生长时间卡顿时,SDK 会触发 `LONG_WAITING` 事件。 * @default 5000 * */ /** {en} * @brief 长时间卡顿的时间阈值,单位为ms。卡顿超过该值,即为长时间卡顿 */ longWaitingTime?: number; /** * @brief 频繁卡顿的次数阈值。`oftenWaitingTime` 内卡顿次数大于或等于阈值时,SDK 会触发 `OFTEN_WAITING` 事件,提示发生了频繁卡顿。 * @default 3 * */ /** {en} * @brief 频繁卡顿的次数阈值。OftenWaitingTime 内卡顿次数大于等于阈值时,触发often_waiting事件,即表示发生了频繁卡顿 */ oftenWaitingCount?: number; /** * @brief 频繁卡顿监测的时间范围。`oftenWaitingTime` 内卡顿次数大于或等于 `oftenWaitingCount` 时,SDK 会触发 `OFTEN_WAITING` 事件,提示发生了频繁卡顿。 * @default 5000 */ /** {en} * @brief 频繁卡顿的时间范围。OftenWaitingTime 内卡顿次数大于等于阈值时,触发often_waiting事件,即表示发生了频繁卡顿 */ oftenWaitingTime?: number; /** * @brief 卡顿时是否显示清晰度降级提示 toast。 * @default true */ /** {en} * @brief 卡顿时是否显示建议切换清晰度的提醒tips */ isNeedShowTips?: boolean; /** * @brief 清晰度降级提示 toast 的显示时长,单位为毫秒。 * @default 3000 */ /** {en} * @brief 提醒降级的toast显示持续时间,单位ms */ toastShowTime?: number; } export declare class DefinitionDemotePlugin extends Plugin { static get pluginName(): string; waitings: number[]; timer: ReturnType; toastId: number; longWaitingEmitTime: number; waitingStartTime: number; playerData: PlayerData; static get defaultConfig(): IDefinitionDemotePlugin; constructor(args: any); registerLanguageTexts(): { definition_demote_txt: { jp: string; en: string; zh: string; "zh-hk": string; }; }; afterCreate(): void; bindCtx(): void; bindEvents(): void; _waiting(): void; _count(): void; _time(): void; _clearTime(): void; clearState(): void; demote(): void; changeUrl(url: Url): void; showToast(definition: Stream): void; destroy(): void; } /** * 音轨选择选项。 * 对应 hls.js `AudioSelectionOption` 的所有字段,所有字段均可选。 * 用于 `switchAudioTrack()` 参数(配合 `id` 使用)以及 `audioPreference` 配置。 */ export interface AudioTrackOption { lang?: string; assocLang?: string; characteristics?: string; channels?: string; name?: string; audioCodec?: string; groupId?: string; default?: boolean; [key: string]: unknown; } export interface AudioTrack extends AudioTrackOption { id: number; name: string; default: boolean; } /** * `getAudioTracks()` / `getCurrentAudioTrack()` 的返回项类型。 * 是 `switchAudioTrack()` 参数类型的子类型,可直接传入。 */ export interface AudioTrackInfo extends AudioTrack { /** 是否为当前激活轨道。`getCurrentAudioTrack()` 返回时始终为 `true`。 */ selected: boolean; } export interface IAudioTrackConfig { /** 控件在控制栏中的排列顺序,数值越小越靠左。@default 5 */ index?: number; /** 是否显示图标按钮。@default true */ isShowIcon?: boolean; /** 竖屏时是否隐藏控件。@default false */ hidePortrait?: boolean; /** 音轨列表中是否在语言名称后显示括号内的原始轨道名,如 `日本語 (Stereo AudioTrack1)`。@default true */ showNameSuffix?: boolean; } export interface IAudioTrackMobileConfig { /** 控件在控制栏中的排列顺序,数值越小越靠左。@default 2.6 */ index?: number; /** 是否显示图标按钮。@default true */ isShowIcon?: boolean; /** 音轨列表中是否在语言名称后显示括号内的原始轨道名,如 `日本語 (Stereo AudioTrack1)`。@default true */ showNameSuffix?: boolean; } /** * @brief DASH 播放配置。 * @list Options * @kind property */ /** {en} * @brief DASH 播放配置项 */ export interface IDashPluginConfig { /** * @brief 视频 ID。 * @default - * @notes 播放加密视频时必选 */ /** {en} * @brief 视频vid */ vid?: string; /** * @hidden * @brief 播放类型 * @default TOP */ playInfoType: "TOP"; /** * @brief 清晰度映射文案。 * @default - * @example * ``` javascript * { * 360p: "流畅 360p", * 480p: "清晰 480p", * 720p: "高清 720p", * 1080p: "超高清 1080p" * } * ``` */ /** {en} * @brief 清晰度映射文案 */ definitionText: Record; /** * @brief 默认清晰度。 * @default 列表第一个 */ /** {en} * @brief 默认清晰度 */ defaultDefinition?: string; /** * @hidden * 获取证书地址 * 默认:`//i.snssdk.com/video/drm/v1/play_licenses` * 播放加密视频时必选 */ getLicenseUrl?: string; /** * @hidden * dash播放信息,由`Service.url`服务接口获取 * 默认:无 * 必选 */ dashOpts?: { Data: any; }; /** * @brief 兜底的mp4播放列表,由`Service.url`服务接口获取 * @default - * @hidden */ mp4Opts: { mp4List: mp4OptsItem[]; }; /** * 预加载时间,单位ms * @default 50 * @brief 预加载时间,单位为毫秒。 */ /** {en} * @brief 预加载时间,单位ms */ preloadTime?: number; /** * @hidden * 自适应配置项 * 默认:undefined * 非必选 */ autoBitrateOpts?: any; /** * @hidden * 备用地址降级,默认情况下,当dash播放出问题后,会降级为mp4播放; * 设置改参数后,会优先使用备用地址进行dash的降级播放,再次出错时,会降级为mp4播放 * 默认:false * 非必选 */ useBackUrl?: boolean; /** * @hidden * 优化首帧 * 是针对域名,将range参数放在url后面,避免OPTIONS请求,从而优化首帧 * 默认:无 * 非必选 */ url_range_domains?: string[]; } /** * @brief dash播放的mp4兜底播放列表配置 * @list Options * @hidden */ export interface mp4OptsItem { /** * 清晰度 * 默认: 无 * 必传 */ definition: string; /** * mp4地址 * 默认: 无 * 必传 */ url: string; } /** * @brief HLS 加密播放配置。 * @list Options * @kind property */ /** {en} * @brief HLS加密播放配置 */ export interface IEncryptHlsPluginConfig { /** {zh} * @brief 获取播放地址的请求域名。 * @default https://vod.volcengineapi.com */ /** {en} * @brief Get the requested domain name of the playback address * @default https://vod.byteplusapi.com */ playDomain?: string; /** * @hidden * @brief 请求类型,固定值 'TOP' * @default TOP */ getKeyType?: string; /** * @hidden * @brief 密钥请求域名 * @default https://vod.volcengineapi.com */ keyDomain?: string; /** * @brief 播放地址获取token,由服务端生成下发,详见{@link https://www.volcengine.com/docs/4/67350#%E4%B8%B4%E6%97%B6%E5%AE%89%E5%85%A8%E5%87%AD%E8%AF%81%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E 播放临时安全凭证(PlayAuthToken)} * @default - */ playAuthToken?: string; /** * @brief 密钥获取token,由服务端生成下发,详见{@link https://www.volcengine.com/docs/4/65659#%E7%AD%BE%E5%8F%91-hls-%E6%A0%87%E5%87%86%E5%8A%A0%E5%AF%86-authtoken%EF%BC%88sha1hlsdrmauthtoken%EF%BC%89 签发 Hls 标准加密AuthToken} * @default - */ keyToken: string; } /** * @brief 质量日志上报配置。 * @list Options * @kind property */ /** {en} * @brief 质量日志配置 */ export interface IVodLogOptsConfig { /** * @brief 视频点播应用 ID。您可在视频{@link https://console.volcengine.com/vod/region:vod+cn-north-1/sdk/app/ 点播控制台 > 点播SDK > 应用管理}页面获取应用 ID(App ID)。 * @default - */ line_app_id: number; /** * @brief 用于识别单一用户的 ID,可在{@link https://www.volcengine.com/docs/4/75736#qoe-%E6%8C%87%E6%A0%87%E8%AF%B4%E6%98%8E QoE指标}中用于用户维度的筛选,也可以用于{@link https://www.volcengine.com/docs/4/106093 单点追查} 查找单用户的播放日志 * 用户 ID 对应于单点追查功能的查询条件中的设备 ID 维度。如不设置用户 ID,VePlayer 将根据用户浏览器随机生成一个值,该值会在浏览器端缓存。 * @notes 强烈建议您使用与业务相关的用户 ID,以便在发生播放错误时通过{@link https://console.volcengine.com/vod/region:vod+cn-north-1/quality_control/SingleTracing/?Tab=play 点播控制台 > 质量平台 > 单点追查}功能排查故障。 * @default - */ line_user_id: string | number; /** * @hidden * @brief 视频类型 * @default MP4 */ vtype?: "MP4" | "HLS" | "DASH" | "FLV"; /** * @brief 业务标签。对应于质量平台上的业务类型维度,其作用是区分业务中的不同场景,以便进行多维度分析。举例来说,假设您的应用中包含短视频和长视频两个场景,则可分别将 `tag` 设为 `short` 和 `long`。这样一来,您就能够在{@link https://www.volcengine.com/docs/4/120175 质量平台}上通过业务标签维度查询或过滤不同场景的数据。 * @notes 如需自定义配置 tag 值在点播控制台上的展示文案,请联系{@link https://www.volcengine.com/docs/4/108992#%E5%94%AE%E5%90%8E%E6%94%AF%E6%8C%81 技术支持} * @default 普通视频 */ tag?: string; /** * @brief 自定义子标签。对应于质量平台上的自定义标签维度,与 `tag` 配合使用,可用于区分同一业务类型下更为细分的音视频类型,比如加密视频、非加密视频、音频等。 * @default - */ /** {en} * @brief 自定义子标签。对应于质量平台上的自定义标签维度,与 `tag` 配合使用,可用于区分同一业务类型下更为细分的音视频类型,比如加密视频、非加密视频、音频等。 */ subtag?: string; /** * @brief 视频编码类型,取值如下 * - `h264`:H.264 * - `h265`:H.265 * @default unknown */ codec_type?: "h264" | "h265"; /** * @brief 是否加密,0:非drm视频,1:drm视频 * @hidden * @default 0 */ drm_type?: 0 | 1; /** * @hidden * @brief 播放内核版本号 */ playerCoreVersion?: string; /** * @hidden * @brief 播放器版本号 */ playerVersion?: string; /** * @hidden * @brief DASH播放的封装类型 */ dynamic_type?: "segment_base" | "segment_template"; /** * @hidden * @brief 是否使用bash,0:不使用,1:使用 * @default 0 */ enable_bash?: 0 | 1; /** * @hidden * @brief 发送的埋点日志是本地缓存的时候回调 * @default - */ sendLocalCallback?: (event: any, data: any) => void; /** * @hidden * @brief 是否禁用localStorage暂时缓存onPlay逻辑 * @default false */ disableLocalCache?: boolean; /** * @brief 日志上报渠道,可选值:cn(国内) 、sg(新加坡) * @default cn */ channel?: "cn" | "va" | "sg"; /** * @brief 日志上报额外配置 * @note 火山海外区域的用户播放需要配置为`{log_from_region: 'volc-overseas'}` */ trackerConfig?: Record; /** * @hidden * @brief 是否关闭清晰度切换埋点 * @default false */ closeResolutionLog?: boolean; /** * @hidden * @brief 关闭seek相关埋点 * @default false */ closeSeekLog?: boolean; /** * @hidden * @brief 队列超过多少条日志的时候发送 * @default 5 */ maxQueueCount?: number; } /** * @brief mp4加密日志配置项 * @list Options * @hidden */ export interface IMp4EncryptPlayerConfig { /** * @hidden * @brief 是否加密 * @default false */ isEncrypt?: boolean; /** * @hidden * @brief 视频vid * @default - */ vid?: string; /** * @hidden * @brief 视频密钥 id * @default - */ kid?: string; /** * @hidden * @brief 获取密钥凭证地址 * @default - */ getLicenseUrl?: string; /** * @hidden * @brief 是否使用EME * @default false */ useEME?: boolean; /** * @hidden * @brief 视频密钥值 * @default - */ keyValue?: string; /** * @hidden * @brief 加密后的视频密钥值 * @default - */ secretKey?: string; /** * @hidden * @brief 是否携带cookie * @default false */ withCredentials?: boolean; /** * @hidden * @brief drm内容 * @default - */ drm?: { clearKeys: { [propName: string]: string; }; }; } /** * @hidden */ export declare type IDefinition = { [propName: string]: any; url: any; definition: any; bitrate?: number; bandwidth?: number; text?: string | { [propName: string]: any; }; iconText?: string | { [propName: string]: any; }; }; /** * @brief 音量配置。 * @list Options * @kind property */ export declare type IVolume = number | { /** * @brief 插件Dom挂载的位置,默认播放器底部控制栏右侧 * @default POSITIONS.CONTROLS_RIGHT */ position?: POSITIONS; /** * @brief 插件在挂载的位置的排序权重 * @default 1 */ index?: number; /** * @brief 是否禁用插件交互行为,即是否隐藏音量调节按钮 * @default false */ disable?: boolean; /** * @brief 是否在音量调节slider上方显示当前音量数值 * @default false */ showValueLabel?: boolean; /** * @brief 默认音量大小,取值范围0-1 * @default 0.6 */ default?: number; /** * @brief 静音恢复的时候最小音量 * @default 0.2 */ miniVolume?: number; }; /** * @brief 进度条标记点配置。 * @list Options * @kind property */ export interface IDot { /** * @brief 进度条标记点 * @default 1 */ id: string | number; /** * @brief 标记点所在的播放时间 * @default 0 */ time: number; /** * @brief 进度条自定义文案 * @default - */ text?: string; /** * @brief 标记点持续的时间,单位秒 * @default 1 */ duration?: number; /** * @brief 进度条自定义的CSS Style样式 * @default - */ style?: CSSStyleDeclaration; } /** * @hidden */ export declare type IPlayerOptions = { [propName: string]: any; id?: string; el?: HTMLElement; url?: any; domEventType?: "default" | "touch" | "mouse"; nullUrlStart?: boolean; width?: number | string; height?: number | string; fluid?: boolean; fitVideoSize?: "fixWidth" | "fixHeight" | "fixed"; videoFillMode?: "auto" | "fillHeight" | "fillWidth" | "fill" | "cover"; volume?: number | { [propName: string]: any; }; autoplay?: boolean; autoplayMuted?: boolean; loop?: boolean; isLive?: boolean; zoom?: number; videoInit?: boolean; poster?: string | { [propName: string]: any; }; isMobileSimulateMode?: "mobile" | "pc"; defaultPlaybackRate?: number; execBeforePluginsCall?: () => any; allowSeekAfterEnded?: boolean; enableContextmenu?: boolean; closeVideoClick?: boolean; closeVideoDblclick?: boolean; closePlayerBlur?: boolean; closeDelayBlur?: boolean; leavePlayerTime?: number; closePlayVideoFocus?: boolean; closePauseVideoFocus?: boolean; closeFocusVideoFocus?: boolean; closeControlsBlur?: boolean; topBarAutoHide?: boolean; videoAttributes?: { [propName: string]: any; }; startTime?: number; seekedStatus?: "play" | "pause" | "auto"; miniprogress?: boolean; disableSwipeHandler?: () => any; enableSwipeHandler?: () => any; ignores?: Array<"cssfullscreen" | "screenshot" | "pip" | "miniscreen" | "keyboard" | "download" | "playbackrate" | "time" | "definition" | "error" | "fullscreen" | "loading" | "mobile" | "pc" | "play" | "poster" | "progress" | "replay" | "start" | "volume" | string>; inactive?: number; lang?: string; controls?: boolean | { [propName: string]: any; }; marginControls?: boolean; fullscreenTarget?: HTMLElement; screenShot?: boolean | { [propName: string]: any; }; rotate?: boolean | { [propName: string]: any; }; pip?: boolean | { [propName: string]: any; }; download?: boolean | { [propName: string]: any; }; mini?: boolean | { [propName: string]: any; }; cssFullscreen?: boolean | { [propName: string]: any; }; keyShortcut?: boolean; presets?: any[]; plugins?: any[]; playbackRate?: number | number[] | { [propName: string]: any; }; definition?: { [propName: string]: any; list: Array; defaultDefinition?: IDefinition["definition"]; }; playsinline?: boolean; customDuration?: number; timeOffset?: number; icons?: { [propName: string]: string | HTMLElement | (() => HTMLElement | string); }; i18n?: Array; tabindex?: number; thumbnail?: { urls: Array; pic_num: number; col: number; row: number; height?: number; width?: number; }; videoConfig?: { [propName: string]: any; }; commonStyle?: { progressColor?: string; playedColor?: string; cachedColor?: string; sliderBtnStyle?: { [propName: string]: any; }; volumeColor?: string; }; }; /** * @brief mobile端交互配置。 */ export interface IMobileConfig { /** * @brief 是否禁用手势,手势包括: * - 水平手势滑动快进/快退 * - 左侧手势滑动调节亮度 * - 右侧手势滑动调节音量(iOS不可用) * @default false */ disableGesture?: boolean; /** * @brief 是否启用水平手势处理,水平手势快进/快退 * @default false */ gestureX?: boolean; /** * @brief 是否启用垂直手势处理,默认不启用, 垂直手势包括屏幕右侧和屏幕左侧,默认左侧调节亮度,右侧调节音量,左右范围比例通过scopeL和scopeR设置 * @default false */ gestureY?: boolean; /** * @brief 左侧手势范围比例,取值0-1 * @default 0.25 */ scopeL?: number; /** * @brief 右侧手势范围,取值0-1 * @default 0.25 */ scopeR?: number; /** * @brief 是否启用左侧调暗功能,因为web端无法调用系统的亮度,这个功能实际使用透明蒙层实 * @default true */ darkness?: boolean; /** * @brief 播放器可调节的最大暗度,即蒙层最大透明度 * @default 0.6 */ maxDarkness?: number; /** * @brief 是否启用上下渐变阴影,即在播放器在激活时上下范围内有阴影 * - normal 上下阴影 * - none 无阴影 * - top 仅上阴影 * - bottom 仅下阴影 * @default normal */ gradient?: "normal" | "none" | "top" | "bottom"; /** * @brief 是否在touchMove事件触发时(即手势滑动时)同时更新播放器的currentTime, 在手势移动过程中,不会直接调用播放器的快进快退,在toucheEnd的时候再设置 * @default false */ isTouchingSeek?: boolean; /** * @brief 手势滑动的最小步伐,单位px,即滑动距离超过多少算作滑动,以减少不必要的滑动手势事件触发 * @default 5 */ miniMoveStep?: number; /** * @brief 长按快进倍速 * @default 2 */ pressRate?: number; /** * @brief 是否禁用时间预览雪碧图面板 * @notice 前提需要配置进度条预览雪碧图 thumbnail * @default true */ disableActive?: boolean; /** * @brief 是否禁用时间进度条,即拖动时不展示mini进度条 * @default false */ disableTimeProgress?: boolean; /** * @brief 手势拖动的时候是否隐藏控制栏 * @default true */ hideControlsActive?: boolean; /** * @brief 手势结束时隐藏控制栏 * @default false */ hideControlsEnd?: boolean; /** * @brief 滑动播放器区域快进/快退时,播放器区域对应的时长,即完整滑过播放器所对应的时长,单位ms * @default 360000 */ moveDuration?: number; /** * @brief 是否关闭双击切换暂停/播放的能力,同closeVideoDblclick * @default false */ closedbClick?: boolean; /** * @brief 禁用长按倍速调整 * @default true */ disablePress?: boolean; /** * @brief 是否禁用快进/快退的时候按钮提示 * @default false */ disableSeekIcon?: boolean; } /** * @brief 播放器中间切换暂停/播放的按钮。 */ export interface IStartConfig { /** * @brief 暂停是否常驻 * @default true */ isShowPause?: boolean; /** * @brief 是否播放结束常驻 * @default false */ isShowEnd?: boolean; /** * @brief 是否禁用点击动画 * @default pc:true,mobile:false */ disableAnimate?: boolean; /** * @brief 按钮的跟随模式 * - hide:起播之后隐藏 * - show:常驻一直存在 * - auto:自动跟随,播放器激活时即player.isActive=true的时候显示,否则隐藏 * @default hide */ mode?: "hide" | "show" | "auto"; } /** * @hidden * @brief 西瓜插件 */ export declare type XGPlugin = typeof Plugin | typeof BasePlugin; /** * @brief 自动播放配置。 * @list Options * @kind property */ /** {en} * @brief 自动播放配置 */ export interface IAutoplayPluginConfig { /** * @hidden */ position?: string; /** * @brief 是否开启降级静音自动播放。开启后,如果当前浏览器环境不支持有声音自动播放,则降级为静音自动播放。 * @default false */ /** {en} * @brief 有声音自动播放失败时是否降级成静音自动播放 */ enableDegradeMuteAutoplay?: boolean; /** * @brief 启用微信jsBridge方式的自动播放 * @default false * @hidden */ /** {en} * @hidden */ enableWxJsBridgeAutoplay?: boolean; /** * @brief 用户触发自动播放的目标 dom。 * @default window.document.body */ /** {en} * @brief 用户触发自动播放的目标dom */ userActionDom?: Node; /** * @brief 是否开启任意用户行为触发自动播放。开启后,第一次用户的任意点击可以触发播放器的自动播放。取值如下: * - `true`:开启 * - `false`:不开启 * @default false */ /** {en} * @brief 开启任意点击/触摸的用户行为触发自动播放 */ enableUserActionAutoplay?: boolean; /** * @brief 静音自动播放时,是否在播放器容器上居中展示取消静音的大按钮。 * @default true */ showUnmuteBtn?: boolean; } declare class PlayList { private config; private parent; private root; private modal; private _delegates; private attrKeys; constructor(args: any); renderItemList(dataList?: any[]): void; onItemClick(e: any): boolean; getAttrObj(dom: HTMLElement, keys: string[]): { index?: number; } & Record; show(): void; hide(): void; modalClick(e: any): void; setStyle(style: any): void; destroy(): void; } /** * @brief 播放列表展示面板触发动作类型。 */ /** {en} * @brief 播放列表展示面板触发动作类型 */ export declare const enum TOGGLE_MODES { /** * @brief 鼠标点击。 */ /** {en} * @brief 鼠标点击 */ CLICK = "click", /** * @brief 鼠标悬浮。 */ /** {en} * @brief 鼠标悬浮 */ HOVER = "hover" } /** * @list Options * @brief 播放列表项配置,支持 DirectUrl 和 Vid + playAuthToken 两种播放模式。 * @notes 列表数据由外部提供,播放器内部不直接获取播放列表数据。 * @kind property */ export interface IPlayListItem { /** * @notes 临时播放 Token 为空时,此参数必传。 * @default - * @listtip `playAuthToken` 为空时,此参数必传。 * @brief 视频地址。 */ /** {en} * @notes 临时播放 Token 为空时,此参数必传。 */ url?: string; /** * @notes `url` 为空时,此参数必传。 * @default - * @listtip `url` 为空时,此参数必传。 * @brief 播放临时安全凭证,由业务的 AppServer 签发。 */ /** {en} */ playAuthToken?: string; /** * @default - * @brief 视频的唯一 ID。不传则取视频所在列表数组的序号。 */ /** {en} */ vid: string; /** * @default - * @brief 视频封面图地址。 */ /** {en} */ poster?: string; /** * @default - * @brief 视频标题。 */ /** {en} */ title?: string; /** * @brief 视频时长,单位为秒。 * @default - */ /** {en} * @brief 视频时长,单位s */ duration?: number; } declare enum EPlayMode { /** * @brief 顺序播放。 */ /** {en} * @brief 顺序播放 */ ORDER = "order", /** * @brief 列表循环。 */ /** {en} * @brief 列表循环 */ LOOP = "loop" } /** * @list Options * @brief 播放列表插件配置。 * @kind property */ /** {en} * @brief 播放列表插件配置项 */ export interface IPlayListConfig { /** * @brief 按钮位置。取值如下: * * - `controlsLeft`: 播控栏左侧 * - `controlsRight`: 播控栏右侧 * - `controlsCenter`: 播控栏中间 * - `rootLeft`:播放器根节点左侧 * - `rootRight`:播放器根节点右侧 * - `rootTop`:播放器根节点顶部 * - `root`:播放器根节点 * @notes 此参数同时影响“打开/关闭播放列表”和“播放下一个”两个按钮的位置。 * @default controlsLeft */ /** {en} * @brief 图标位置 * @default controlsLeft 控制栏左侧 */ position?: string; /** * @brief 按钮在所在区域的次序。默认值为 `2`,表示在播放按钮后。 * @default 20 */ /** {en} * @brief 图标位置权重 */ index?: number; /** * @brief 播放列表数据。 * @default [] */ /** {en} * @brief 列表数据 */ list: IPlayListItem[]; /** * @brief 循环模式,取值如下: * * - `order`: 不循环播放,即列表中最后一个视频播放完成后就停止播放。 * - `loop`: 列表循环,即列表中最后一个视频播放完成后将自动开始重新播放列表中的第一个视频。 * @default order */ /** {en} * @brief 循环模式 */ mode?: EPlayMode; /** * @brief 默认起始的播放次序。 * @default order */ /** {en} * @brief 默认起始播放序号 */ defaultIndex?: number; /** * @brief 列表点击之后是否隐藏。 * @default true */ /** {en} * @brief 列表点击之后是否隐藏列表 */ isItemClickHide?: boolean; /** * @brief 列表行为触发模式。 * @default click */ /** {en} * @default click * @brief 列表行为触发模式 */ toggleMode?: TOGGLE_MODES; /** * @brief 是否显示播放列表按钮。 * @default true */ /** {en} * @brief 是否显示图标 */ isShowIcon?: boolean; } export declare class PlayListPlugin extends Plugin { isIcons: boolean; isActive: boolean; curInfo: any; private nextIndex; private prevIndex; curIndex: number; optionsList: OptionList; private activeEvent; private list; private _disable; private halfPass; private mode; private timer; static get pluginName(): string; static get defaultConfig(): IPlayListConfig; beforeCreate(args: any): void; afterCreate(): void; registerLanguageTexts(): { playNext: { jp: string; en: string; zh: string; "zh-hk": string; }; playList: { jp: string; en: string; zh: string; "zh-hk": string; }; }; registerIcons(): { [x: string]: { icon: string; class: string; }; }; private initIcons; show(): void; hide(): void; private onEnter; private switchActiveState; /** * @brief 播放上一个 */ prev(): void; /** * @brief 播放下一个 */ next(): void; private handleNext; /** * @breief 更换播放列表 * @param { IPlayListItem[] } list 添加的播放列表 */ changeList(list: IPlayListItem[]): void; /** * @brief 设置播放序号 * @param { number } index 目标序号 */ setIndex(index: number): void; private change; _onTimeUpdate: () => void; private confirmOrder; private _nextCompute; private _prevCompute; private _onEnded; private _emitChange; private onLeave; toggle(isActive: boolean): void; private onItemClick; private renderItemList; private _resizeList; destroy(): void; set disable(val: boolean); get disable(): boolean; render(): string; } /** * @brief 动态水印配置。 * @list Options * @kind property */ /** {en} * @brief watermark config */ export interface IWatermarkConfig { /** * @brief 是否开启动态水印,取值如下:
* - `true`:开启动态水印 * - `false`:关闭动态水印 * @default false */ /** {en} * @brief Is dynamic watermark enabled? The value is as follows:
* - `true`: Enable dynamic watermark * - `false`: Disable dynamic watermark */ enable: boolean; /** * @brief 水印文案。 * @default - */ /** {en} * @brief 水印文案内容 */ content: string; /** * @brief 水印展示形式,取值如下:
* - `0`:固定位置 * - `1`:全屏滚动 * - `2`:随机闪烁 * @default 1 */ /** {en} * @brief 水印展示形式 * - 0: 固定位置 * - 1: 全屏滚动 * - 2: 随机闪烁 */ displayType?: 0 | 1 | 2; /** * @brief 水印字体大小。`number`类型时单位为 px,`string` 类型时需要携带单位。 * @default 12 */ /** {en} * @brief 水印字体大小,number类型时单位为px,string类型需要携带单位 */ fontSize?: number | string; /** * @brief 水印字体颜色。 * @brief 水印字体颜色。 */ /** {en} * @brief 水印字体颜色 */ fontColor?: string; /** * @brief 水印不透明度。取值范围:\[0~1\]。 * @default 0.3 */ /** {en} * @brief 不透明度 */ opacity?: number; /** * @brief 水印闪烁速度,取值如下:
* - `MODERATE`:适中 * - `FAST`:较快 * - `SLOW`:较慢 * @default MODERATE */ /** {en} * @default MODERATE * @brief 水印闪烁速度 */ tickerSpeed?: "SLOW" | "MODERATE" | "FAST"; /** * @brief 水印字体类型 * @default - */ fontFamily?: string; /** * @brief 水印相对于播放容器顶部的距离,单位为 px * @default 0 */ top?: number; /** * @brief 水印相对于播放容器左侧的距离,单位为 px。 * @default 0 */ left?: number; /** * @brief 水印相对于播放容器底部的距离,单位为 px。 * @default - */ bottom?: number; /** * @brief 水印相对于播放容器右侧的距离,单位为 px。 * @default - */ right?: number; } export declare class DynamicWatermarkPlugin extends Plugin { private wm; static get pluginName(): string; static get defaultConfig(): IWatermarkConfig & { position: string; }; constructor(props: any); afterCreate(): void; start(): void; pause(): void; resume(): void; resize(): void; _initWatermark(): void; destroy(): void; render(): string | HTMLElement; } declare class ToastPlugin extends Plugin { static get pluginName(): string; static get defaultConfig(): { index: number; }; constructor(args: any); private toastNumber; private toastMaps; beforePlayerInit(): void; afterPlayerInit(): void; afterCreate(): void; destroy(): void; add(content: string | HTMLElement, duration?: number, isNeedCloseBt?: boolean): number; remove(id: number): void; renderToast(content: string | HTMLElement, isNeedCloseBt: any, id: any): HTMLElement; render(): string; } /** {zh} * @brief 记忆播放配置。 * @kind property * @list Options * @interface IMemoryPlayConfig */ export interface IMemoryPlayConfig { /** {zh} * @brief 存储标识id * @default options.vid || options.url * @type {number | string} * @memberof IMemoryPlayConfig */ memoryId: number | string; /** {zh} * @brief 设置时间函数 * @default - * @param id * @param time * @type {(id: number | string, time: number) => unknown} * @memberof IMemoryPlayConfig */ saveTime?: (id: number | string, time: number) => unknown; /** {zh} * @brief 获取最后一次播放时间函数 * @param id * @default - */ getTime?: (id: number | string) => number | Promise; /** {zh} * @brief 判断播放是否已开始的最小时间阈值。如果播放时长短于此阈值,则不算作已开始播放,存储的时间进度为 0。 * @default 1 */ minStartTime?: number; /** {zh} * @brief 判断播放是否已结束的最小时间阈值,即距离结束还剩余的时间不足此阈值时,即视为播放已结束。播放结束时,不再存储时间进度,并将之前的进度清零。 * @default 1 */ minEndTime?: number; } export declare class MemoryPlay extends Plugin { private curTime; static get pluginName(): string; static get defaultConfig(): IMemoryPlayConfig; startTime: number; saveTimeFun: (id: number | string, time: number) => unknown; getTimeFun: (id: number | string) => number | Promise; memoryId: number | string; shouldShowToast: boolean; constructor(args: any); registerLanguageTexts(): { preText: { jp: string; en: string; zh: string; "zh-hk": string; }; }; children(): { toast: typeof ToastPlugin; }; afterCreate(): void; beforePlayerInit(): Promise; getTime(): Promise; saveTime(): void; visibilitychangeCallback(): void; setSave(): void; showToast(): void; saveTimeByStorage(memoryId: string, time: number): void; getTimeByStorage(memoryId: string): string | 0; destroy(): void; } export interface IVolume { Loudness: number; Peak: number; } /** {zh} * @hidden */ export interface IPlayInfoListItem { BackupPlayUrl: string; BackupUrlExpire: string; BarrageMaskOffset: string; Bitrate: number; CheckInfo: string; Codec: ICodecType; Definition: string; Duration: number; FileId: string; FileType: string; Format: EVideoFormat | EAudioFormat; Height: number; IndexRange: string; InitRange: string; KeyFrameAlignment: string; LogoType: string; MainPlayUrl: string; MainUrlExpire: string; Md5: string; PlayAuth: string; PlayAuthId: string; Quality: string; Size: number; Volume?: number; Width: number; DrmType?: EDRMTYPE; } /** {zh} * @hidden * @brief 音频封装格式 */ export interface ISubtitleInfoList { CreateTime: string; FileId: string; Format: string; Language: string; LanguageId: number; Source: string; Status: string; StoreUri: string; SubtitleId: string; SubtitleUrl: string; Tag: string; Title: string; Version: string; Vid: string; } /** {zh} * @hidden */ export interface IThumbInfoItem { CaptureNum: number; CellHeight: number; CellWidth: number; Format: string; ImgXLen: number; ImgYLen: number; Interval: number; StoreUrls: string[]; } /** {zh} * @brief 蒙版弹幕信息 * @hidden */ export interface IBarrageMaskInfo { Version: string; BarrageMaskUrl: string; FileId: string; FileSize: number; FileHash: string; UpdatedAt: string; Bitrate: number; HeadLen: number; } /** {zh} * @hidden */ export interface DashAdaptiveInfo { AdaptiveType: string; BackupPlayUrl: string; MainPlayUrl: string; } /** {zh} * @hidden */ export interface ABRInfo { AbrFormat: string; BackupPlayUrl: string; MainPlayUrl: string; } /** {zh} * @hidden */ export interface IGetPlayInfoRes { Vid: string; AdaptiveInfo?: DashAdaptiveInfo; AdaptiveBitrateStreamingInfo?: ABRInfo; BarrageMaskInfo?: IBarrageMaskInfo; BarrageMaskUrl: string; Duration: number; EnableAdaptive: boolean; FileType: string; PlayInfoList: IPlayInfoListItem[]; PosterUrl: string; Status: number; SubtitleInfoList: ISubtitleInfoList[]; ThumbInfoList: IThumbInfoItem[]; TotalCount: number; Version: number; } /** {zh} * @list Options * @brief 视频编码格式。 */ export declare const CodecType: { /** {zh} * @brief H.264 */ readonly H264: "h264"; /** {zh} * @brief H.265 */ readonly H265: "h265"; /** {zh} * @brief H.266 */ readonly H266: "h266"; /** {zh} * @brief 音频 AAC,含 heaacv2 */ readonly AAC: "aac"; /** {zh} * @brief 音频 MP3 */ readonly MP3: "mp3"; /** {zh} * @brief 音频 OPUS */ readonly OPUS: "opus"; /** {zh} * @brief 未知编码格式 */ readonly UNKNOWN: "unknown"; }; export declare type ICodecType = (typeof CodecType)[keyof typeof CodecType]; export declare const ContentType: { h265: string; h264: string; }; export declare enum RTMCodec { H264 = "h264" } /** {zh} * @hidden * @brief 音频封装格式 */ export declare enum EVideoFormat { MP4 = "mp4", DASH = "dash", HLS = "hls" } /** {zh} * @hidden * @brief 视频封装格式 */ export declare enum EAudioFormat { M4A = "m4a", MP4 = "mp4", MP3 = "mp3", DASH = "dash", HLS = "hls", OGG = "ogg" } /** {zh} * @brief 加密播放类型 */ export declare const enum EDRMTYPE { /** * @brief 商业DRM */ DRM_ENCRYPT = "drm_encrypt", /** * @brief 旧私有加密 */ PRIVATE_ENCRYPT = "private_encrypt", /** * @brief 新私有加密 */ PRIVATE_ENCRYPT_UPGRADE = "private_encrypt_upgrade", /** * @brief HLS标准加密 */ STANDARD_ENCRYPT = "standard_encrypt" } export interface IVideoInfo { playList: Stream[]; vid: string; defaultDefinitionData: Stream; codec: ICodecType; dashOpts?: { Data: IGetPlayInfoRes; }; } export declare type TAPIRegionConfig = { __PLAY_DOMAIN__: string; __BACKUP_PLAY_DOMAIN__?: string; }; export declare type TUserRegionConfig = { __LOG_TEA_ID__: number; __LOG_CHANNEL__: TLogChannel; __LOG_CUSTOM_REGION__?: string; __LOG_CHANNEL_DOMAIN__?: string; __UMD_PRE_PATH__: string; }; export declare type TLogChannel = "cn" | "va" | "sg"; /** {zh} * @brief 区域类型: * - `'cn'`:中国内地 * - `'mya'`:马来西亚 * - `'sg'`:暂不生效 * - `'va'`:暂不生效 */ /** {en} */ export declare type TRegionType = "cn" | "mya" | "va" | "sg"; /** {zh} * @brief 音乐循环模式: * - `'order'`:顺序播放 * - `'sloop'`:单曲循环 * - `'loop'`:列表循环 * - `'random'`:列表随机 */ /** {en} */ export declare type PlayModeType = "order" | "sloop" | "loop" | "random"; export interface IMusicListItem { /** {zh} * @type {string} * @brief 音乐播放地址。 */ /** {en} * @brief Music playback URL. */ src: string; /** {zh} * @type {string | number} * @memberof IMusicListItem * @brief 音乐唯一 ID。 */ /** {en} * @brief Unique music ID. */ vid: string | number; /** {zh} * @type {string} * @memberof IMusicListItem * @brief 音乐封面 URL 地址。 */ /** {en} * @brief Music cover image URL. */ poster?: string; /** {zh} * @type {string} * @memberof IMusicListItem * @brief 音乐标题。 */ /** {en} * @brief Music title. */ title?: string; /** {zh} * @hidden */ [propName: string]: any; } /** {zh} * @brief AB 循环播放配置。 * @list Options * @kind property */ /** {en} * @list Options * @kind property */ export interface IABCycle { /** {zh} * @default 0 * * @type {boolean} * @memberof IABCycle * @brief AB 循环段开始时间,单位为秒。 */ /** {en} * @brief AB loop start time in seconds. * @default 0 */ start: number; /** {zh} * @default 音乐结束时间点 * * @type {boolean} * @memberof IABCycle * @brief AB 循环段开始时间,单位为秒。 */ /** {en} * @brief AB loop end time in seconds. * @default End of audio */ end: number; /** {zh} * @default false * @type {boolean} * @memberof IABCycle * @brief AB 段是否循环播放。 */ /** {en} * @brief Whether to loop the AB segment. * @default false */ loop?: boolean; /** * @hidden */ [propName: string]: any; } /** {zh} * @list Options * @brief 音乐播放模式配置。 * @kind property */ /** {en} * @list Options * @kind property */ export interface IMusicConfig { /** {zh} * @default false * * @type {boolean} * @memberof IMusicConfig * @brief 是否启用离线下载播放。 */ /** {en} * @brief Whether to enable offline downloaded playback. * @default false */ offline?: boolean; /** {zh} * @default null * * @type {IABCycle} * @memberof IMusicConfig * @brief AB 循环播放配置。 */ /** {en} * @brief AB loop playback configuration. * @default null */ abCycle?: IABCycle | null; /** {zh} * @default 15 * * @type {number} * @memberof IMusicConfig * @brief 快进快退时间跨度,单位为秒。 */ /** {en} * @brief Fast-forward / rewind step in seconds. * @default 15 */ timeScale?: number; /** {zh} * @default order * * @type {('order' | 'sloop' | 'loop' | 'random')} * @memberof IMusicConfig * @brief 循环模式。 */ /** {en} * @brief Playback loop mode: `order`, `sloop` (single loop), `loop` (list loop), `random`. * @default order */ mode?: PlayModeType; /** {zh} * @default [] * * @type {Array} * @memberof IMusicConfig * @brief 播放列表。 */ /** {en} * @brief Music playlist. * @default [] */ list?: Array; /** {zh} * @hidden */ [propName: string]: any; } /** {zh} * @list Options * @brief 播放地址列表,可配置多线路和多清晰度。 * @kind property * @export * @interface Stream */ /** {en} * @list Options * @kind property * @export * @interface Stream */ export interface Stream extends Partial { /** {zh} * @type {('rtm' | 'flv' | 'mp4' | 'hls')} * @memberof IPlayerConfig * @brief URL 类型,取值为: * - `"rtm"` * - `"flv"` * - `"mp4"` * - `"hls"` */ /** {en} * @brief Stream type: `"rtm"`, `"flv"`, `"mp4"`, or `"hls"`. */ streamType?: string; /** {zh} * @brief 视频播放地址。 * @type {Url} * @memberof IPlayerConfig */ /** {en} * @brief Video playback URL. */ url: Url; /** {zh} * @type {string} * @memberof Stream * @brief 清晰度 key */ /** {en} * @brief Definition key for this stream. */ definition?: string; /** {zh} * @type {string} * @memberof Stream * @brief 映射清晰度 key * @default - */ /** {en} * @brief Mapped definition key. * @default - */ mapDefinition?: string; /** {zh} * @type {string} * @memberof Stream * @brief 多语言词典中对应的 key。比如设置 `definitionTextKey: HD_TEXT_KEY` 以及 `languages: {zh: {HD_TEXT_KEY: '高清'}}`,则清晰度切换选项显示 “高清”。不设置则显示 `definition` 的值。 */ definitionTextKey?: string; /** {zh} * @brief 编码格式 * @default unknown */ /** {en} * @brief Codec type of this stream. * @default unknown */ codec?: ICodecType; /** {zh} * @brief 线路唯一 ID */ /** {en} * @brief Unique line (CDN route) ID. */ lineId?: number | string; /** {zh} * @example * ``` * languages: { * zh: { * LINE_ONE: '线路一' * } * } * ``` * 则线路切换选项中显示“线路一” * * @type {string} * @memberof Stream * @brief 多语言词典中对应的 key。比如 `lineTextKey: LINE_ONE`。 */ lineTextKey?: string; /** * @brief 该码流视频的宽度,单位为像素 * @default - */ width?: number; /** * @brief 该码流视频的高度,单位为像素 * @default - */ height?: number; /** * @brief 码流的平均码率 * @default - */ bitrate?: number; /** * @brief 码流流畅播放需要的带宽 * @default - */ bandwidth?: number; /** * @brief 地址的过期时间戳,单位秒(s),vid模式下不用输入,播放器自动获取。如果是火山引擎的CDN分发地址,在不传入过期时间戳时,则需指定urlType,支持{@link https://www.volcengine.com/docs/4/177191 A-E类型},其他云厂商或者业务服务器存储的地址不支持。 * @default - */ urlExpireTimestamp?: number; /** * @brief 视频为加密视频时的密钥KeyId,对应{@link https://www.volcengine.com/docs/4/2918 GetPlayInfo} 接口返回的PlayInfoList项中的 PlayAuthId * @default - */ kid?: string; /** {zh} * @brief 私有加密播放的加密密钥,对应{@link https://www.volcengine.com/docs/4/2918 GetPlayInfo} 接口返回的PlayInfoList项中的 PlayAuth */ /** {en} * @brief Encryption key for private-encrypted playback, corresponding to `PlayAuth` in the GetPlayInfo response. */ secretKey?: string; /** * @brief 视频为加密视频时的加密类型 * @default - */ drmType?: EDRMTYPE; /** {zh} * @hidden */ [propName: string]: any; } /** {zh} * @hidden */ /** {en} * @hidden */ export interface Condition { definition?: string; lineId?: number | string; url?: Url; } /** {zh} * @hidden */ /** {en} * @hidden */ export interface Current extends Partial { /** * @brief 清晰度 * @default - */ definition: string; /** * @brief 视频格式/协议 * @default - */ streamType: string; /** * @brief 视频流语言 * @default - */ language: string; /** * @brief 视频流id * @default - */ lineId?: number | string; /** * @brief 地址的过期时间戳,vid模式下不用输入,播放器自动获取。如果是火山引擎的CDN分发地址,在不传入过期时间戳时,则需指定urlType,支持{@link https://www.volcengine.com/docs/4/177191 A-E类型},其他云厂商或者业务服务器存储的地址不支持。 * @default - */ urlExpireTimestamp?: number; /** * @hidden */ [propName: string]: any; } /** {zh} * @detail Options * @brief URL 类型。支持字符串和数组。如果是数组形式,则每个数组项应包含视频播放地址 `src` 和视频容器格式类型 `type`,在 HTML `