vue-liveplayer-wrapper
Version:
Vue 3 wrapper for @liveqing/liveplayer-v3 with recording and playback control features
282 lines (225 loc) • 7.04 kB
Markdown
# LivePlayer Wrapper
一个基于 Vue 3 的视频播放器包装组件,集成了 @liveqing/liveplayer-v3,提供视频播放、录制、播放控制等功能。
## 功能特性
- 🎥 支持多种视频格式(HLS、FLV、MP4等)
- 📹 视频录制功能(支持最长5分钟录制)
- 🎮 播放控制(播放/暂停、音量、全屏等)
- 🔄 播放开关功能(可关闭/恢复视频播放)
- 📸 截图功能
- 🎛️ 自定义工具栏按钮
- 📱 响应式设计
- 🎨 丰富的自定义选项
## 安装
```bash
npm install liveplayer-wrapper
```
## 使用方法
### 1. 全局注册
```javascript
import { createApp } from 'vue'
import LivePlayerWrapper from 'liveplayer-wrapper'
import 'liveplayer-wrapper/dist/style.css'
const app = createApp(App)
app.use(LivePlayerWrapper)
app.mount('#app')
```
### 2. 局部使用
```vue
<template>
<div>
<LivePlayerWrapper
:video-url="videoUrl"
:video-title="videoTitle"
:autoplay="true"
:controls="true"
:live="true"
@ready="onPlayerReady"
@recordingStart="onRecordingStart"
@recordingStop="onRecordingStop"
@recordingError="onRecordingError"
/>
</div>
</template>
<script setup>
import { LivePlayerWrapper } from 'liveplayer-wrapper'
import 'liveplayer-wrapper/dist/style.css'
const videoUrl = 'https://example.com/video.m3u8'
const videoTitle = '示例视频'
const onPlayerReady = (player) => {
console.log('播放器已就绪', player)
}
const onRecordingStart = () => {
console.log('录制开始')
}
const onRecordingStop = () => {
console.log('录制结束')
}
const onRecordingError = (error) => {
console.error('录制错误', error)
}
</script>
```
## Props 配置
### 视频相关属性
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| videoUrl | String | '' | 视频流地址 |
| videoTitle | String | '' | 视频右上角显示的标题 |
| poster | String | '' | 视频封面图片 |
| alt | String | '无信号' | 无视频时的替代文字 |
### 播放控制属性
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| autoplay | Boolean | true | 自动播放 |
| controls | Boolean | true | 显示控制栏 |
| loop | Boolean | false | 循环播放 |
| live | Boolean | true | 是否为直播流(隐藏进度条) |
| muted | Boolean | true | 静音 |
### 显示设置
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| aspect | String | '16:9' | 宽高比(fullscreen为全屏) |
| fluent | Boolean | true | 流畅模式 |
| stretch | Boolean | false | 是否拉伸 |
| hideBigPlayButton | Boolean | false | 隐藏大播放按钮 |
| waterMark | String | '' | 水印文字 |
### 按钮显示控制
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| showCustomButton | Boolean | true | 显示自定义按钮 |
| hideSnapshotButton | Boolean | false | 隐藏快照按钮 |
| hideFullscreenButton | Boolean | false | 隐藏全屏按钮 |
| hideFluent | Boolean | false | 隐藏流畅按钮 |
| hideStretch | Boolean | true | 隐藏拉伸按钮 |
### HLS相关设置
| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| resolution | String | '' | 清晰度配置(yh,fhd,hd,sd) |
| resolutiondefault | String | 'hd' | 默认清晰度 |
| playbackRates | Array | [0.5, 1, 2, 3] | 倍速列表 |
| playbackRate | Number | 1 | 默认倍速 |
## Events 事件
| 事件名 | 参数 | 说明 |
|--------|------|------|
| ready | player | 播放器就绪 |
| message | {type, message} | m3u8加载失败 |
| error | Error | 播放器出错 |
| ended | - | 播放结束 |
| timeupdate | time | 进度更新 |
| pause | time | 暂停 |
| play | time | 播放 |
| fullscreen | isFullscreen | 全屏状态改变 |
| snapOutside | data | 外部快照 |
| snapInside | data | 内部快照 |
| customButtons | buttonName | 自定义按钮点击 |
| canplay | duration | 可播放 |
| volumechange | volume, muted | 音量改变 |
| recordingStart | - | 录制开始 |
| recordingStop | - | 录制停止 |
| recordingError | error | 录制错误 |
## 方法
通过 ref 可以调用以下方法:
### 播放控制
- `play()` - 播放
- `pause()` - 暂停
- `togglePlay()` - 切换播放/暂停
- `paused()` - 获取暂停状态
### 录制功能
- `startRecording()` - 开始录制
- `stopRecording()` - 停止录制
- `toggleRecording()` - 切换录制状态
- `isRecording()` - 获取录制状态
- `getRecordingTime()` - 获取录制时长
- `forceStopRecording()` - 强制停止录制
### 播放开关功能
- `togglePlayback()` - 切换播放开关
- `isPlaying()` - 获取播放开关状态
### 其他功能
- `snap()` - 截图
- `getCurrentTime()` - 获取当前时间
- `setCurrentTime(time)` - 设置当前时间
- `getVolume()` - 获取音量
- `setVolume(volume)` - 设置音量
- `toggleMute()` - 切换静音
- `toggleFullscreen()` - 切换全屏
## 示例
### 基本使用
```vue
<template>
<div class="video-container">
<LivePlayerWrapper
ref="playerRef"
:video-url="videoUrl"
:video-title="'直播视频'"
:autoplay="true"
:controls="true"
:live="true"
@ready="onReady"
@recordingStart="onRecordingStart"
@recordingStop="onRecordingStop"
/>
<div class="controls">
<button @click="startRecording">开始录制</button>
<button @click="stopRecording">停止录制</button>
<button @click="togglePlayback">切换播放</button>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { LivePlayerWrapper } from 'liveplayer-wrapper'
const playerRef = ref()
const videoUrl = 'https://example.com/live.m3u8'
const onReady = (player) => {
console.log('播放器就绪')
}
const startRecording = () => {
playerRef.value?.startRecording()
}
const stopRecording = () => {
playerRef.value?.stopRecording()
}
const togglePlayback = () => {
playerRef.value?.togglePlayback()
}
</script>
```
### 高级配置
```vue
<template>
<LivePlayerWrapper
:video-url="videoUrl"
:video-title="'高清直播'"
:aspect="'16:9'"
:fluent="true"
:stretch="false"
:timeout="30"
:resolution="'fhd,hd,sd'"
:resolutiondefault="'hd'"
:playback-rates="[0.5, 1, 1.5, 2]"
:custom-buttons="'录制:vjs-icon-record,开关:vjs-icon-switch'"
:water-mark="'LivePlayer'"
@message="handleMessage"
@error="handleError"
/>
</template>
```
## 注意事项
1. **录制功能**:录制功能需要浏览器支持 MediaRecorder API
2. **视频格式**:支持 HLS、FLV、MP4 等主流格式
3. **跨域问题**:如果视频源有跨域限制,需要配置相应的 CORS 策略
4. **录制时长**:单次录制最长支持 5 分钟
5. **浏览器兼容性**:建议使用现代浏览器以获得最佳体验
## 开发
```bash
# 安装依赖
npm install
# 开发模式
npm run dev
# 构建库
npm run build:lib
# 类型检查
npm run type-check
```
## 许可证
MIT License