MuiPlayer-简约设计风格的优秀开源弹幕H5播放器

admin

文章最后更新时间:2024年05月30日


muiplayer.jpg

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参数

属性名类型默认值说明
containerString/Elementrequired指定播放器容器
srcStringrequired视频播放的资源地址
titleString
标题
autoplayBooleanfalse是否自动播放,关于 autoplay 属性设置问题请参考
preloadStringauto视频是否预加载,可选值 none | metadata | auto。如果 autoplay=true,则忽略该属性。
loopBooleanfalse是否循环播放
mutedBooleanfalse是否静音播放
widthString/Numberauto初始化播放器宽度
heightString/Number225px初始化播放器高度
langStringnavigator.language播放器界面语言,可选 en | zh-cn | zh-tw
volumeNumber1初始化设置视频音量,取值 0 - 1
autoFitBooleantrue播放器容器是否自适应视频高度
posterString
视频封面的资源地址
liveBooleanfalse是否开启直播模式,直播模式默认菜单配置不允许控制播放速度以及循环播放
initFullFixedBooleanfalse初始化是否网页全屏播放
autoOrientaionBooleantrue全屏时否自动切换方向,在 html5+ (opens new window)中全屏时会自动旋转屏幕,部分手机浏览器全屏时自动旋转方向。
Tag:ios 全屏切换时稍有差异,全屏模式时调用系统全屏播放。
dragSpotShapeStringcircular设置进度条拖动点的形状,可选 circula | square
objectFitStringcontain视频大小与 video 容器的表现形式。可选 contain | cover
closeControlsTimerNumber3500设置播放器定时隐藏控件的时间,可配合 toggleControls 函数接口使用;新增
#


videoAttributeArray[]此属性为添加更多 H5 Video 标签的属性,参数为接受每个 key value 键值对象,注意如果该数组中属性值在已有设置中存在,那么会覆盖。

如需配置声明启用同层播放,那么配置如下:videoAttribute:[
{attrKey:'webkit-playsinline',attrValue:'webkit-playsinline'},
{attrKey:'playsinline',attrValue:'playsinline'},
{attrKey:'x5-video-player-type',attrValue:'h5-page'},
]
#


subtitleObject{}添加视频字幕。目前只支持 webvtt 字幕格式,请参考视频字幕
parseObject{}添加视频解码插件。请参考:解码播放
pluginsObject{}添加播放扩展插件,请参考:移动端扩展 PC端扩展

自定义设置播放器控件,样式:

var mp = new MuiPlayer({
    container:'#mui-player',
    src:'../media/media.mp4',

    themeColor:'#55c612', // 自定义主题颜色
    ...
});

属性名类型默认值说明
themeColorString#1e98d4主题颜色
showMiniProgressBooleantrue是否显示底部迷你进度条,当视图操纵控件隐藏时显示。当配置项 live=true 时无效。
pageHeadBooleantrue非全屏模式下,是否显示播放器头部操作控件
# customObject
自定义播放器控件。请参考: 自定义播放器控件
custom.headControlsArray
自定义播放器头部按钮组,参数接受一个配置数组,最大可配置对象为5个,参考
custom.footerControlsArray
自定义播放器底部控件组,参数接受一个配置数组,最大可配置对象为5个,参考
custom.rightSidebar

自定义播放器右侧弹出栏,参数接受一个配置数组,最大可配置对象为5个,参考

MuiPlayer控制

MuiPlayer 对外提供了部分接口,该接口实现了播放器内置的函数,示例:

// 初始化播放器配置
var mp = new MuiPlayer(option);

// 显示一个消息提示mp.showToast('提示...');
方法名传参必填说明
toggleControlstrue | false-操作播放器控件显示的状态,参数传递一个布尔类型的参数控制隐藏或显示;
默认播放控件会根据closeControlsTimer定时隐藏,可应用高级函数 closeTimer | openTimer 关闭或者打开定时器,示例:
mp.toggleControls(true).closeTimer();

mp.toggleControls(false).openTimer(); 新增
showToastString | Object-弹出消息提示,参考接收一个字符或串或者对象
Ojbect = { message='', duration=1500, style={} }
duration 默认等于1500,单位毫秒
video--返回当前实例的原生video元素
reloadUrlVideo src-指定一个视频地址重新加载资源,不传参则默认重新加载
showRightSidebarSlot name
弹出自定义右侧栏窗口,参考
showLoading--显示视频缓冲 loading
hideLoading--隐藏视频缓冲 loading
openFullScreen-
开启全屏播放
closeFullScreen-
关闭全屏播放
getControls-
获取所有播放器控件,返回一个数组
destroy--销毁视频播放器
sendErrorevent
主动发送错误报告

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...');
    });
});

事件名类型函数返回说明
backEventHandle
返回按钮点击时触发,
Tag:仅在非全屏模式下触发
duration-changeEventHandle{duration}当视频时长已更改时触发,只有当时长大于1时发生,单位为秒(s)
seek-progressEventHandle{percentage}当用户在视频寻址时触发
fullscreen-changeEventHandle{direction,fullscreen}当视频进入或者退出全屏时触发。初始播放器器时默认触发一次该事件
direction:表示当前播放的方向,在手机端适用
fullscreen:表示当前在 pc 环境是否为全屏状态播放,只有在 pc 环境返回该属性
controls-toggleEventHandle{show}controls 控件状态变化时触发
errorEventHandlenative event播放发生错误
destroyEventHandle
视频销毁事件
readyEventHandle
播放器已创建完成

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

属性名类型默认值说明
customSettingArray{functions:'循环播放',
name:'loopPlay'}

{functions:'播放速度',
name:'playbackRate'}
自定义设置组,参见
customSetting.functionsString
组名称
customSetting.nameString
组标识名。如该名称与默认配置组中某个名称相同,那么将重写默认配置组菜单
customSetting.modelStringselect组选择模式,可选 switch | select
customSetting.selectedBooleanfalse默认是否选中当前选择项
customSetting.showBooleantrue是否显示
customSetting.zIndexNumber0组显示层级,zIndex越大该组排列顺序越靠前
customSetting.childConfigArray[]子设置组配置,配置参数同父级设置组参数
customSetting.onToggleFunctioncallback(
data,
selected,
back)
组选项点击后的回调函数,接收三个参数可供处理动作:
1、data:当前选择配置项
2、selected: 函数,必须手动调用该函数来选择项目
3、back: 函数,调用该函数触发返回父级设置组,参数可接收一个毫秒单位的数字表示延迟返回
#


contextmenuArray{name:'shortcuts',
context:'快捷键'},

{name:'muiplayer',
context:'MuiPlayer'}
自定义右键菜单,参考
contextmenu.nameString
菜单标识名,如该名称与右击菜单组中某个名称相同,那么将重写默认菜单组
contextmenu.contextString
右击菜单名称
contextmenu.zIndexNumber
组显示层级,zIndex越大该组排列顺序越靠前
contextmenu.showBoolean
是否显示
contextmenu.clickFunctioncallback(close)点击后回调函数。【close:函数,主动调用函数可关闭右击菜单】
#


thumbnailsObject{}缩略图配置,参见
#


fullScalingNumber1.2全屏时控件大小缩放比,取值 >= 1
leaveHiddenControlsBooleanfalse鼠标指针移出播放器时是否隐藏控件

您可以自定义配置设置组以此来满足需要添加的菜单,设置菜单支持两种选择模式,分别是开关模式(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
        },
    }
})




属性名类型默认值说明
danmakuComponentObject{}创建一个弹幕输入组件
danmakuComponent.openObjecttrue是否开启弹幕组件
danmakuComponent.growSizeNumber0.65组件占据容器的宽度比例,取值范围:0 - 1
danmakuComponent.positionStringleft组件排列的位置,可取值 left | right | center
danmakuComponent.buttonTextString-按钮显示的文字
danmakuComponent.placeholderString-弹幕文本录入框显示的占位符
danmakuComponent.onSendFunction(text,cleanText)监听文本发送内容的函数回调,方法接收两个回调参数:
text:String - 表示文本内容
cleanText:Function - 调用函数清空文本输入框内容
danmakuComponent.loadInterceptFunction(Element)在组件加载之前进行拦截,通常这里是做对组件重写的动作,回调函数 Element 返回该控件元素
danmakuComponent.styleObject{}组件的附加样式
#


promptObject
进度条指示点
prompt.dotColorString#F8F8FF颜色
prompt.hoverShowBooleanfalse是否只在鼠标悬停时显示
prompt.itemsArray{}进度条指示点配置项,数组中元素传入配置对象包括:
time: <Number> 时间节点/单位秒
content: <String | Element> 鼠标悬浮提示内容
style:<Object> 自定义项样式
#


seekLineObjecttrue显示寻址线
#


移动端扩展【专业版】

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:

属性名类型默认值说明
showMenuButtonBooleantrue是否加载默认的主菜单
Tag:只有在手机横屏状态有效
showLockBooleantrue是否显示播放锁定按钮
Tag:只有在手机横屏状态有效
showBatteryBooleanauto是否显示时间电量,默认为 auto。如果window.navigator.getBattery 对象无效那么不显示,反之显示。
pageGetstureBooleantrue非全屏状态是否开启触屏控制手势
defaultLuminanceNumber1指定默认播放器的亮度,取值范围为 0 至 1,默认为 1。如果在 html5+ 环境下,该参数设置无效,将会默认获取当前系统亮度
Tag:当 hotKeyConfig['luminanceHandle'] != fals 时配置有效
forwardRateNumber0.1触屏滑动控制视频的进退速率,有效取值 0.1 至 1
#


hotKeyConfigObject{}热键配置
hotKeyConfig.processHandleBooleantrue是否开启左右触屏滑动控制进度
hotKeyConfig.volumeHandleBooleantrue是否开启上下触屏滑动控制音量,默认为播放器右半屏,如果设置 luminanceHandle = false,那么将全屏触发
hotKeyConfig.luminanceHandleBooleanfalse是否开启上下触屏滑动控制亮度,默认为播放器左半屏,如果设置 volumeHandle = false,那么将全屏触发
#


defaultMenuConfigObject{}默认侧栏主菜单配置
defaultMenuConfig.showFillSwitchBooleantrue是否显示铺满全屏切换按钮
defaultMenuConfig.showLoopSwitchBooleantrue是否显示循环播放切换按钮,直播模式下该参数无效
defaultMenuConfig.showSpeedSwitchBooleantrue是否允许切换播放速度,直播模式下该参数无效
defaultMenuConfig.showShareArray[]默认主菜单配置显示分享的按钮,如果该数组的类型配置个数为零则不显示分享按钮,参数接受:[1,2,3,4,5,6]

1:Wchat、2:Wchat Moments、3:QQ、4:Twitter、5:Facebook、6:Copy Link
#


thumbnailsObject
缩略图配置,参考
#


webpageBooleanfalse在网页端应用插件 新增

动作事件监听

mui-player-mobile-plugin 提供特定的行为事件,你必须通过添加该事件来处理指定的动作:

// 音量调节时触发
mp.on('volume-change',function(e) {
    mp.video().volume = e.size;
});
事件名类型函数返回说明
volume-changeEventHandle{ size }音量调节时触发
luminance-changeEventHandle{ size }亮度调节时触发
shareEventHandle{ type }默认侧栏主菜单 - 分享按钮点击时触发
backEventHandle
在非全屏是模式下,点击返回按钮时触发回

MuiPlayer字幕

提示

视频字幕使用的是 html5 track 标签,目前只支持使用 webvtt 格式的字幕文件。

你可以配置一个或者多个 vtt 文件,从而可以选择不同的语言。当存在 vtt 字幕时, mui-player-desktop-plugin.js 会默认读取 track 配置添加设置菜单,前提是浏览器支持 webvtt 文档格式。

查看 webvtt supported (opens new window)。从 这里 (opens new window)您可以学习到 webvtt 的知识。

API

属性名类型默认值说明
tracksArray[]字幕列表
tracks.kindStringsubtitles指定相关文字的字幕信息
tracks.srcString
字幕 vtt 文件地址
tracks.defaultBooleanfalse是否默认显示该字幕
tracks.labelString
指定字幕使用的语言,该值将出现在用户界面中
tracks.srclangString
指定每个字幕轨道使用的语言,例如:srclang="en",srclang="zh-cn" 分别表示字幕文件为英语和简体中文。
#


stylesObject
自定义字幕样式,查看支持样式

#配置示例

在初始化配置字幕传递 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',
		},
    }});

MuiPlayer下载

此处为隐藏内容,请评论后查看隐藏内容,谢谢!

文章版权声明:除非注明,否则均为十八码原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (有 10 条评论,899人围观)
网友昵称:wqdsjax
wqdsjax V 评论者 沙发
06-18 回复
萨的地方法规和
网友昵称:baopian
baopian V 评论者 椅子
06-30 回复
萨的地方法规和
网友昵称:test111
test111 V 评论者 板凳
07-11 回复
谢谢分享!
网友昵称:zhouhen
zhouhen V 评论者 凉席
08-02 回复
萨的地方法规和
网友昵称:xiaod220
xiaod220 V 评论者 地板
08-03 回复
试一试
网友昵称:NET
NET V 评论者 6楼
08-03 回复
学一学习
网友昵称:xiaod220
xiaod220 V 评论者 7楼
08-28 回复
看一看
网友昵称:horizonvedio@gmail.com
horizonvedio@gmail.com V 评论者 8楼
09-14 回复
试一试
网友昵称:火箭发射东风
火箭发射东风 V 评论者 9楼
09-23 回复
哈哈,看起来了还不错
网友昵称:tombus
tombus V 评论者 10楼
10-02 回复
文章不错,写的很好!

目录[+]