简介
阿里云Web播放器SDK(Aliplayer SDK)是阿里视频云端到云到端服务的重要一环,结合对象存储(Object Storage Service,简称OSS) 实现深度融合视频云业务,支持视音频的点播和直播等基础播放功能
本文以 Vue 组件化的角度进行全流程解析、并抽离公共业务逻辑,从而实现可维护、高复用的视音频播放组件
引入
官方实践直接在页面引入对应的JS、CSS文件,通过暴露全局 window.Aliplayer
属性自定义实例化对象,传送门 => 集成文档_Web播放器_播放器SDK_视频点播-阿里云
1 | <link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css" /> |
当我们要对其封装成一个独立的组件时,可以实现一个 dynamicLoadScript
函数去解耦全局引用的问题,调用如下 ⬇️
1 | import { dynamicLoadScript } from '@/utils/' |
通过 dynamicLoadScript
,和 postcss
去处理文件引用,Vue hooks 提供组件挂载与销毁的回调,initAliplayer
方法进行初始化
1 | // html => <div id="J_prismPlayer" /> |
props.config
配置播放器的基础属性,data.baseConfig
对外抛出自定义播放器入口(mixins),如 Aliplayer 音频播放需单独传入 { format: 'mp3', mediaType: 'audio' }
进行区分,传送门 => 属性和接口说明_Web播放器_播放器SDK_视频点播-阿里云
业务逻辑: this.error
交接全局异常处理的句柄,this.initPlayerEvent
初始化容器事件
1 | import { isObject, throttle } from '@/utils' |
timeupdate
高频事件通过节流函数 throttle
函数限制成1000ms 触发一次,Aliplayer 异常信息从 msg.paramData
中获取
业务逻辑: this.updateLearnerTime
记录当前播放时长,触发事件为视音频暂停、拖动、结束
1 | export default { |
完整代码
/mixins/media.js
,单独处理成 mixins 混入公用业务逻辑
1 | import { dynamicLoadScript, isObject, throttle } from '@/utils/util' |
视音频组件封装,以视频为例,常见业务场景为视频初始化后进行续播
1 | import media from '@/mixins/media' |
已知的一个问题,当视频地址切换的时候,Aliplayer 会重新调用 pause
事件,虽然可以通过 this.player.getStatus()
获取播放器状态,但是设置 toggling
属性更好规避 Aliplayer 带有副作用的事件回调
常见问题
视频播放容器无法被遮挡、自定义遮罩层级显示错误
通过切换容器 display 属性进行图片占位,vue可采用
v-show
指令自定义播放器样式
以播放按钮居中为例,Xpath ClassName: prism-big-play-btn
欢迎补充👏