更新:阿里云视频播放器
This commit is contained in:
210
types/video.d.ts
vendored
Normal file
210
types/video.d.ts
vendored
Normal file
@@ -0,0 +1,210 @@
|
||||
// types/video.d.ts
|
||||
/**
|
||||
* 视频相关类型定义
|
||||
* 完全基于原项目 medicine_app 的数据结构
|
||||
*/
|
||||
|
||||
import type { IApiResponse } from './book'
|
||||
|
||||
/**
|
||||
* 视频基本信息
|
||||
* 对应原项目中的视频数据结构
|
||||
*/
|
||||
export interface IVideoInfo {
|
||||
id: number // 视频 ID
|
||||
title: string // 视频标题
|
||||
type: '1' | '2' | string // 类型: 1-视频 2-音频
|
||||
video?: string // 阿里云视频 ID(原始)
|
||||
videoId?: string // 阿里云视频 ID(处理后,移除等号)
|
||||
videoUrl?: string // 视频 URL(普通视频)
|
||||
m3u8Url?: string | null // M3U8 地址(标准加密)
|
||||
playAuth?: string // 播放凭证
|
||||
sort?: number // 排序
|
||||
chapterId?: number // 章节 ID
|
||||
courseId?: number // 课程 ID
|
||||
catalogueId?: number // 目录 ID
|
||||
userCourseVideoPositionEntity?: {
|
||||
position: number // 服务器记录的播放位置(秒)
|
||||
}
|
||||
[key: string]: any // 允许其他字段
|
||||
}
|
||||
|
||||
/**
|
||||
* 视频数据(扩展)
|
||||
* 包含播放时间等额外信息
|
||||
*/
|
||||
export interface IVideoData extends IVideoInfo {
|
||||
firstTime?: number // 初始播放时间(秒)
|
||||
time?: number // 当前播放时间(秒)
|
||||
}
|
||||
|
||||
/**
|
||||
* 本地存储的视频列表项
|
||||
* 存储在 localStorage 的 videoOssList 中
|
||||
*/
|
||||
export interface IVideoStorageItem {
|
||||
id: number // 视频 ID
|
||||
time: number // 播放时间(秒)
|
||||
[key: string]: any // 其他视频信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查视频请求参数
|
||||
* 对应 sociology/course/checkVideo 接口
|
||||
*/
|
||||
export interface ICheckVideoRequest {
|
||||
id?: number // 视频 ID
|
||||
video?: string // 视频标识
|
||||
courseId?: number // 课程 ID
|
||||
catalogueId?: number // 目录 ID
|
||||
chapterId?: number // 章节 ID
|
||||
[key: string]: any // 允许其他参数
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查视频响应
|
||||
* 对应 sociology/course/checkVideo 接口返回
|
||||
*/
|
||||
export interface ICheckVideoResponse extends IApiResponse {
|
||||
video: IVideoInfo // 视频信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存播放位置请求参数
|
||||
* 对应 sociology/course/saveCoursePosition 接口
|
||||
*/
|
||||
export interface ISaveCoursePositionRequest {
|
||||
videoId: number // 视频 ID
|
||||
position: number // 播放位置(秒)
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存播放位置响应
|
||||
* 对应 sociology/course/saveCoursePosition 接口返回
|
||||
*/
|
||||
export interface ISaveCoursePositionResponse extends IApiResponse {
|
||||
// 继承基础响应结构
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录错误视频请求参数
|
||||
* 对应 medical/course/addErrorCourse 接口
|
||||
* 用于记录 iOS 不支持的视频
|
||||
*/
|
||||
export interface IAddErrorCourseRequest {
|
||||
chapterId: number // 章节 ID
|
||||
videoId: number // 视频 ID
|
||||
sort: number // 排序
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录错误视频响应
|
||||
* 对应 medical/course/addErrorCourse 接口返回
|
||||
*/
|
||||
export interface IAddErrorCourseResponse extends IApiResponse {
|
||||
// 继承基础响应结构
|
||||
}
|
||||
|
||||
/**
|
||||
* 章节详情
|
||||
* 用于视频列表组件
|
||||
*/
|
||||
export interface IChapterDetail {
|
||||
id: number // 章节 ID
|
||||
title: string // 章节标题
|
||||
imgUrl?: string // 章节图片
|
||||
content?: string // 章节内容
|
||||
questions?: string // 思考题
|
||||
[key: string]: any // 其他字段
|
||||
}
|
||||
|
||||
/**
|
||||
* 平台类型
|
||||
*/
|
||||
export type PlatformType = 'ios' | 'android' | 'h5' | null
|
||||
|
||||
/**
|
||||
* 屏幕方向类型
|
||||
*/
|
||||
export type ScreenOrientationType = 'portrait-primary' | 'landscape-primary'
|
||||
|
||||
/**
|
||||
* 播放器配置选项
|
||||
* 对应阿里云播放器配置
|
||||
*/
|
||||
export interface IPlayerOptions {
|
||||
id: string // 容器 ID
|
||||
width: string // 宽度
|
||||
height: string // 高度
|
||||
autoplay?: boolean // 自动播放
|
||||
playsinline?: boolean // 内联播放
|
||||
controlBarVisibility?: 'hover' | 'click' | 'always' // 控制栏显示方式
|
||||
useH5Prism?: boolean // 使用 H5 播放器
|
||||
qualitySort?: 'asc' | 'desc' // 清晰度排序
|
||||
isLive?: boolean // 是否直播
|
||||
rePlay?: boolean // 是否重播
|
||||
cover?: string // 封面图
|
||||
|
||||
// 私有加密视频配置
|
||||
vid?: string // 视频 ID
|
||||
playauth?: string // 播放凭证
|
||||
encryptType?: number // 加密类型: 1-私有加密
|
||||
playConfig?: {
|
||||
EncryptType: string // 加密类型名称
|
||||
}
|
||||
|
||||
// 标准加密/普通视频配置
|
||||
source?: string // 视频地址
|
||||
|
||||
// 组件配置
|
||||
components?: Array<{
|
||||
name: string
|
||||
type: any
|
||||
args?: any[]
|
||||
}>
|
||||
|
||||
// 皮肤布局
|
||||
skinLayout?: Array<{
|
||||
name: string
|
||||
align?: string
|
||||
x?: number
|
||||
y?: number
|
||||
children?: Array<{
|
||||
name: string
|
||||
align?: string
|
||||
x?: number
|
||||
y?: number
|
||||
}>
|
||||
}>
|
||||
}
|
||||
|
||||
/**
|
||||
* 全屏状态变化数据
|
||||
*/
|
||||
export interface IScreenChangeData {
|
||||
status: boolean // 全屏状态
|
||||
primary: ScreenOrientationType // 屏幕方向
|
||||
}
|
||||
|
||||
/**
|
||||
* 播放时间记录数据
|
||||
*/
|
||||
export interface IRecordTimeData {
|
||||
time: number // 播放时间(秒)
|
||||
status?: string // 播放状态
|
||||
}
|
||||
|
||||
/**
|
||||
* 错误提示数据
|
||||
*/
|
||||
export interface IOpenShowData {
|
||||
msg?: string // 错误消息
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
export interface IInitData {
|
||||
currentVideo: IVideoInfo // 当前视频
|
||||
currentVideoList?: IVideoInfo[] // 视频列表
|
||||
}
|
||||
Reference in New Issue
Block a user