@byteplus/veplayer 1.17.0-rc.7 → 1.17.0-rc.9

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.
Files changed (3) hide show
  1. package/index.d.ts +74 -30
  2. package/index.min.js +2 -2
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -897,6 +897,35 @@ export declare class DefinitionDemotePlugin extends Plugin {
897
897
  showToast(definition: Stream): void;
898
898
  destroy(): void;
899
899
  }
900
+ /**
901
+ * 音轨选择选项。
902
+ * 对应 hls.js `AudioSelectionOption` 的所有字段,所有字段均可选。
903
+ * 用于 `switchAudioTrack()` 参数(配合 `id` 使用)以及 `audioPreference` 配置。
904
+ */
905
+ export interface AudioTrackOption {
906
+ lang?: string;
907
+ assocLang?: string;
908
+ characteristics?: string;
909
+ channels?: string;
910
+ name?: string;
911
+ audioCodec?: string;
912
+ groupId?: string;
913
+ default?: boolean;
914
+ [key: string]: unknown;
915
+ }
916
+ export interface AudioTrack extends AudioTrackOption {
917
+ id: number;
918
+ name: string;
919
+ default: boolean;
920
+ }
921
+ /**
922
+ * `getAudioTracks()` / `getCurrentAudioTrack()` 的返回项类型。
923
+ * 是 `switchAudioTrack()` 参数类型的子类型,可直接传入。
924
+ */
925
+ export interface AudioTrackInfo extends AudioTrack {
926
+ /** 是否为当前激活轨道。`getCurrentAudioTrack()` 返回时始终为 `true`。 */
927
+ selected: boolean;
928
+ }
900
929
  export interface IAudioTrackConfig {
901
930
  /** 控件在控制栏中的排列顺序,数值越小越靠左。@default 5 */
902
931
  index?: number;
@@ -3349,6 +3378,23 @@ export interface IPlayerConfig extends IPlayerOptions {
3349
3378
  * @default false
3350
3379
  */
3351
3380
  enableHlsMSE?: boolean;
3381
+ /** {zh}
3382
+ * @brief 移动端播放 HLS 时优先使用 hls.js 插件(MSE/MMS):
3383
+ * - **Android**:直接启用 hls.js 播放。
3384
+ * - **iOS**:仅在设备支持 `ManagedMediaSource`(iOS 17.1+,即 `VePlayer.isMMSSupported()` 为 `true`)时启用;
3385
+ * 不满足时自动回退至原生 HLS 播放。
3386
+ * 开启后可在移动端解锁多音轨切换、`setAudioOption` 偏好持久化等 hls.js 特有能力。
3387
+ * @default false
3388
+ */
3389
+ /** {en}
3390
+ * @brief Prefer hls.js (MSE/MMS) for HLS playback on mobile:
3391
+ * - **Android**: always enables hls.js.
3392
+ * - **iOS**: enables hls.js only when `ManagedMediaSource` is supported (iOS 17.1+,
3393
+ * i.e. `VePlayer.isMMSSupported()` returns `true`); falls back to native HLS otherwise.
3394
+ * Unlocks hls.js-specific features such as multi-audio-track switching on mobile.
3395
+ * @default false
3396
+ */
3397
+ enableMobileHlsPlugin?: boolean;
3352
3398
  /** {zh}
3353
3399
  * @brief 是否启用 {@link https://hlsjs.video-dev.org/ hls.js} 插件播放HLS视频,默认为true,设置为false后,PC端播放HLS使用自研hls插件播放HLS视频
3354
3400
  * @default true
@@ -3397,16 +3443,19 @@ export interface IPlayerConfig extends IPlayerOptions {
3397
3443
  */
3398
3444
  defaultDefinition?: string;
3399
3445
  /** {zh}
3400
- * @brief 起播默认音频轨道的语言代码(BCP-47,如 `"zh"`、`"en"`)。
3401
- * @notes HLS 流匹配 `audioTrack.lang`;iOS 原生播放匹配 `audioTrack.language`。
3402
- * 多条轨道语言相同时取第一条。未匹配到时沿用 manifest 默认轨道。
3446
+ * @brief 起播默认音轨偏好。字段与 `switchAudioTrack()` 参数一致,按需填写一个或多个字段进行匹配。
3447
+ * hls.js 路径下通过 `hls.setAudioOption()` 应用,支持跨清晰度自动持久化;
3448
+ * iOS 原生路径按 `lang` 字段匹配。未匹配到时沿用 manifest 默认轨道。
3403
3449
  * @default -
3404
3450
  */
3405
3451
  /** {en}
3406
- * @brief Default audio track language code (BCP-47, e.g. `"zh"`, `"en"`) at playback start. Falls back to the manifest default when no match is found.
3452
+ * @brief Default audio track preference at playback start. Accepts the same fields as
3453
+ * `switchAudioTrack()`. Applied via `hls.setAudioOption()` on the hls.js path (persists
3454
+ * across quality switches); matched by `lang` on the iOS native path.
3455
+ * Falls back to the manifest default when no match is found.
3407
3456
  * @default -
3408
3457
  */
3409
- defaultAudioLang?: string;
3458
+ audioPreference?: AudioTrackOption;
3410
3459
  /** {zh}
3411
3460
  * @brief 插件,可自行选择安装的插件,支持{@link https://h5player.bytedance.com/plugins/ 西瓜播放器插件}。
3412
3461
  * @default -
@@ -5532,8 +5581,15 @@ declare class VePlayer {
5532
5581
  * @memberof VePlayer
5533
5582
  */
5534
5583
  private _emitter;
5535
- /** 最近一次用户主动(或 defaultAudioLang)选中的音轨语言代码,用于清晰度切换后恢复音轨 */
5536
- private _lastSelectedAudioLang;
5584
+ /** 最近一次用户选择的音轨,用于清晰度切换后通过 setAudioOption 恢复音轨 */
5585
+ private _lastSelectedAudioTrack;
5586
+ /**
5587
+ * `_applyAudioPreference` 发起恢复时置 true,hls.js 随后触发的 hlsAudioTrackSwitched
5588
+ * 属于自动切轨,不应覆盖 `_lastSelectedAudioTrack`;事件触发后自动清除。
5589
+ * 使用 timeout 兜底,防止 hls.js 未触发事件时标志永久残留。
5590
+ */
5591
+ private _suppressAudioTrackMemory;
5592
+ private _suppressAudioTrackMemoryTimer;
5537
5593
  /** playNext 后置为 true,直到新视频首个 addtrack 到达前屏蔽旧视频 change 事件的干扰 */
5538
5594
  private _playNextPending;
5539
5595
  /**
@@ -5960,10 +6016,12 @@ declare class VePlayer {
5960
6016
  */
5961
6017
  /** @hidden 获取 HLS 实例(兼容加密和普通 HLS 插件) */
5962
6018
  private _getHlsInstance;
5963
- /** @hidden 在 HLS 音轨列表就绪或清晰度切换后,恢复上次选中的音轨;找不到时 fallback defaultAudioLang */
5964
- private _applyDefaultAudioLang;
5965
- /** @hidden 在 native AudioTrackList 就绪后,恢复上次选中的音轨;找不到时 fallback 到 defaultAudioLang */
5966
- private _applyDefaultAudioLangNative;
6019
+ /** @hidden 在 HLS 音轨列表就绪或清晰度切换后,恢复上次选中的音轨;找不到时应用 audioPreference 配置 */
6020
+ private _applyAudioPreference;
6021
+ private _setSuppressAudioTrackMemory;
6022
+ private _clearSuppressAudioTrackMemory;
6023
+ /** @hidden 在 native AudioTrackList 就绪后,恢复上次选中的音轨;找不到时 fallback 到 audioPreference */
6024
+ private _applyAudioPreferenceNative;
5967
6025
  private _offPlayerEvents;
5968
6026
  /** {zh}
5969
6027
  * @hidden 切换插件展示
@@ -6107,35 +6165,21 @@ declare class VePlayer {
6107
6165
  * @brief 获取音频轨道列表。HLS 流通过 hls.js 获取,iOS 原生播放通过 HTMLMediaElement.audioTracks 获取。
6108
6166
  * @notes 每项包含 `id`、`name`、`lang`、`channels`、`default`、`selected` 字段;轨道数量 ≤ 1 时返回空数组。
6109
6167
  */
6110
- getAudioTracks(): Array<{
6111
- id: string | number;
6112
- name: string;
6113
- lang?: string;
6114
- channels?: string;
6115
- default: boolean;
6116
- selected: boolean;
6117
- [key: string]: unknown;
6118
- }>;
6168
+ getAudioTracks(): AudioTrackInfo[];
6119
6169
  /** {zh}
6120
6170
  * @brief 获取当前激活的音频轨道。
6121
6171
  * @notes HLS 流通过 hls.js 获取,iOS 原生播放通过 HTMLMediaElement.audioTracks 获取;无激活轨道时返回 null。
6122
6172
  */
6123
- getCurrentAudioTrack(): {
6124
- id: string | number;
6125
- name: string;
6126
- lang?: string;
6127
- channels?: string;
6128
- default: boolean;
6129
- selected: boolean;
6130
- [key: string]: unknown;
6131
- } | null;
6173
+ getCurrentAudioTrack(): AudioTrackInfo | null;
6132
6174
  /** {zh}
6133
6175
  * @brief 切换音频轨道。
6134
6176
  * @param id 目标轨道的 id,可通过 `getAudioTracks()` 获取。
6177
+ * @param lang 目标轨道的语言代码(BCP-47)。若提供,则 id 与 lang 同时匹配时才执行切换,
6178
+ * 可用于 iOS 原生 audioTracks 中存在重复 id 的场景。
6135
6179
  * @notes 切换完成后会触发 `Events.AUDIO_TRACK_CHANGE` 事件;
6136
6180
  * 同时 PC 端和移动端音频轨道插件的选中状态会自动更新。
6137
6181
  */
6138
- switchAudioTrack(id: string | number): void;
6182
+ switchAudioTrack(track: AudioTrackInfo): void;
6139
6183
  /** {zh}
6140
6184
  * @brief 当前播放器命中预加载的情况
6141
6185
  * @type {{