# vue-super-player
[](https://www.npmjs.com/package/vue-super-player)
[](https://www.npmjs.com/package/vue-super-player)
[](./LICENSE)
**多内核视频播放器组件(Vue 3 + TypeScript)**:原生 / hls.js / mpegts.js / Aliplayer 四个内核可插拔,按播放地址自动检测内核,统一 props / 事件 / 方法。
> Vue 2 时代的 [1.x 版本](https://github.com/Jabo2017/vue-super-player/tree/1.x)(`npm i vue-super-player@1`)已停止维护。v2 是全新重写。
## 在线演示

https://jabo2017.github.io/vue-super-player/
## 为什么是多内核
没有单一内核能同时优雅覆盖所有场景:
| 场景 | 内核 | 说明 |
|---|---|---|
| mp4 / webm 点播 | `native` | 原生 video,零依赖 |
| m3u8 点播/直播 | `hls` | hls.js(Safari 自动回退原生 HLS) |
| HTTP-FLV 直播 | `flv` | mpegts.js(需 MSE) |
| 阿里云 vid+playauth / 私有加密流 | `ali` | 复用 [vue-aliplay-player](https://github.com/Jabo2017/vue-aliplay-player)(可选安装) |
hls.js / mpegts.js 均为 **CDN 懒加载**:用到哪个内核才加载哪个脚本,主包 gzip 仅 ~4KB。
> **关于 FLV 内核的选型**:底层用的是 [mpegts.js](https://github.com/xqq/mpegts.js) 而不是更常见的 flv.js。
> 两者同作者(xqq),API 基本一致,但 **flv.js 最后发布于 2021-09(已停止维护)**,mpegts.js 是其官方继任者、至今仍在发版。
> 本库早期版本用的 flv.js,v2.1 起切换为 mpegts.js;`flvJsUrl` prop 与 `FLV_JS_URL` / `ensureFlvJs` 导出保留为兼容别名。
## 安装
```bash
npm install vue-super-player
```
`vue`(^3.2)为 peer dependency;使用 `ali` 内核需另装 `vue-aliplay-player`(可选 peer)。
组件自带样式(`.vsp-root` 容器)在引入时自动注入,**无需额外 `import` CSS 文件**。
## 快速上手
```vue
console.error(e)"
/>
```
手动指定内核(如阿里云加密流):
```vue
```
自定义内核(实现 `Kernel` 接口注入即可):
```ts
const myKernel: Kernel = {
name: 'my-kernel',
canPlay: (src) => src.endsWith('.ext'),
create: (options) => myPlayerInstance,
}
//
```
## Props
| Prop | 类型 | 默认 | 说明 |
|---|---|---|---|
| `source` | `string` | 必填 | 播放地址,变化时自动重建 |
| `kernel` | `string` | `'auto'` | `'auto'` 按扩展名检测;或 `native` / `hls` / `flv` / `ali` / 自定义内核名 |
| `autoplay` | `boolean` | `false` | 自动播放(受浏览器策略限制,常配合 `muted`) |
| `muted` | `boolean` | `false` | 静音 |
| `loop` | `boolean` | `false` | 循环 |
| `poster` | `string` | `''` | 封面 |
| `isLive` | `boolean` | `false` | 直播模式(flv/ali 内核行为不同) |
| `playsinline` | `boolean` | `true` | 移动端内联播放 |
| `kernels` | `Record` | `{}` | 注入自定义内核 |
| `hlsJsUrl` / `mpegtsJsUrl` | `string` | jsdelivr | hls.js / mpegts.js CDN 地址,可换自托管 |
| `aliSdkUrl` / `aliSdkCssUrl` / `aliLicense` | — | 2.27.1 | Aliplayer SDK 与 License 配置,见 [vue-aliplay-player README](https://github.com/Jabo2017/vue-aliplay-player#license-说明) |
## 事件
`ready` `play` `playing` `pause` `ended` `waiting` `error(err?)` `timeupdate(currentTime, duration)` `kernelchange(name)`
## 暴露方法
`play` `pause` `replay` `seek(t)` `getCurrentTime` `getDuration` `getVolume` `setVolume(v)` `setSpeed(s)` `getStatus` `dispose`
## 本地开发
```bash
pnpm install
pnpm dev # demo 页
pnpm typecheck # vue-tsc
pnpm test # vitest
pnpm build # 库产物(ES + UMD + d.ts)
pnpm build:demo # Pages 演示页
```
## License
[MIT](./LICENSE)