ynkszx-pc-study-player 0.0.1
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 +396 -0
- package/dist/index.js +32486 -0
- package/dist/style.css +1 -0
- package/package.json +33 -0
package/README.md
ADDED
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
# 介绍
|
|
2
|
+
|
|
3
|
+
- `ynkszx-pc-study-player`用于点播课的实时学时监管。
|
|
4
|
+
- **如果您需要的是的无内置播放器的 SDK,请先安装好插件后再看文档最后的“无内置播放器 SDK”。**
|
|
5
|
+
|
|
6
|
+
## 运行环境:
|
|
7
|
+
|
|
8
|
+
- 主流的浏览器环境(edge、谷歌、火狐、safari 等),不支持在**IE 浏览器**中使用
|
|
9
|
+
- 不支持在移动端的浏览器上使用,可能会出现交互异常
|
|
10
|
+
- 支持 Vue、React 等主流框架,也可直接运行在原生 js 的项目上
|
|
11
|
+
|
|
12
|
+
## 内置验证规则
|
|
13
|
+
|
|
14
|
+
- 小程序扫码人脸验证
|
|
15
|
+
- 验证码验证
|
|
16
|
+
- 活体验证
|
|
17
|
+
- 滑块验证
|
|
18
|
+
- 身份证后四位验证
|
|
19
|
+
|
|
20
|
+
# 安装
|
|
21
|
+
|
|
22
|
+
## CDN
|
|
23
|
+
|
|
24
|
+
如果您的项目中没有使用模块化开发,请直接看`cdn使用`。
|
|
25
|
+
|
|
26
|
+
## npm
|
|
27
|
+
|
|
28
|
+
```shell
|
|
29
|
+
npm i ynkszx-pc-study-player
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## yarn
|
|
33
|
+
|
|
34
|
+
```shell
|
|
35
|
+
yarn add ynkszx-pc-study-player
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## pnpm
|
|
39
|
+
|
|
40
|
+
```shell
|
|
41
|
+
pnpm add ynkszx-pc-study-player
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
# 使用
|
|
45
|
+
|
|
46
|
+
**注意:请确保 dom 加载完成后再实例化插件!!!**
|
|
47
|
+
|
|
48
|
+
## 模块化
|
|
49
|
+
|
|
50
|
+
以下是`typescript`使用示例,`javascript`请自行删除类型定义即可
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
import { StudyPlayer, type Option } from "ynkszx-pc-study-player";
|
|
54
|
+
|
|
55
|
+
// 引入样式
|
|
56
|
+
import "ynkszx-pc-study-player/style";
|
|
57
|
+
|
|
58
|
+
const options: Option = {
|
|
59
|
+
// 参数见下方Option说明
|
|
60
|
+
};
|
|
61
|
+
const player = new StudyPlayer(options); // 具体参数看下方说明
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## cdn 使用
|
|
65
|
+
|
|
66
|
+
版本号可以自行更改,**请保证使用的是最新的版本,最新版修复了一些问题**。
|
|
67
|
+
|
|
68
|
+
```html
|
|
69
|
+
<link
|
|
70
|
+
rel="stylesheet"
|
|
71
|
+
href="https://unpkg.com/ynkszx-pc-study-player@latest/dist/style.css"
|
|
72
|
+
/>
|
|
73
|
+
<script src="https://unpkg.com/ynkszx-pc-study-player@latest/dist/index.js"></script>
|
|
74
|
+
<script>
|
|
75
|
+
const player = new Study.StudyPlayer(Option);
|
|
76
|
+
</script>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
# 参数详解
|
|
80
|
+
|
|
81
|
+
## Option
|
|
82
|
+
|
|
83
|
+
类型定义如下:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
interface Option {
|
|
87
|
+
id: string;
|
|
88
|
+
color?: string;
|
|
89
|
+
baseUrl: string;
|
|
90
|
+
appId: string;
|
|
91
|
+
params: Params;
|
|
92
|
+
videoUrl: string;
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
各字段描述如下:
|
|
97
|
+
|
|
98
|
+
| 字段 | 类型 | 描述 | 是否必传 |
|
|
99
|
+
| -------- | ------ | ------------------------------------------------------------------------------------ | -------- |
|
|
100
|
+
| id | String | 容器盒子的 id,该元素必须手动设置宽高,**请确保该在该 dom 渲染完成后再去实例化插件** | 是 |
|
|
101
|
+
| color | String | 主题颜色,支持 css 的颜色值 | 否 |
|
|
102
|
+
| baseUrl | String | 服务器接口地址,如:http://loacalhost:3000 | 是 |
|
|
103
|
+
| appId | String | 用于接口鉴权的 id,对接的时候会提供 | 是 |
|
|
104
|
+
| params | Object | 见下方 params 描述 | 是 |
|
|
105
|
+
| videoUrl | String | 视频播放地址,注意后缀不能省略,如`.mp4`、`.m3u8` | 是 |
|
|
106
|
+
|
|
107
|
+
## params
|
|
108
|
+
|
|
109
|
+
类型定义如下:
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
interface Params {
|
|
113
|
+
appKey: string;
|
|
114
|
+
courseCode: number | string;
|
|
115
|
+
courseName: string;
|
|
116
|
+
duration: number;
|
|
117
|
+
durationAll: number;
|
|
118
|
+
sectionCode: number | string;
|
|
119
|
+
sectionName: string;
|
|
120
|
+
trainPostCode: string | number;
|
|
121
|
+
trainPostName: string;
|
|
122
|
+
trainTypeEnum: "SEND_JXJY" | "SEND_GQPX";
|
|
123
|
+
idCard: string;
|
|
124
|
+
studentName: string;
|
|
125
|
+
studyId?: number | string;
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
各字段描述如下:
|
|
130
|
+
|
|
131
|
+
| 字段 | 类型 | 描述 | 是否必传 |
|
|
132
|
+
| ------------- | ---------------- | ------------------------------------- | -------- |
|
|
133
|
+
| appKey | String | 学时监管的 appkey,授权使用,对接提供 | 是 |
|
|
134
|
+
| courseCode | String \| Number | 课程 id | 是 |
|
|
135
|
+
| courseName | String | 课程名称 | 是 |
|
|
136
|
+
| duration | Number | 当前视频时长 | 是 |
|
|
137
|
+
| durationAll | Number | 该岗位的需修学时 | 是 |
|
|
138
|
+
| sectionCode | String \| Number | 课程小节 id | 是 |
|
|
139
|
+
| sectionName | String | 课程小节名称 | 是 |
|
|
140
|
+
| trainPostCode | String \| Number | 培训岗位 code | 是 |
|
|
141
|
+
| trainPostName | String | 培训岗位名称 | 是 |
|
|
142
|
+
| trainTypeEnum | String | 培训类型(值只能是下面两个) | 是 |
|
|
143
|
+
| | 'SEND_JXJY' | 继续教育 | |
|
|
144
|
+
| | 'SEND_GQPX' | 岗前培训 | |
|
|
145
|
+
| idCard | String | 学员身份证 | 是 |
|
|
146
|
+
| studentName | String | 学员姓名 | 是 |
|
|
147
|
+
| studyId | Number \| String | 学员 id | 是 |
|
|
148
|
+
|
|
149
|
+
# 方法
|
|
150
|
+
|
|
151
|
+
## destroy
|
|
152
|
+
|
|
153
|
+
此方法用于销毁播放器。销毁后设置为`null`释放内存:
|
|
154
|
+
|
|
155
|
+
```ts
|
|
156
|
+
player?.destory();
|
|
157
|
+
player = null;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
# 事件
|
|
161
|
+
|
|
162
|
+
使用示例:
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
import { StudyPlayer, Event } from "ynkszx-pc-study-player";
|
|
166
|
+
// cdn引用的Event直接使用Sdk.Event
|
|
167
|
+
const player = new StudyPlayer(Option);
|
|
168
|
+
player.on(Event.PLAY, () => {
|
|
169
|
+
console.log("player");
|
|
170
|
+
});
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Event 参数说明:
|
|
174
|
+
|
|
175
|
+
| 事件名称 | 描述 |
|
|
176
|
+
| -------- | ---------------- |
|
|
177
|
+
| PLAY | 视频播放触发 |
|
|
178
|
+
| PAUSE | 视频暂停触发 |
|
|
179
|
+
| END | 视频播放结束触发 |
|
|
180
|
+
| ERROR | 视频播放错误触发 |
|
|
181
|
+
|
|
182
|
+
`Event.ERROR`说明:
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
player.on(Event.ERROR, (code: number) => {
|
|
186
|
+
console.log(code);
|
|
187
|
+
});
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
| code | 描述 |
|
|
191
|
+
| ---- | ---------------------- |
|
|
192
|
+
| 1001 | 资源请求被用户终止 |
|
|
193
|
+
| 1002 | 媒体请求网路错误 |
|
|
194
|
+
| 1003 | 媒体解码出错 |
|
|
195
|
+
| 1004 | 媒体资源格式不支持播放 |
|
|
196
|
+
| 1005 | 解封装过程出错 |
|
|
197
|
+
| 1006 | 重封转出错 |
|
|
198
|
+
| 1007 | hls 解析错误 |
|
|
199
|
+
| 1008 | MSE 出错 |
|
|
200
|
+
|
|
201
|
+
# 无内置播放器 SDK
|
|
202
|
+
|
|
203
|
+
`无内置播放器SDK`只提供了一些方法,界面需要自行开发。
|
|
204
|
+
|
|
205
|
+
## 基础使用
|
|
206
|
+
|
|
207
|
+
### 模块化使用
|
|
208
|
+
|
|
209
|
+
以下是`typescript`使用示例,`javascript`请自行删除类型定义即可:
|
|
210
|
+
|
|
211
|
+
```ts
|
|
212
|
+
import { StudySDK, type Params } from "ynkszx-pc-study-player";
|
|
213
|
+
|
|
214
|
+
const sdk = new StudySDK({
|
|
215
|
+
baseUrl: "xxx", //服务器接口地址,如:http://loacalhost:3000
|
|
216
|
+
appId: 'xxx', // 用于接口鉴权的id,对接的时候会提供
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
const paramas: Params = {
|
|
220
|
+
// params参数见上面Params
|
|
221
|
+
};
|
|
222
|
+
sdk.init(params);
|
|
223
|
+
...
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### CDN 使用
|
|
227
|
+
|
|
228
|
+
```js
|
|
229
|
+
<script src="https://unpkg.com/ynkszx-pc-study-player@latest/dist/index.js"></script>
|
|
230
|
+
<script>
|
|
231
|
+
const sdk = new Study.StudySDK({
|
|
232
|
+
baseUrl: "xxx",
|
|
233
|
+
appId: 'xxx',
|
|
234
|
+
});
|
|
235
|
+
const paramas = {
|
|
236
|
+
// params参数见上面Params
|
|
237
|
+
};
|
|
238
|
+
sdk.init(params);
|
|
239
|
+
</script>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## 方法说明
|
|
243
|
+
|
|
244
|
+
**所有方法都是返回`Promise`,对接的时候需要自行判断 api 是否返回状态是`resolve`状态。**
|
|
245
|
+
|
|
246
|
+
### init
|
|
247
|
+
|
|
248
|
+
初始化播放
|
|
249
|
+
|
|
250
|
+
```js
|
|
251
|
+
sdk.init(params);
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**`params`字段描述见上。**
|
|
255
|
+
|
|
256
|
+
**返回值**:
|
|
257
|
+
|
|
258
|
+
```js
|
|
259
|
+
{
|
|
260
|
+
progress: "视频观看记录,单位(秒)",
|
|
261
|
+
studyInfoId: "学习id",
|
|
262
|
+
ruleType: "验证规则类型,("FACE", "人脸"),("LIVINGBODY", "活体"),("SLIDER", "滑块"),("IDCARD", "身份证"),("NUMBER", "数字")",
|
|
263
|
+
initVerify: "是否需要首验证 0否1是",
|
|
264
|
+
validateId: '验证id'
|
|
265
|
+
effectiveTm: "验证有效时间(秒)",
|
|
266
|
+
sdkId: "唯一值"
|
|
267
|
+
}
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
### play
|
|
271
|
+
|
|
272
|
+
视频播放的时候调用
|
|
273
|
+
|
|
274
|
+
```js
|
|
275
|
+
sdk.play({
|
|
276
|
+
studyInfoId: "xxx", // 学习Id,由init接口返回的,必传
|
|
277
|
+
countHours: 1111, // 视频当前进度,必传,单位(秒),
|
|
278
|
+
})
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### pause
|
|
282
|
+
|
|
283
|
+
视频暂停的时候调用
|
|
284
|
+
|
|
285
|
+
```js
|
|
286
|
+
sdk.pause() {
|
|
287
|
+
studyInfoId: "xxx", // 学习Id,由init接口返回的,必传
|
|
288
|
+
countHours: 1111, // 视频当前进度,必传,单位(秒)
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### end
|
|
293
|
+
|
|
294
|
+
视频播放结束调用
|
|
295
|
+
|
|
296
|
+
```js
|
|
297
|
+
sdk.end({
|
|
298
|
+
studyInfoId: "xxx", // 学习Id,由init接口返回的,必传
|
|
299
|
+
countHours: 1111, // 视频当前进度,必传,单位(秒)
|
|
300
|
+
})
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### progress
|
|
304
|
+
|
|
305
|
+
视频播放进度同步,建议每隔 30 秒调用一次
|
|
306
|
+
|
|
307
|
+
```js
|
|
308
|
+
sdk.progress({
|
|
309
|
+
studyInfoId: "xxx", // 学习Id,由init接口返回的,必传
|
|
310
|
+
countHours: 1111, // 视频当前进度,必传,单位(秒)
|
|
311
|
+
sdkId: 'xxxx' // 唯一值,由init接口返回,必传
|
|
312
|
+
})
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
返回值:
|
|
316
|
+
|
|
317
|
+
```js
|
|
318
|
+
{
|
|
319
|
+
validateId: '验证id',
|
|
320
|
+
ruleType: '验证类型,("FACE", "人脸"),("LIVINGBODY", "活体"),("SLIDER", "滑块验证"),("IDCARD", "身份证后四位校验"),("NUMBER", "数字验证")',
|
|
321
|
+
isValidate: "是否要弹框验证(0否1是)",
|
|
322
|
+
effectiveTm: '验证有效时间(秒)'
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### getVerifyInfo
|
|
327
|
+
|
|
328
|
+
获取验证详情,校验方式为**数字**的时候调用,验证码换一张也调用该接口
|
|
329
|
+
|
|
330
|
+
```js
|
|
331
|
+
sdk.getVerifyInfo({
|
|
332
|
+
validateId: "xxxx", // 验证id,由progress返回,必传
|
|
333
|
+
});
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
返回值:base64 格式的图片
|
|
337
|
+
|
|
338
|
+
### getVerifyInfoRefresh
|
|
339
|
+
|
|
340
|
+
倒计时结束验证超时后,重新获取验证方式
|
|
341
|
+
|
|
342
|
+
```js
|
|
343
|
+
sdk.getVerifyInfoRefresh({
|
|
344
|
+
validateId: "验证id,由progress返回,必传",
|
|
345
|
+
});
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
返回值:
|
|
349
|
+
|
|
350
|
+
```js
|
|
351
|
+
{
|
|
352
|
+
validateId: '验证id',
|
|
353
|
+
effectiveTm: '超时时间',
|
|
354
|
+
ruleType: "验证类型,同上",
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### verify
|
|
359
|
+
|
|
360
|
+
校验验证,验证类型为滑块、身份证、数字的时候调用该接口校验,校验通过后即可继续播放。
|
|
361
|
+
|
|
362
|
+
```js
|
|
363
|
+
sdk.verify({
|
|
364
|
+
validateId: "验证id,由progress返回,必传",
|
|
365
|
+
ruleValue: "验证值,滑块验证直接传TURE,必传",
|
|
366
|
+
});
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### getFaceVerifyInfo
|
|
370
|
+
|
|
371
|
+
获取验证详情,校验方式为滑人脸、活体验证的时候调用
|
|
372
|
+
|
|
373
|
+
```js
|
|
374
|
+
sdk.getFaceVerifyInfo({
|
|
375
|
+
validateId: "验证id,由progress返回,必传",
|
|
376
|
+
});
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
返回值:
|
|
380
|
+
|
|
381
|
+
```js
|
|
382
|
+
{
|
|
383
|
+
qrCode: "base64格式的小程序码图片";
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### verifyFace
|
|
388
|
+
|
|
389
|
+
查询人脸或活体小程序的验证结果,**该接口需要轮训使用**,建议 2 秒执行 1 次。
|
|
390
|
+
|
|
391
|
+
```js
|
|
392
|
+
sdk.verifyFace({
|
|
393
|
+
validateId: "验证id,由progress返回,必传",
|
|
394
|
+
ruleType: "验证类型,("FACE", "人脸"),("LIVINGBODY", "活体"),必传"
|
|
395
|
+
})
|
|
396
|
+
```
|