@polyv/wx-live-player-core 3.0.0-dev.12

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/README.md ADDED
@@ -0,0 +1,153 @@
1
+
2
+ # 直播小程序播放核心 SDK
3
+
4
+ ## 🎉 当前版本功能概览
5
+
6
+ 保利威直播小程序插件现已全面升级,为您提供更强大、更灵活的直播观看体验!
7
+
8
+ ### ✨ 核心功能特性
9
+
10
+ - **🎥 多场景播放支持**:直播、回放、暖场图片/视频无缝切换
11
+ - **🌐 多语言国际化**:逐步支持中文、英文等多语言界面
12
+ - **🎮 画中画模式**:支持小窗播放,提升用户体验
13
+ - **⚡ 无延迟播放**:支持超低延迟直播,实时互动更流畅
14
+ - **🎛️ 灵活控制插槽**:9种自定义控制插槽,满足各种UI需求
15
+ - **📱 响应式设计**:完美适配各种屏幕尺寸
16
+
17
+
18
+ ### 🎯 重大功能升级
19
+
20
+ #### 🌟 新增画中画(PiP)支持
21
+ - **功能描述**:支持小窗播放模式,用户可以在观看直播的同时进行其他操作
22
+ - **技术实现**:基于微信小程序原生 `picture-in-picture-mode` 属性
23
+ - **使用场景**:多任务处理、边看边聊、后台播放等
24
+ - **配置方式**:
25
+ ```javascript
26
+ <plv-live-player
27
+ pipMode="{{ ['push', 'pop'] }}"
28
+ config="{{ config }}"
29
+ />
30
+ ```
31
+
32
+ #### ⚡ 无延迟播放技术
33
+ - **功能描述**:支持超低延迟直播播放,延迟可低至1秒以内
34
+ - **技术特点**:
35
+ - 智能设备兼容性检测
36
+ - 自动降级机制
37
+ - **设备要求**:
38
+ - 微信基础库 ≥ 1.7.0
39
+ - Android系统 ≥ 8.0.27
40
+ - iOS系统 ≥ 8.0.34
41
+ - **配置方式**:
42
+ ```javascript
43
+ // 在设置面板中可选择"正常延迟"或"无延迟"模式
44
+ ```
45
+
46
+ #### 🌍 多语言国际化支持
47
+ - **支持语言**:中文(zh_CN)、英文(en)
48
+ - **功能特点**:
49
+ - 完整的界面文本翻译
50
+ - 动态语言切换
51
+ - 模板字符串支持
52
+ - **配置方式**:逐步开启, 后续将支持全量开放
53
+
54
+ #### 🎛️ 增强的控制插槽系统
55
+ 新增9种自定义控制插槽,支持完全自定义播放器界面:
56
+
57
+ | 插槽类型 | 描述 | 使用场景 |
58
+ |---------|------|----------|
59
+ | `skin` | 完整控制栏 | 完全自定义控制栏 |
60
+ | `skin-play` | 播放按钮 | 自定义播放按钮样式 |
61
+ | `skin-pause` | 暂停按钮 | 自定义暂停按钮样式 |
62
+ | `skin-enterFullScreen` | 进入全屏按钮 | 自定义全屏按钮 |
63
+ | `skin-exitFullScreen` | 退出全屏按钮 | 自定义退出全屏按钮 |
64
+ | `skin-progress` | 进度条 | 自定义进度条组件 |
65
+ | `skin-setting` | 设置按钮 | 自定义设置按钮 |
66
+ | `skin-refresh` | 刷新按钮 | 自定义刷新按钮 |
67
+ | `skin-latency-setting` | 延迟设置 | 自定义延迟模式选择 |
68
+
69
+ #### 🔥 暖场功能增强
70
+ - **暖场图片**:支持自定义暖场图片显示
71
+ - **暖场视频**:支持暖场视频流播放
72
+ - **自动切换**:直播开始后自动切换到直播流
73
+
74
+ ### 🎮 播放控制增强
75
+
76
+ #### 📱 播放器接口
77
+ 提供丰富的播放器控制接口:
78
+
79
+ ```javascript
80
+ // 播放控制
81
+ player.play(); // 播放
82
+ player.pause(); // 暂停
83
+ player.enterFullScreen(); // 进入全屏
84
+ player.exitFullScreen(); // 退出全屏
85
+ player.refresh(); // 刷新(仅直播)
86
+ player.seek(50); // 快进(仅回放)
87
+
88
+ // 获取播放器上下文
89
+ const playerCtx = player.getVideoContext();
90
+ playerCtx.exitPictureInPicture(); // 退出画中画
91
+ ```
92
+
93
+ #### 🎛️ 设置面板功能
94
+ - **线路切换**:支持多线路选择
95
+ - **清晰度切换**:支持多码率选择
96
+ - **播放倍速**:支持0.5x-2x倍速播放(仅回放)
97
+ - **延迟模式**:支持正常延迟/无延迟切换
98
+
99
+ ### 📊 事件系统完善
100
+
101
+ #### 🎯 播放事件
102
+ 完整的播放状态事件监听:
103
+
104
+ ```javascript
105
+ // 播放状态事件
106
+ bind:videoPlay="onVideoPlay" // 视频开始播放
107
+ bind:videoPause="onVideoPause" // 视频暂停播放
108
+ bind:videoEnded="onVideoEnded" // 视频播放结束
109
+ bind:videoWaiting="onVideoWaiting" // 视频缓冲中
110
+ bind:videoError="onVideoError" // 视频播放异常
111
+
112
+ // 直播专用事件
113
+ bind:livePlay="onLivePlay" // 直播开始播放
114
+ bind:livePause="onLivePause" // 直播暂停播放
115
+ bind:liveEnded="onLiveEnded" // 直播结束
116
+ bind:liveWaiting="onLiveWaiting" // 直播缓冲中
117
+ bind:liveError="onLiveError" // 直播异常
118
+
119
+ // 回放专用事件
120
+ bind:vodPlay="onVodPlay" // 回放开始播放
121
+ bind:vodPause="onVodPause" // 回放暂停播放
122
+ bind:vodEnded="onVodEnded" // 回放结束
123
+ bind:vodTimeUpdate="onVodTimeUpdate" // 回放时间更新
124
+ bind:vodDurationUpdate="onVodDurationUpdate" // 回放时长更新
125
+ bind:vodWaiting="onVodWaiting" // 回放缓冲中
126
+ bind:vodSeekCompleted="onVodSeekCompleted" // 回放跳转完成
127
+ bind:vodError="onVodError" // 回放异常
128
+
129
+ // 界面事件
130
+ bind:fullScreenChange="onFullScreenChange" // 全屏状态变化
131
+ bind:resolutionChange="onResolutionChange" // 分辨率变化
132
+ ```
133
+
134
+ ### 🛠️ 开发体验提升
135
+
136
+ #### 📚 完整文档支持
137
+ - **API文档**:详细的接口说明和使用示例
138
+ - **类型定义**:完整的TypeScript类型支持
139
+ - **开发指南**:从安装到部署的完整教程
140
+
141
+
142
+ ## 🎯 性能优化
143
+
144
+ ### 🚀 播放性能
145
+ - **首屏加载**:优化到1秒以内
146
+ - **切换流畅度**:线路/清晰度切换无卡顿
147
+ - **内存占用**:优化内存使用,减少卡顿
148
+
149
+ ### 📱 用户体验
150
+ - **响应速度**:控制按钮响应时间 < 100ms
151
+ - **错误处理**:完善的错误提示和自动重试
152
+
153
+
@@ -0,0 +1,32 @@
1
+ /**
2
+ * 鉴权、频道配置接口
3
+ */
4
+ export declare const AUTH_URL: string;
5
+ /**
6
+ * 限制配置接口
7
+ */
8
+ export declare const RESTRICT_JSON_URL: string;
9
+ /**
10
+ * 限制配置备用接口
11
+ */
12
+ export declare const RESTRICT_JSON_BACKUP_URL: string;
13
+ /**
14
+ * 频道配置接口
15
+ */
16
+ export declare const CHANNEL_JSON_URL: string;
17
+ /**
18
+ * 频道配置备用接口
19
+ */
20
+ export declare const CHANNEL_JSON_BACKUP_URL: string;
21
+ /**
22
+ * 获取API状态
23
+ */
24
+ export declare const API_STATUS_URL: string;
25
+ /**
26
+ * 发送统计日志接口
27
+ */
28
+ export declare const STATISTICS_URL: string;
29
+ /**
30
+ * 发送统计备用日志接口
31
+ */
32
+ export declare const STATISTICS_BACKUP_URL: string;
package/api/index.d.ts ADDED
@@ -0,0 +1,69 @@
1
+ /**
2
+ * 鉴权校验接口
3
+ * @param appId
4
+ * @param sign
5
+ * @param timestamp
6
+ * @param cid
7
+ * @returns
8
+ */
9
+ export declare function checkAuth<K>(params: {
10
+ appId: string;
11
+ sign: string;
12
+ timestamp: number;
13
+ channelId: string;
14
+ }): Promise<K>;
15
+ /**
16
+ * 鉴权校验接口
17
+ * @param params
18
+ */
19
+ export declare function checkAuthByToken<K>(params: {
20
+ channelId: string;
21
+ token: string;
22
+ }): Promise<K>;
23
+ /**
24
+ * 获取限制信息配置
25
+ * @param uid 用户ID
26
+ * @param cid 频道ID
27
+ * @returns 限制信息配置
28
+ */
29
+ export declare function getBackupRestrictJson<T, K>(uid: string, cid: string): Promise<K>;
30
+ /**
31
+ * 获取限制信息配置备用接口
32
+ * @param uid 用户ID
33
+ * @param cid 频道ID
34
+ * @returns 限制信息配置
35
+ */
36
+ export declare function getRestrictJson<T, K>(uid: string, cid: string): Promise<K>;
37
+ /**
38
+ * 获取频道配置
39
+ * @param uid 用户ID
40
+ * @param cid 频道ID
41
+ * @returns 频道配置
42
+ */
43
+ export declare function getChannelJson<T, K>(uid: string, cid: string): Promise<K>;
44
+ /**
45
+ * 获取频道配置
46
+ * @param uid 用户ID
47
+ * @param cid 频道ID
48
+ * @returns 频道配置
49
+ */
50
+ export declare function getBackupChannelJson<T, K>(uid: string, cid: string): Promise<K>;
51
+ /**
52
+ * 获取API状态
53
+ * @param cid 频道ID
54
+ * @param streamName 流名
55
+ * @returns
56
+ */
57
+ export declare function getApiStatus<T, K>(cid: string, streamName: string): Promise<K>;
58
+ /**
59
+ * 发送统计日志
60
+ * @param data 统计数据
61
+ * @returns
62
+ */
63
+ export declare function sendStatistics<T, K>(data: T): Promise<K>;
64
+ /**
65
+ * 发送统计日志, 备用接口
66
+ * @param data 统计数据
67
+ * @returns
68
+ */
69
+ export declare function sendBackupStatistics<T, K>(data: T): Promise<K>;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 请求器
3
+ * @param url
4
+ * @param options
5
+ * @returns
6
+ */
7
+ export declare function request<T, R>(url: string, options: T): Promise<R>;
package/core.d.ts ADDED
@@ -0,0 +1,93 @@
1
+ import Store from './store';
2
+ import { Statistics } from './modules/statistics/statistics-module';
3
+ import { Status } from './modules/status/status-module';
4
+ import { RestrictJson } from './modules/restrict/restrict-module';
5
+ import { ChannelModule } from './modules/channel/channel-module';
6
+ import { Auth } from './modules/auth/auth-module';
7
+ import { Warm } from './modules/warm/warm-module';
8
+ import { Live } from './modules/live/live-module';
9
+ import { Playback } from './modules/playback/playback-module';
10
+ import { LineControl } from './modules/line-control/line-control-module';
11
+ import { LevelControl } from './modules/level-control/level-control-module';
12
+ import { QuickControl } from './modules/quick-control/quick-control-module';
13
+ import { Monitor } from './modules/monitor/monitor-module';
14
+ import EventEmitter from 'eventemitter3';
15
+ import { PlayerConfig } from './types';
16
+ export default class PlayerCore {
17
+ config: PlayerConfig;
18
+ /**
19
+ * 数据存储
20
+ */
21
+ store: Store;
22
+ /**
23
+ * 事件
24
+ */
25
+ events: EventEmitter;
26
+ /**
27
+ * 鉴权
28
+ */
29
+ auth: Auth;
30
+ /**
31
+ * 限制观看配置
32
+ */
33
+ restrict: RestrictJson;
34
+ /**
35
+ * 频道配置
36
+ */
37
+ channel: ChannelModule;
38
+ /**
39
+ * 状态
40
+ */
41
+ status: Status;
42
+ /**
43
+ * 统计
44
+ */
45
+ statistics: Statistics;
46
+ /**
47
+ * 暖场
48
+ */
49
+ warm: Warm;
50
+ /**
51
+ * 直播
52
+ */
53
+ live: Live;
54
+ /**
55
+ * 回放
56
+ */
57
+ playback: Playback;
58
+ /**
59
+ * 无延迟控制
60
+ */
61
+ quickControl: QuickControl;
62
+ /**
63
+ * 线路控制
64
+ */
65
+ lineControl: LineControl;
66
+ /**
67
+ * 清晰度控制
68
+ */
69
+ levelControl: LevelControl;
70
+ /**
71
+ * 监控
72
+ */
73
+ monitor: Monitor;
74
+ /**
75
+ * 是否已触发播放就绪事件
76
+ */
77
+ private __hasTriggerReady;
78
+ constructor(config: PlayerConfig);
79
+ /**
80
+ * 初始化数据存储
81
+ */
82
+ private initStore;
83
+ getConfig(): PlayerConfig;
84
+ /**
85
+ * 更新播放器信息
86
+ */
87
+ updatePlayerInfo(): void;
88
+ /**
89
+ * 触发类型变更事件 (update_media_info)
90
+ */
91
+ private __emitTypeChangeEvent;
92
+ destroy(): void;
93
+ }
@@ -0,0 +1,86 @@
1
+ import { PlayType, PlayerMediaInfo } from './types';
2
+ import { PlayerError } from './types/error-code';
3
+ import { IGetApiStatusResponse } from './modules/status/type';
4
+ import { IChannelJsonConfig } from './modules/channel/type';
5
+ /**
6
+ * 播放器事件类型
7
+ */
8
+ export declare enum PlayerEventsType {
9
+ /**
10
+ * 播放器准备完成
11
+ */
12
+ READY = "ready",
13
+ /**
14
+ * 播放器状态变化
15
+ */
16
+ API_STATUS_CHANGE = "api_status_change",
17
+ /**
18
+ * 播放器播放类型变化
19
+ */
20
+ PLAY_TYPE_CHANGE = "play_type_change",
21
+ /**
22
+ * 播放器错误
23
+ */
24
+ ERROR = "error",
25
+ /**
26
+ * 播放器播放
27
+ */
28
+ PLAYING = "playing",
29
+ /**
30
+ * 播放器暂停
31
+ */
32
+ PAUSE = "pause",
33
+ /**
34
+ * 更新媒体信息
35
+ */
36
+ UPDATE_MEDIA_INFO = "update_media_info",
37
+ /**
38
+ * 线路切换
39
+ */
40
+ LINE_CHANGE = "line_change",
41
+ /**
42
+ * 清晰度切换
43
+ */
44
+ LEVEL_CHANGE = "level_change",
45
+ /**
46
+ * 播放配置更新
47
+ * @ignore
48
+ */
49
+ UPDATE_CHANNEL_JSON = "update_channel_json",
50
+ /**
51
+ * 播放状态更新
52
+ * @ignore
53
+ */
54
+ LIVE_STATUS_CHANGE = "live_status_change",
55
+ /**
56
+ * 延迟播放错误, 切换到正常延迟播放
57
+ */
58
+ LATENCY_PLAY_ERROR = "latency_play_error"
59
+ }
60
+ /** 播放器事件 */
61
+ export type PlayerEventMap = {
62
+ /** 播放器就绪 */
63
+ [PlayerEventsType.READY]: () => void;
64
+ /** 播放类型变更 */
65
+ [PlayerEventsType.PLAY_TYPE_CHANGE]: (playType: PlayType) => void;
66
+ /** 播放器错误 */
67
+ [PlayerEventsType.ERROR]: (error: PlayerError) => void;
68
+ /** 更新媒体信息 */
69
+ [PlayerEventsType.UPDATE_MEDIA_INFO]: (mediaInfo: PlayerMediaInfo) => void;
70
+ /** 线路切换 */
71
+ [PlayerEventsType.LINE_CHANGE]: (line: number) => void;
72
+ /** 清晰度切换 */
73
+ [PlayerEventsType.LEVEL_CHANGE]: (level: number) => void;
74
+ /**
75
+ * 播放状态更新
76
+ * @ignore
77
+ */
78
+ [PlayerEventsType.LIVE_STATUS_CHANGE]: (statusInfo: IGetApiStatusResponse) => void;
79
+ /**
80
+ * 播放配置更新
81
+ * @ignore
82
+ */
83
+ [PlayerEventsType.UPDATE_CHANNEL_JSON]: (channelJsonInfo: IChannelJsonConfig) => void;
84
+ /** 延迟播放错误 */
85
+ [PlayerEventsType.LATENCY_PLAY_ERROR]: () => void;
86
+ };
package/export.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './events-type';
3
+ export * from './modules/status/export';
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ /** @file 入口文件 */
2
+ import { PolyvLive } from './player';
3
+ export default PolyvLive;
4
+ export * from './export';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @file 鉴权
3
+ */
4
+ import { ModuleBase } from '../module-base';
5
+ /**
6
+ * 鉴权
7
+ */
8
+ export declare class Auth extends ModuleBase {
9
+ /**
10
+ * 检查是否有对应频道的观看权限
11
+ * @returns
12
+ */
13
+ check(): Promise<void>;
14
+ }
@@ -0,0 +1,18 @@
1
+ import { YN } from '../../types';
2
+ /**
3
+ * 频道配置响应参数
4
+ */
5
+ export interface IDetailConfig {
6
+ /**
7
+ * 无延迟可用状态
8
+ */
9
+ pureRtcAvailState: YN;
10
+ /**
11
+ * 无延迟开关状态
12
+ */
13
+ quickLiveEnabled: YN;
14
+ /**
15
+ * rtc类型
16
+ */
17
+ rtcType: string;
18
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @file channel.json 模块
3
+ */
4
+ import { ModuleBase } from '../module-base';
5
+ import { IChannelJsonConfig } from './type';
6
+ export declare class ChannelModule extends ModuleBase {
7
+ /**
8
+ * 获取频道配置
9
+ * @returns
10
+ */
11
+ getChannelJson(): Promise<IChannelJsonConfig | undefined>;
12
+ private __decryptChannelData;
13
+ /**
14
+ * 检查账号状态
15
+ * @param status 账号状态
16
+ */
17
+ private __checkAccount;
18
+ /**
19
+ * 获取频道配置并存储配置
20
+ * @returns
21
+ */
22
+ getChannelJsonAndStoreConfig(): Promise<IChannelJsonConfig | undefined>;
23
+ }
@@ -0,0 +1,163 @@
1
+ import { YN } from "../../types";
2
+ /**
3
+ * 多码率配置
4
+ */
5
+ export interface IDefinitions {
6
+ /**
7
+ * 码率
8
+ */
9
+ definition: string;
10
+ /**
11
+ * 地址
12
+ */
13
+ url: string;
14
+ /**
15
+ * m3u8地址
16
+ */
17
+ m3u8: string;
18
+ }
19
+ /**
20
+ * 多码率配置
21
+ */
22
+ export interface IMultirateModel {
23
+ /**
24
+ * 默认码率
25
+ */
26
+ defaultDefinition: string;
27
+ /**
28
+ * 默认码率地址
29
+ */
30
+ defaultDefinitionUrl: string;
31
+ /**
32
+ * 默认码率m3u8地址
33
+ */
34
+ defaultDefinitionM3u8Url: string;
35
+ /**
36
+ * 多码率配置
37
+ */
38
+ definitions: IDefinitions[];
39
+ }
40
+ export interface ILineModel {
41
+ /**
42
+ * flv地址
43
+ */
44
+ flv: string;
45
+ /**
46
+ * m3u8地址
47
+ */
48
+ m3u8: string;
49
+ /**
50
+ * cdn类型
51
+ */
52
+ cdnType: string;
53
+ /**
54
+ * 多码率配置
55
+ */
56
+ multirateModel: IMultirateModel;
57
+ /**
58
+ * 无延迟播放地址
59
+ */
60
+ quickLiveUrl?: string;
61
+ /**
62
+ * 无延迟播放是否开启
63
+ */
64
+ quickLiveEnabled: YN;
65
+ }
66
+ /**
67
+ * 频道配置接口响应加密数据
68
+ */
69
+ export interface IChannelJsonEncryptResponse {
70
+ /**
71
+ * 状态码
72
+ */
73
+ code: number;
74
+ /**
75
+ * 状态信息
76
+ */
77
+ status: string;
78
+ /**
79
+ * 加密数据
80
+ */
81
+ body: string;
82
+ }
83
+ /**
84
+ * 频道播放器配置响应参数
85
+ */
86
+ export interface IChannelJsonConfig {
87
+ /**
88
+ * 流名
89
+ */
90
+ stream: string;
91
+ /**
92
+ * 封面图片
93
+ */
94
+ coverImage: string;
95
+ /**
96
+ * 暖场图片
97
+ */
98
+ waitImage: string;
99
+ /**
100
+ * 暖场视频
101
+ */
102
+ warmUpFlv: string;
103
+ /**
104
+ * m3u8地址
105
+ */
106
+ m3u8Url: string;
107
+ /**
108
+ * 频道直播状态查询频率, 单位秒
109
+ */
110
+ channelLiveStatusQueryFrequency: number;
111
+ /**
112
+ * 线路配置
113
+ */
114
+ lines: ILineModel[];
115
+ /**
116
+ * 回放视频 (mp4格式)
117
+ */
118
+ recordFileUrl: string;
119
+ /**
120
+ * 回放视频(m3u8格式)
121
+ */
122
+ recordFileM3u8Url: string;
123
+ /**
124
+ * 回放时长
125
+ */
126
+ recordFileDuration: number;
127
+ /**
128
+ * 回放场次ID
129
+ */
130
+ recordFileSessionId: string;
131
+ /**
132
+ * 频道详细信息
133
+ */
134
+ channelRestrictModel: {
135
+ /**
136
+ * 直播频道所属的账号情况
137
+ */
138
+ userStatus: string;
139
+ };
140
+ /**
141
+ * 拉流防盗链
142
+ */
143
+ aliPullProtectExpTime: number;
144
+ }
145
+ /**
146
+ * 频道配置接口请求参数
147
+ */
148
+ export interface IChannelJsonRequest {
149
+ /**
150
+ * 随机数
151
+ */
152
+ ran: number;
153
+ }
154
+ export interface IGetNewestPlayUrlsResponse {
155
+ /**
156
+ * flv地址
157
+ */
158
+ flv: string;
159
+ /**
160
+ * m3u8地址
161
+ */
162
+ m3u8: string;
163
+ }