文章最后更新时间:2024年05月30日
MuiPlayer简介
MuiPlayer 是一款 HTML5 视频播放插件,其默认配置了精美可操作的的播放控件,涉及了常用的播放场景,例如全屏播放、播放快进、循环播放、音量调节、视频解码等功能。播放器的设计兼容了在 PC、Mobile 端运行,提供了 “移动端” 以及 “PC端” 两类扩展插件,因此你也可应用于在 Android、Ios 的 Webview 中使用。如果你的应用是运行在 HTML5 plus (opens new window)环境中,那么你使用该播放插件将会默认得到更多原生 api 的支持,例如播放控制设备音量、全屏时横竖屏播放、沉浸式播放等。你也可以使用原生与网页交互的方式来控制视频以及设备功能,Muiplayer 提供了所有事件触发的回调函数,你需要在这里作一些自己的控制。Muiplayer 致力于提供完备的 HTML5 视频开发解决方案,欢迎您引用该播放器作为网站的视媒体播放,在此之前您表示同意接受一下条款:此开源项目所有代码基于 GPL 许可协议,您默认遵守许可协议中约定的义务。您默认接受我们以及您所使用 MuiPlayer 所在的业务的相关内容放置在本官网展示。
MuiPlayer特性:
多格式支持
支持 mp4、M3U8、flv 等多种媒体格式播放,解决大部分兼容问题,同时适应在PC、手机端播放。
丰富的可配置API
MuiPlayer 具有丰富的参数可以自定义播放器实例,通过轻松的配置即可完成自定义场景的视频播放。
简约的设计风格
播放器设计风格轻松而简约,可自定义配置播放器的主题样式。在PC、手机端独立还拥有一套美观的功能控件设计。
MuiPlayer-Demo
Demo HTML
<!-- 引入基础样式文件 mui-player.min.CSS --> <link rel="stylesheet" type="text/CSS" href="css/mui-player.min.css"/> <!-- 引入基础脚本 mui-player.min.js --><script type="text/JavaScript" src="js/mui-player.min.js"></script> <!-- 指定播放器容器 --> <div id="mui-player"></div>
Demo JS
// 初始化 MuiPlayer 插件,MuiPlayer 方法传递一个对象,该对象包括所有插件的配置 var mp = new MuiPlayer({ container:'#mui-player', title:'标题', src:'./static/media/media.mp4', })
MuiPlayer参数
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
container | String/Element | required | 指定播放器容器 |
src | String | required | 视频播放的资源地址 |
title | String | 标题 | |
autoplay | Boolean | false | 是否自动播放,关于 autoplay 属性设置问题请参考 |
preload | String | auto | 视频是否预加载,可选值 none | metadata | auto。如果 autoplay=true,则忽略该属性。 |
loop | Boolean | false | 是否循环播放 |
muted | Boolean | false | 是否静音播放 |
width | String/Number | auto | 初始化播放器宽度 |
height | String/Number | 225px | 初始化播放器高度 |
lang | String | navigator.language | 播放器界面语言,可选 en | zh-cn | zh-tw |
volume | Number | 1 | 初始化设置视频音量,取值 0 - 1 |
autoFit | Boolean | true | 播放器容器是否自适应视频高度 |
poster | String | 视频封面的资源地址 | |
live | Boolean | false | 是否开启直播模式,直播模式默认菜单配置不允许控制播放速度以及循环播放 |
initFullFixed | Boolean | false | 初始化是否网页全屏播放 |
autoOrientaion | Boolean | true | 全屏时否自动切换方向,在 html5+ 中全屏时会自动旋转屏幕,部分手机浏览器全屏时自动旋转方向。 Tag:ios 全屏切换时稍有差异,全屏模式时调用系统全屏播放。 |
dragSpotShape | String | circular | 设置进度条拖动点的形状,可选 circula | square |
objectFit | String | contain | 视频大小与 video 容器的表现形式。可选 contain | cover |
closeControlsTimer | Number | 3500 | 设置播放器定时隐藏控件的时间,可配合 toggleControls 函数接口使用;新增 |
# | |||
videoAttribute | Array | [] | 此属性为添加更多 H5 Video 标签的属性,参数为接受每个 key value 键值对象,注意如果该数组中属性值在已有设置中存在,那么会覆盖。 如需配置声明启用同层播放,那么配置如下:videoAttribute:[ {attrKey:'webkit-playsinline',attrValue:'webkit-playsinline'}, {attrKey:'playsinline',attrValue:'playsinline'}, {attrKey:'x5-video-player-type',attrValue:'h5-page'}, ] |
# | |||
subtitle | Object | {} | 添加视频字幕。目前只支持 webvtt 字幕格式,请参考视频字幕 |
parse | Object | {} | 添加视频解码插件。请参考:解码播放 |
plugins | Object | {} | 添加播放扩展插件,请参考:移动端扩展 PC端扩展 |
自定义设置播放器控件,样式:
var mp = new MuiPlayer({ container:'#mui-player', src:'../media/media.mp4', themeColor:'#55c612', // 自定义主题颜色 ... });
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
themeColor | String | #1e98d4 | 主题颜色 |
showMiniProgress | Boolean | true | 是否显示底部迷你进度条,当视图操纵控件隐藏时显示。当配置项 live=true 时无效。 |
pageHead | Boolean | true | 非全屏模式下,是否显示播放器头部操作控件 |
# custom | Object | 自定义播放器控件。请参考: 自定义播放器控件 | |
custom.headControls | Array | 自定义播放器头部按钮组,参数接受一个配置数组,最大可配置对象为5个,参考 | |
custom.footerControls | Array | 自定义播放器底部控件组,参数接受一个配置数组,最大可配置对象为5个,参考 | |
custom.rightSidebar | 自定义播放器右侧弹出栏,参数接受一个配置数组,最大可配置对象为5个,参考 |
MuiPlayer控制
MuiPlayer 对外提供了部分接口,该接口实现了播放器内置的函数,示例:
// 初始化播放器配置 var mp = new MuiPlayer(option); // 显示一个消息提示mp.showToast('提示...');
方法名 | 传参 | 必填 | 说明 |
---|---|---|---|
toggleControls | true | false | - | 操作播放器控件显示的状态,参数传递一个布尔类型的参数控制隐藏或显示; 默认播放控件会根据 closeControlsTimer 定时隐藏,可应用高级函数 closeTimer | openTimer 关闭或者打开定时器,示例:mp.toggleControls(true).closeTimer(); mp.toggleControls(false).openTimer(); 新增 |
showToast | String | Object | - | 弹出消息提示,参考接收一个字符或串或者对象 Ojbect = { message='', duration=1500, style={} } duration 默认等于1500,单位毫秒 |
video | - | - | 返回当前实例的原生video元素 |
reloadUrl | Video src | - | 指定一个视频地址重新加载资源,不传参则默认重新加载 |
showRightSidebar | Slot name | 弹出自定义右侧栏窗口,参考 | |
showLoading | - | - | 显示视频缓冲 loading |
hideLoading | - | - | 隐藏视频缓冲 loading |
openFullScreen | - | 开启全屏播放 | |
closeFullScreen | - | 关闭全屏播放 | |
getControls | - | 获取所有播放器控件,返回一个数组 | |
destroy | - | - | 销毁视频播放器 |
sendError | event | 主动发送错误报告 |
MuiPlayer监听
MuiPlayer 管理了部分的播放事件,可通过添加对指定事件的监听来处理适当需要的动作。示例:
var mp = new MuiPlayer(option); // 监听播放器已创建完成 mp.on('ready',function(event) { console.log(event); }); //MuiPlayer 支持所有原生 Video 事件,可以通过 mp.video() 获取媒体实例来添加原生事件。 mp.on('ready', function(event) { let v = mp.video(); v.addEventListener("play", function(e) { console.log('play now...'); }); v.addEventListener("pause", function(e) { console.log('pause now...'); }); });
事件名 | 类型 | 函数返回 | 说明 |
---|---|---|---|
back | EventHandle | 返回按钮点击时触发, Tag:仅在非全屏模式下触发 | |
duration-change | EventHandle | {duration} | 当视频时长已更改时触发,只有当时长大于1时发生,单位为秒(s) |
seek-progress | EventHandle | {percentage} | 当用户在视频寻址时触发 |
fullscreen-change | EventHandle | {direction,fullscreen} | 当视频进入或者退出全屏时触发。初始播放器器时默认触发一次该事件 direction:表示当前播放的方向,在手机端适用 fullscreen:表示当前在 pc 环境是否为全屏状态播放,只有在 pc 环境返回该属性 |
controls-toggle | EventHandle | {show} | controls 控件状态变化时触发 |
error | EventHandle | native event | 播放发生错误 |
destroy | EventHandle | 视频销毁事件 | |
ready | EventHandle | 播放器已创建完成 |
PC 端扩展
mui-player-desktop-plugin.js 是播放器扩展插件,该扩展插件增强了播放器在pc端应用场景的使用,提供了包括鼠标以及键盘对播放器的控制能力,设置组,音量调节,视频缩略图配置等功能组件。
在页面引入 mui-player-desktop-plugin.js,插件需要在初始化播放器之前加载
<!-- 使用 script 标签引入 --> <script type="text/JavaScript" src="js/mui-player-desktop-plugin.min.js"></script>
在主配置项 plugins 中传入
var mp = new MuiPlayer({ container:'#mui-player', src:'../media/media.mp4', ... plugins:[ new MuiPlayerDesktopPlugin({ customSetting, // 设置组配置 contextmenu, // 右键菜单组配置 thumbnails, // 缩略图配置 }) ] });
配置选项
扩展插件可配置API
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
customSetting | Array | {functions:'循环播放', name:'loopPlay'} {functions:'播放速度', name:'playbackRate'} | 自定义设置组,参见 |
customSetting.functions | String | 组名称 | |
customSetting.name | String | 组标识名。如该名称与默认配置组中某个名称相同,那么将重写默认配置组菜单 | |
customSetting.model | String | select | 组选择模式,可选 switch | select |
customSetting.selected | Boolean | false | 默认是否选中当前选择项 |
customSetting.show | Boolean | true | 是否显示 |
customSetting.zIndex | Number | 0 | 组显示层级,zIndex越大该组排列顺序越靠前 |
customSetting.childConfig | Array | [] | 子设置组配置,配置参数同父级设置组参数 |
customSetting.onToggle | Function | callback( data, selected, back) | 组选项点击后的回调函数,接收三个参数可供处理动作: 1、data:当前选择配置项 2、selected: 函数,必须手动调用该函数来选择项目 3、back: 函数,调用该函数触发返回父级设置组,参数可接收一个毫秒单位的数字表示延迟返回 |
# | |||
contextmenu | Array | {name:'shortcuts', context:'快捷键'}, {name:'muiplayer', context:'MuiPlayer'} | 自定义右键菜单,参考 |
contextmenu.name | String | 菜单标识名,如该名称与右击菜单组中某个名称相同,那么将重写默认菜单组 | |
contextmenu.context | String | 右击菜单名称 | |
contextmenu.zIndex | Number | 组显示层级,zIndex越大该组排列顺序越靠前 | |
contextmenu.show | Boolean | 是否显示 | |
contextmenu.click | Function | callback(close) | 点击后回调函数。【close:函数,主动调用函数可关闭右击菜单】 |
# | |||
thumbnails | Object | {} | 缩略图配置,参见 |
# | |||
fullScaling | Number | 1.2 | 全屏时控件大小缩放比,取值 >= 1 |
leaveHiddenControls | Boolean | false | 鼠标指针移出播放器时是否隐藏控件 |
您可以自定义配置设置组以此来满足需要添加的菜单,设置菜单支持两种选择模式,分别是开关模式(switch)和选择模式(select)。
播放器默认设置组包括循环播放以及播放速度的切换,在直播模式(live)下不支持。通过配置 customSetting Option 可自定义设置组,配置举例说明:
customSetting.js
export default [ { functions:'清晰度', model:'select', show:true, zIndex:0, childConfig:[ {functions:'蓝光1080P'}, {functions:'超清'}, {functions:'高清',selected:true}, {functions:'标清'}, ], onToggle:function(data,selected,back) { // Action } },]
自定义右键菜单
new MuiPlayerDesktopPlugin({ contextmenu:[ { name:'copyPlayUrl', context:'复制视频链接', zIndex:0, show:true, click:function(close) { // Action... } }, ],})
PC 端扩展【专业版】
PC 端扩展组件,该扩展新增了播放器在桌面端更多的功能性支持,包含弹幕输入、广告悬浮窗、视频水印、小窗口播放、进度位提示点和视频截图等。插件使用原生 Js 的编写,因此在编写功能接口在代码上并未产生冗余从而导致体积包的增大。扩展插件通常是保持最新的版本,在使用该插件之前请更新到 mui-player 主文件到最新版本。
在页面引入 mui-player-desktop-plugin.js,插件需要在初始化播放器之前加载:
<!-- 使用标签引入 “专业版” 扩展组件 --> <script type="text/javascript" src="js/mui-player-desktop-plugin.min.js"></script>
在主配置项 plugins 中传入:
var mp = new MuiPlayer({ container:'#mui-player', src:'../media/media.mp4', ... plugins:[ new MuiPlayerDesktopPlugin({ key: '配置您插件密文', ... }) ] });
#配置选项 Plus
示例创建一个弹幕输入组件:
new MuiPlayerDesktopPlugin({ key: '配置您插件密文', danmakuComponent:{ open: true, // 是否开启弹幕组件 growSize: 0.65, // 组件占据容器的宽度比例,取值范围:0 - 1 buttonText: '发送', onSend(text, cleanText) { // 监听文本发送内容的函数回调 // axtion }, } })
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
danmakuComponent | Object | {} | 创建一个弹幕输入组件 |
danmakuComponent.open | Object | true | 是否开启弹幕组件 |
danmakuComponent.growSize | Number | 0.65 | 组件占据容器的宽度比例,取值范围:0 - 1 |
danmakuComponent.position | String | left | 组件排列的位置,可取值 left | right | center |
danmakuComponent.buttonText | String | - | 按钮显示的文字 |
danmakuComponent.placeholder | String | - | 弹幕文本录入框显示的占位符 |
danmakuComponent.onSend | Function | (text,cleanText) | 监听文本发送内容的函数回调,方法接收两个回调参数: text:String - 表示文本内容 cleanText:Function - 调用函数清空文本输入框内容 |
danmakuComponent.loadIntercept | Function | (Element) | 在组件加载之前进行拦截,通常这里是做对组件重写的动作,回调函数 Element 返回该控件元素 |
danmakuComponent.style | Object | {} | 组件的附加样式 |
# | |||
prompt | Object | 进度条指示点 | |
prompt.dotColor | String | #F8F8FF | 颜色 |
prompt.hoverShow | Boolean | false | 是否只在鼠标悬停时显示 |
prompt.items | Array | {} | 进度条指示点配置项,数组中元素传入配置对象包括: time: < Number > 时间节点/单位秒content: < String | Element > 鼠标悬浮提示内容style:< Object > 自定义项样式 |
# | |||
seekLine | Object | true | 显示寻址线 |
# |
移动端扩展【专业版】
MuiPlayer 提供了一套样式统一,可观且响应式的移动端皮肤插件,该插件增强了播放器在移动端的可操纵能力,包含可触屏控制进度、音量,锁定播放,主菜单配置切换播放速率、循环播放等。该扩展插件处理了大部分手机端播放的兼容性问题,如播放事件触发的时机冲突,浏览器全屏等等,以及兼容了包括 Iphone、Android 等各种机型。如果您的应用是运行在 html5 plus (opens new window)环境中,那么使用该播放插件将会默认得到更多原生 api 的支持,例如播放控制设备音量、全屏时横竖屏播放、沉浸式播放等。你也可以使用原生与网页交互的方式来控制视频以及设备功能,MuiPlayer 提供了所有事件触发的回调函数。查看在 uni-app 中的使用。
在页面引入 mui-player-mobile-plugin.js,插件需要在初始化播放器之前加载:
<!-- 使用 script 标签引入 --> <script type="text/javascript" src="js/mui-player-mobile-plugin.min.js"></script>
在主配置项 plugins 中传入:
var mp = new MuiPlayer({ container:'#mui-player', src:'../media/media.mp4', ... plugins:[ new MuiPlayerMobilePlugin({ showMenuButton:true, ... }) ] });
配置选项
扩展插件可配置 API:
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
showMenuButton | Boolean | true | 是否加载默认的主菜单 Tag:只有在手机横屏状态有效 |
showLock | Boolean | true | 是否显示播放锁定按钮 Tag:只有在手机横屏状态有效 |
showBattery | Boolean | auto | 是否显示时间电量,默认为 auto。如果window.navigator.getBattery 对象无效那么不显示,反之显示。 |
pageGetsture | Boolean | true | 非全屏状态是否开启触屏控制手势 |
defaultLuminance | Number | 1 | 指定默认播放器的亮度,取值范围为 0 至 1,默认为 1。如果在 html5+ 环境下,该参数设置无效,将会默认获取当前系统亮度 Tag:当 hotKeyConfig['luminanceHandle'] != fals 时配置有效 |
forwardRate | Number | 0.1 | 触屏滑动控制视频的进退速率,有效取值 0.1 至 1 |
# | |||
hotKeyConfig | Object | {} | 热键配置 |
hotKeyConfig.processHandle | Boolean | true | 是否开启左右触屏滑动控制进度 |
hotKeyConfig.volumeHandle | Boolean | true | 是否开启上下触屏滑动控制音量,默认为播放器右半屏,如果设置 luminanceHandle = false,那么将全屏触发 |
hotKeyConfig.luminanceHandle | Boolean | false | 是否开启上下触屏滑动控制亮度,默认为播放器左半屏,如果设置 volumeHandle = false,那么将全屏触发 |
# | |||
defaultMenuConfig | Object | {} | 默认侧栏主菜单配置 |
defaultMenuConfig.showFillSwitch | Boolean | true | 是否显示铺满全屏切换按钮 |
defaultMenuConfig.showLoopSwitch | Boolean | true | 是否显示循环播放切换按钮,直播模式下该参数无效 |
defaultMenuConfig.showSpeedSwitch | Boolean | true | 是否允许切换播放速度,直播模式下该参数无效 |
defaultMenuConfig.showShare | Array | [] | 默认主菜单配置显示分享的按钮,如果该数组的类型配置个数为零则不显示分享按钮,参数接受:[1,2,3,4,5,6] 1:Wchat、2:Wchat Moments、3:QQ、4:Twitter、5:Facebook、6:Copy Link |
# | |||
thumbnails | Object | 缩略图配置,参考 | |
# | |||
webpage | Boolean | false | 在网页端应用插件 新增 |
动作事件监听
mui-player-mobile-plugin 提供特定的行为事件,你必须通过添加该事件来处理指定的动作:
// 音量调节时触发 mp.on('volume-change',function(e) { mp.video().volume = e.size; });
事件名 | 类型 | 函数返回 | 说明 |
---|---|---|---|
volume-change | EventHandle | { size } | 音量调节时触发 |
luminance-change | EventHandle | { size } | 亮度调节时触发 |
share | EventHandle | { type } | 默认侧栏主菜单 - 分享按钮点击时触发 |
back | EventHandle | 在非全屏是模式下,点击返回按钮时触发回 |
MuiPlayer字幕
提示
视频字幕使用的是 html5 track 标签,目前只支持使用 webvtt 格式的字幕文件。
你可以配置一个或者多个 vtt 文件,从而可以选择不同的语言。当存在 vtt 字幕时, mui-player-desktop-plugin.js 会默认读取 track 配置添加设置菜单,前提是浏览器支持 webvtt 文档格式。
查看 webvtt supported 。从 这里 您可以学习到 webvtt 的知识。
API
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
tracks | Array | [] | 字幕列表 |
tracks.kind | String | subtitles | 指定相关文字的字幕信息 |
tracks.src | String | 字幕 vtt 文件地址 | |
tracks.default | Boolean | false | 是否默认显示该字幕 |
tracks.label | String | 指定字幕使用的语言,该值将出现在用户界面中 | |
tracks.srclang | String | 指定每个字幕轨道使用的语言,例如:srclang="en",srclang="zh-cn" 分别表示字幕文件为英语和简体中文。 | |
# | |||
styles | Object | 自定义字幕样式,查看支持样式 |
#配置示例
在初始化配置字幕传递 subtitle 对象,接收 tracks 以及 styles 配置
var mp = new MuiPlayer({ container:'#mui-player', src:'../media/media.mp4', ... subtitle{ tracks:[ { kind:'subtitles', src:'./static/subtitle/sintel-en.vtt', label:'英语', srclang:'en', default:true, }, { kind:'subtitles', src:'./static/subtitle/sintel-de.vtt', label:'德语', srclang:'de', }, { kind:'subtitles', src:'./static/subtitle/sintel-es.vtt', label:'西班牙语', srclang:'es', } ], styles:{ // 字幕默认样式 color:'#FFFFFF', background:'transparent', textShadow:'0px 0px 1px #000000', }, }});
发表评论