npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ynkszx-pc-study-player

v0.0.1

Published

- `ynkszx-pc-study-player`用于点播课的实时学时监管。 - **如果您需要的是的无内置播放器的 SDK,请先安装好插件后再看文档最后的“无内置播放器 SDK”。**

Readme

介绍

  • ynkszx-pc-study-player用于点播课的实时学时监管。
  • 如果您需要的是的无内置播放器的 SDK,请先安装好插件后再看文档最后的“无内置播放器 SDK”。

运行环境:

  • 主流的浏览器环境(edge、谷歌、火狐、safari 等),不支持在IE 浏览器中使用
  • 不支持在移动端的浏览器上使用,可能会出现交互异常
  • 支持 Vue、React 等主流框架,也可直接运行在原生 js 的项目上

内置验证规则

  • 小程序扫码人脸验证
  • 验证码验证
  • 活体验证
  • 滑块验证
  • 身份证后四位验证

安装

CDN

如果您的项目中没有使用模块化开发,请直接看cdn使用

npm

npm i ynkszx-pc-study-player

yarn

yarn add ynkszx-pc-study-player

pnpm

pnpm add ynkszx-pc-study-player

使用

注意:请确保 dom 加载完成后再实例化插件!!!

模块化

以下是typescript使用示例,javascript请自行删除类型定义即可

import { StudyPlayer, type Option } from "ynkszx-pc-study-player";

// 引入样式
import "ynkszx-pc-study-player/style";

const options: Option = {
  // 参数见下方Option说明
};
const player = new StudyPlayer(options); // 具体参数看下方说明

cdn 使用

版本号可以自行更改,请保证使用的是最新的版本,最新版修复了一些问题

<link
  rel="stylesheet"
  href="https://unpkg.com/ynkszx-pc-study-player@latest/dist/style.css"
/>
<script src="https://unpkg.com/ynkszx-pc-study-player@latest/dist/index.js"></script>
<script>
  const player = new Study.StudyPlayer(Option);
</script>

参数详解

Option

类型定义如下:

interface Option {
  id: string;
  color?: string;
  baseUrl: string;
  appId: string;
  params: Params;
  videoUrl: string;
}

各字段描述如下:

| 字段 | 类型 | 描述 | 是否必传 | | -------- | ------ | ------------------------------------------------------------------------------------ | -------- | | id | String | 容器盒子的 id,该元素必须手动设置宽高,请确保该在该 dom 渲染完成后再去实例化插件 | 是 | | color | String | 主题颜色,支持 css 的颜色值 | 否 | | baseUrl | String | 服务器接口地址,如:http://loacalhost:3000 | 是 | | appId | String | 用于接口鉴权的 id,对接的时候会提供 | 是 | | params | Object | 见下方 params 描述 | 是 | | videoUrl | String | 视频播放地址,注意后缀不能省略,如.mp4.m3u8 | 是 |

params

类型定义如下:

interface Params {
  appKey: string;
  courseCode: number | string;
  courseName: string;
  duration: number;
  durationAll: number;
  sectionCode: number | string;
  sectionName: string;
  trainPostCode: string | number;
  trainPostName: string;
  trainTypeEnum: "SEND_JXJY" | "SEND_GQPX";
  idCard: string;
  studentName: string;
  studyId?: number | string;
}

各字段描述如下:

| 字段 | 类型 | 描述 | 是否必传 | | ------------- | ---------------- | ------------------------------------- | -------- | | appKey | String | 学时监管的 appkey,授权使用,对接提供 | 是 | | courseCode | String | Number | 课程 id | 是 | | courseName | String | 课程名称 | 是 | | duration | Number | 当前视频时长 | 是 | | durationAll | Number | 该岗位的需修学时 | 是 | | sectionCode | String | Number | 课程小节 id | 是 | | sectionName | String | 课程小节名称 | 是 | | trainPostCode | String | Number | 培训岗位 code | 是 | | trainPostName | String | 培训岗位名称 | 是 | | trainTypeEnum | String | 培训类型(值只能是下面两个) | 是 | | | 'SEND_JXJY' | 继续教育 | | | | 'SEND_GQPX' | 岗前培训 | | | idCard | String | 学员身份证 | 是 | | studentName | String | 学员姓名 | 是 | | studyId | Number | String | 学员 id | 是 |

方法

destroy

此方法用于销毁播放器。销毁后设置为null释放内存:

player?.destory();
player = null;

事件

使用示例:

import { StudyPlayer, Event } from "ynkszx-pc-study-player";
// cdn引用的Event直接使用Sdk.Event
const player = new StudyPlayer(Option);
player.on(Event.PLAY, () => {
  console.log("player");
});

Event 参数说明:

| 事件名称 | 描述 | | -------- | ---------------- | | PLAY | 视频播放触发 | | PAUSE | 视频暂停触发 | | END | 视频播放结束触发 | | ERROR | 视频播放错误触发 |

Event.ERROR说明:

player.on(Event.ERROR, (code: number) => {
  console.log(code);
});

| code | 描述 | | ---- | ---------------------- | | 1001 | 资源请求被用户终止 | | 1002 | 媒体请求网路错误 | | 1003 | 媒体解码出错 | | 1004 | 媒体资源格式不支持播放 | | 1005 | 解封装过程出错 | | 1006 | 重封转出错 | | 1007 | hls 解析错误 | | 1008 | MSE 出错 |

无内置播放器 SDK

无内置播放器SDK只提供了一些方法,界面需要自行开发。

基础使用

模块化使用

以下是typescript使用示例,javascript请自行删除类型定义即可:

import { StudySDK, type Params } from "ynkszx-pc-study-player";

const sdk = new StudySDK({
  baseUrl: "xxx",  //服务器接口地址,如:http://loacalhost:3000
  appId: 'xxx',  // 用于接口鉴权的id,对接的时候会提供
});

const paramas: Params = {
  // params参数见上面Params
};
sdk.init(params);
...

CDN 使用

<script src="https://unpkg.com/ynkszx-pc-study-player@latest/dist/index.js"></script>
<script>
  const sdk = new Study.StudySDK({
    baseUrl: "xxx",
    appId: 'xxx',
  });
  const paramas = {
    // params参数见上面Params
  };
  sdk.init(params);
</script>

方法说明

所有方法都是返回Promise,对接的时候需要自行判断 api 是否返回状态是resolve状态。

init

初始化播放

sdk.init(params);

params字段描述见上。

返回值

{
    progress: "视频观看记录,单位(秒)",
    studyInfoId: "学习id",
    ruleType: "验证规则类型,("FACE", "人脸"),("LIVINGBODY", "活体"),("SLIDER", "滑块"),("IDCARD", "身份证"),("NUMBER", "数字")",
    initVerify: "是否需要首验证 0否1是",
    validateId: '验证id'
    effectiveTm: "验证有效时间(秒)",
    sdkId: "唯一值"
}

play

视频播放的时候调用

sdk.play({
    studyInfoId: "xxx", // 学习Id,由init接口返回的,必传
    countHours: 1111, // 视频当前进度,必传,单位(秒),
})

pause

视频暂停的时候调用

sdk.pause() {
   studyInfoId: "xxx", // 学习Id,由init接口返回的,必传
   countHours: 1111, // 视频当前进度,必传,单位(秒)
}

end

视频播放结束调用

sdk.end({
   studyInfoId: "xxx", // 学习Id,由init接口返回的,必传
   countHours: 1111, // 视频当前进度,必传,单位(秒)
})

progress

视频播放进度同步,建议每隔 30 秒调用一次

sdk.progress({
   studyInfoId: "xxx", // 学习Id,由init接口返回的,必传
   countHours: 1111, // 视频当前进度,必传,单位(秒)
   sdkId: 'xxxx' // 唯一值,由init接口返回,必传
})

返回值:

{
    validateId: '验证id',
    ruleType: '验证类型,("FACE", "人脸"),("LIVINGBODY", "活体"),("SLIDER", "滑块验证"),("IDCARD", "身份证后四位校验"),("NUMBER", "数字验证")',
    isValidate: "是否要弹框验证(0否1是)",
    effectiveTm: '验证有效时间(秒)'
}

getVerifyInfo

获取验证详情,校验方式为数字的时候调用,验证码换一张也调用该接口

sdk.getVerifyInfo({
  validateId: "xxxx", // 验证id,由progress返回,必传
});

返回值:base64 格式的图片

getVerifyInfoRefresh

倒计时结束验证超时后,重新获取验证方式

sdk.getVerifyInfoRefresh({
  validateId: "验证id,由progress返回,必传",
});

返回值:

{
  validateId: '验证id',
  effectiveTm: '超时时间',
  ruleType: "验证类型,同上",
}

verify

校验验证,验证类型为滑块、身份证、数字的时候调用该接口校验,校验通过后即可继续播放。

sdk.verify({
  validateId: "验证id,由progress返回,必传",
  ruleValue: "验证值,滑块验证直接传TURE,必传",
});

getFaceVerifyInfo

获取验证详情,校验方式为滑人脸、活体验证的时候调用

sdk.getFaceVerifyInfo({
  validateId: "验证id,由progress返回,必传",
});

返回值:

{
  qrCode: "base64格式的小程序码图片";
}

verifyFace

查询人脸或活体小程序的验证结果,该接口需要轮训使用,建议 2 秒执行 1 次。

sdk.verifyFace({
    validateId: "验证id,由progress返回,必传",
    ruleType: "验证类型,("FACE", "人脸"),("LIVINGBODY", "活体"),必传"
})