Skip to content

BizMediaPlayer 媒体播放器 ​

原生 <audio> / <video> 统一封装的媒体播放器(零第三方依赖),type 区分音频 / 视频:

  • video:点击画面播放 / 暂停(含中央播放按钮)、自绘控件区(进度拖拽含缓冲进度、倍速、静音、全屏 Fullscreen API)、封面 poster、断点续播 initial-time;
  • audio standard:播放 / 暂停、进度拖拽(含缓冲进度)、时长显示、倍速、循环、音量控制;
  • audio compact:一行迷你控件(IM 语音消息形态,mode="compact",仅 audio 合法——video 传 compact 控制台警告并回落 standard);
  • 通用:倍速档位(0.5x~2x,可自定义 rates)、loop 循环、muted 静音、volume 音量、断点续播(timeupdate 事件由业务存取后经 initial-time 传入)、加载失败「失败提示 + 重试」兜底 UI。

适用于培训视频、监控回放、宣传位视频、客服语音留言回放、录音证据回放、IM 语音消息(与 BizChat 互补)——上传归 BizUploadVideo / BizUploadFile,播放归本组件。

文档示例音视频由 WebAudio / canvas + MediaRecorder 本地合成(免外网资源),实际使用传业务媒体地址即可。

视频基础用法 ​

点击画面或中央按钮播放/暂停;底部控件条支持进度拖拽(浅色为缓冲进度)、倍速、静音与全屏。

标准视频播放:封面、点击画面播放、进度拖拽(含缓冲)、倍速、静音、全屏。

视频封面与断点续播 ​

上次进度 0.0s(播放后经 timeupdate 实时写入 sessionStorage,当前 0.0s)——刷新页面后 initial-time 从上次位置续播。

poster 封面;initial-time 指定起始位置,timeupdate 实时记录进度(sessionStorage),重开从上次位置续播。

培训课程 ​

课程章节列表 + 播放器联动(key 重建实例),ended 联动提示。

静音循环(宣传位) ​

muted + loop + autoplay:首页宣传位 / 大屏背景视频形态(浏览器策略下静音才允许自动播放)。

muted + loop + autoplay 宣传位背景视频形态(浏览器策略下静音才允许自动播)。

监控回放网格 ​

固定高度小窗 + 精简控件(关闭倍速 / 静音 / 全屏),多路网格布局。

音频标准播放 ​

type="audio" 标准模式:播放/暂停、进度拖拽(含缓冲)、时长、倍速、循环、音量一应俱全。

type="audio" 标准模式:播放 / 暂停、进度拖拽(含缓冲)、时长、倍速、循环、音量。

IM 语音消息(compact) ​

播完自动连播下一条(ended 事件驱动)
mode="compact" 行内迷你控件,IM 会话左右气泡形态;ended 自动连播下一条。

倍速与循环控制 ​

当前倍速 1x loop 循环播放 + 倍速菜单降至 0.5x 慢速精听;rates 自定义档位(0.5 / 0.8 / 1 / 1.2 / 1.5)
loop 循环 + 自定义 rates 倍速档位组合(慢速精听场景),rate-change 联动展示。

事件日志 ​

00:00 / 00:00
操作播放器查看事件(timeupdate 已抽样展示,实际逐帧触发,适合断点续播存进度)…
全部事件外抛面板(play / pause / ended / error / loaded / timeupdate / rate-change)。

错误兜底与重试 ​

00:00 / 00:00
失败 0 次

演示地址为主线路(故意失效):失败时画面内出现「失败提示 + 重试」兜底 UI 并外抛 error 事件;业务侧可换源(改 src)后自动恢复加载。

加载失败时画面内出现「失败提示 + 重试」兜底 UI 并外抛 error;业务可换源(改 src)恢复。

受控编程播放 ​

证据音频 evidence_0930.wav 已存证00:00 / 00:00
时长(mediaRef.duration):0s进度:0.0s倍速:1x循环:关静音:关
Expose 驱动(play / pause / toggle / seek / setRate / toggleLoop / toggleMute / mediaRef)+ title / extra 插槽扩展。

Props ​

属性名类型默认值说明
type'audio' | 'video'—媒体类型(必传)
srcstring''媒体地址
posterstring''封面图(仅 video 生效)
titlestring'音频'标题(audio 标准模式标题行)
mode'standard' | 'compact''standard'展示形态;compact 仅 audio 合法,video 传 compact 警告并回落 standard
heightnumber | string16:9 自适应video 容器高度(px / %)
autoplaybooleanfalse自动播放(受浏览器策略限制,建议 video 配合 muted)
mutedbooleanfalse静音
loopbooleanfalse循环播放
preload'none' | 'metadata' | 'auto''metadata'预加载策略
volumenumber1默认音量 0~1
initial-timenumber0起始播放位置(秒,断点续播由业务经 timeupdate 存取后传入)
ratesnumber[][0.5, 0.75, 1, 1.25, 1.5, 2]倍速档位列表
show-ratebooleantrue显示倍速切换
show-loopbooleantrue显示循环按钮(audio 标准模式)
show-volumebooleantrue显示音量控制(audio 标准模式)
show-mutebooleantrue显示静音按钮(video 控件区)
show-fullscreenbooleantrue显示全屏按钮(video 控件区)

Events ​

事件名参数说明
play()开始播放
pause()暂停
ended()播放结束(连播场景切下一条)
error(event: Event)加载 / 解码失败(兜底 UI 同步出现)
loaded(duration: number)元数据就绪(拿到时长)
timeupdate(currentTime: number)播放进度(断点续播由业务存取)
rate-change(rate: number)倍速切换

Slots ​

插槽名说明
title标题区(audio 标准模式)
extra控件区右侧扩展(下载等操作按钮,audio 标准模式)

Expose ​

名称类型说明
play / pause / toggle() => void播放控制
seek(seconds: number) => void跳转到指定秒
setRate(rate: number) => void设置倍速(外抛 rate-change)
toggleLoop() => void循环开关切换
toggleMute() => void静音开关切换
toggleFullscreen() => void全屏切换(Fullscreen API,video)
retry() => void重试加载(重新挂载媒体元素)
mediaRefRef<HTMLMediaElement | null>原生媒体元素引用(audio / video),可接 WebAudio、hls.js / flv.js 自行扩展

TIP

autoplay 受浏览器自动播放策略限制(需用户先交互,静音形态最稳);hls / flv 直播流场景经 mediaRef 接 hls.js / flv.js 自行扩展(库不强制依赖);需要频谱可视化等高级能力时经 mediaRef 接 WebAudio。