jtest-npm-me v1.0.3
目录
介绍
MediaElementPlayer: HTML5 音视频播放器
MediaElementPlayer是一个基于MediaElement.js的完整的音频/视频播放器。
MediaElement.js
是一组模仿HTML5 MediaElement API的自定义Flash插件,用于不支持HTML5或不支持你正在使用的媒体编解码器的浏览器。
一般来说,MediaElement.js
支持IE11+, MS Edge, Chrome, Firefox, Safari, iOS 8+ 和 Android 4.0+ 。
快速开始
install
安装播放器
npm install --save jtest-npm-me
安装播放器功能插件(非必须)
npm install --save jtest-npm-me-plugins
全局引入
import 'jtest-npm-me';
// 引入播放器样式文件
import 'jtest-npm-me/build/mediaelementplayer.min.css';
// 如果用到播放器功能插件,可通过以下方式引入相应的js和css样式
import 'jtest-npm-me-plugins';
import 'jtest-npm-me-plugins/dist/css/mediaelement-plugins.min.css';
针对vue开发项目,可通过以下方式全局注册播放器组件
import Vue from 'vue'
import MediaElementPlayer from 'jtest-npm-me/vue';
// 引入播放器样式文件
import 'jtest-npm-me/build/mediaelementplayer.min.css';
// 页面可使用 MediaElementPlayer 作为播放器组件名
Vue.use(MediaElementPlayer);
按需引入(针对功能插件)
import 'jtest-npm-me/build/mediaelementplayer.min.css';
// vue页面中可使用组件的引入方式
import { MediaElementPlayer } from 'jtest-npm-me/vue';
// 按需引入播放器功能插件
import 'jtest-npm-me-plugins/dist/loop/loop';// 引入'循环'插件
import 'jtest-npm-me-plugins/dist/loop/loop.css';// 引入'循环'插件样式
import 'jtest-npm-me-plugins/dist/stop/stop';// 引入'停止'插件
import 'jtest-npm-me-plugins/dist/stop/stop.css';// 引入'停止'插件样式
export default {
components: {
MediaElementPlayer
}
}
使用
方式一:
<template>
<div class="home">
<p>mediaElement视频播放器</p>
<div class="video-wrapper">
<video id="player" width="680" height="380" controls preload="none" playsinline>
<source type="video/mp4" src="../assets/001.mp4">
</video>
</div>
</div>
</template>
<script>
import 'jtest-npm-me';
import 'jtest-npm-me/build/mediaelementplayer.min.css';
import 'jtest-npm-me-plugins';
import 'jtest-npm-me-plugins/dist/css/mediaelement-plugins.min.css';
export default {
name: 'home',
data () {
return {
player: null
}
},
mounted () {
this.initPlayer();
},
methods: {
initPlayer() {
this.player = new MediaElementPlayer('player', {
autoRewind: false,
// features不配置时默认包含'playpause','current','progress','duration','volume','fullscreen'
features: [
'playpause',// 播放/暂停
'current',// 当前播放时间
'progress',// 进度条
'duration',// 总时长
'volume',// 音量
'speed',// 倍速
'stop',// 停止
'fullscreen'// 全屏
],
// speed
defaultSpeed: '1'
})
}
}
}
</script>
<style lang="scss" scoped>
.video-wrapper{
position: relative;
display: flex;
justify-content: center;
align-items: center;
video{
max-width: 100%;
max-height: 100%;
}
}
</style>
方式二
<template>
<div>
<MediaElementPlayer
ref="myplayer"
class="myclass"
type="video"
id="player2"
width="680"
height="380"
controls
preload="none"
playsinline
:options="options"
>
<source type="video/mp4" src="../assets/001.mp4">
</MediaElementPlayer>
</div>
</template>
<script>
// 引入播放器组件及样式
import { MediaElementPlayer } from 'jtest-npm-me/vue';
import 'jtest-npm-me/build/mediaelementplayer.min.css';
// 引入全部插件
// import 'jtest-npm-me-plugins';
// import 'jtest-npm-me-plugins/dist/css/mediaelement-plugins.min.css';
// 或按需引入插件
import 'jtest-npm-me-plugins/dist/stop/stop';
import 'jtest-npm-me-plugins/dist/stop/stop.css';
import 'jtest-npm-me-plugins/dist/speed/speed';
import 'jtest-npm-me-plugins/dist/speed/speed.css';
export default {
components: {
MediaElementPlayer
},
data() {
return {
options: {
autoRewind: false,
// features不配置时默认包含'playpause','current','progress','duration','volume','fullscreen'
features: [
'playpause',// 播放/暂停
'current',// 当前播放时间
'progress',// 进度条
'duration',// 总时长
'volume',// 音量
'speed',// 倍速
'stop',// 停止
'fullscreen'// 全屏
],
// speed
defaultSpeed: '1'
},
}
},
mounted() {
// 可通过this.$refs.myplayer.player访问播放器
console.log(this.$refs.myplayer.player)
}
}
</script>
通用属性
MediaElement
支持以下 video
/audio
标签属性:
属性 | 描述 |
---|---|
autoplay | 如果出现该属性,则视频在就绪后马上播放 |
class | 指定类名 |
controls | 如果出现该属性,则向用户显示控件,比如播放按钮 |
id | 标签id |
height | 设置视频播放器的高度,单位为像素,也可以设置为百分比 |
loop | 如果出现该属性,则当媒介文件完成播放后再次开始播放 |
muted | 规定视频的音频输出应该被静音 |
poster | 规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像。通常是PNG或JPEG图像。如果没有指定,播放器将使用样式表中指定的背景颜色 |
preload | 规定当页面加载时,视频是否应该加载以及如何加载,可能值有: auto , metadata 和 none (推荐) |
src | 要播放的视频的 URL。这个值也可以用 source 标签表示 |
style | 内联样式 |
tabindex | 指定元素的制表顺序。要避免键盘将焦点放在此元素上,请使用 -1 ;否则用 0 |
title | 指定关于元素的额外信息 |
width | 设置视频播放器的宽度,单位为像素,也可以设置为百分比 |
下面的示例更直观地列出了上述所有属性:
<video autoplay controls class="player" id="player1" height="360"
width="100%" loop muted poster="/path/to/poster.jpg"
preload="none" src="/path/to/media.mp4"
style="max-width: 100%" tabindex="0" title="MediaElement">
</video>
配置
作为初始化播放器时的配置选项,或作为vue组件的options
选项,支持以下配置参数。
Standalone
作为一个独立的库, MediaElement.js 可以使用以下设置进行配置。
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
renderers | array | [] | 要使用的渲染器列表 |
fakeNodeName | string | mediaelementwrapper | MediaElement 容器名称 |
pluginPath | string | build/ | Flash shims 路径 |
shimScriptAccess | string | sameDomain | 在 <object> 和 <embed> 中标记,确定是使用本地文件还是CDN文件。可能值有: always (CDN 版本) 、 sameDomain (本地文件) |
success | callback | 在媒体资源加载后立即执行的操作;传递2个参数:media (为所有渲染器模仿所有本地事件/属性/方法的包装器)和 node (媒体最初加载的原始HTML video , audio 或 iframe 标签);如果使用 html5 ,media 和 node 基本上是一样的) | |
error | callback | 如果源文件没有加载,将触发错误回调,传参与 success 回调一致 | |
dash | object | 接收参数 debug , drm (加载受保护/授权的流媒体,更多信息查看 drm) 和 path (声明 dash.js 的本地路径) | |
flv | object | path 参数指定库加载的路径,其他信息请查看文档flv.js | |
hls | object | path 参数指定库加载的路径,其他信息请查看文档hls.js |
说明
1. 要在M(PEG)-DASH中使用DRM,请确保CORS配置正确,并且站点必须使用SSL。
2. MediaElement
和MediaElementPlayer
的成功和错误回调均可用,但是,在使用MediaElementPlayer
时,会传递第三个参数instance
,可用于访问与MediaElementPlayer
类关联的方法。
3. 当使用MediaElementPlayer
时,error
回调参数是:error(错误事件的详细描述),media和node
MediaElementPlayer
除了上面的参数之外, MediaElementPlayer 对象还可配置以下参数:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
classPrefix | string | mejs__ | 播放器元素的class前缀 |
poster | string | (empty) | 覆盖poster 属性的Poster URL |
showPosterWhenEnded | boolean | false | 当视频结束时,展示海报 |
showPosterWhenPaused | boolean | false | 当视频暂停时,展示海报 |
defaultVideoWidth | number | 480 | <video> 宽度未设定时的默认宽度 |
defaultVideoHeight | number | 270 | <video> 高度未设定时的默认高度 |
videoWidth | number | -1 | 如果设定了,将覆盖 <video> width |
videoHeight | number | -1 | 如果设定了,将覆盖 <video> height |
defaultAudioWidth | number | 400 | 音频播放器宽度未指定时的默认宽度 |
defaultAudioHeight | number | 30 | 音频播放器高度未指定时的默认高度 |
defaultSeekBackwardInterval | function | 按下返回键时向后移动的默认间隔。默认回调是这样表示的: function(media) {return (media.duration * 0.05);} | |
defaultSeekForwardInterval | function | 按下前进键时向前移动的默认间隔。默认回调是这样表示的: function(media) {return (media.duration * 0.05);} | |
setDimensions | boolean | true | 通过JS而不是CSS设置尺寸 |
audioWidth | number | -1 | 音频播放器宽度 |
audioHeight | number | -1 | 音频播放器高度 |
startVolume | number | 0.8 | 媒体播放初始音量(被用户cookie覆盖),用浮点值表示 |
loop | boolean | false | 是否循环播放 |
autoRewind | boolean | true | 当媒体结束时是否倒回开始 |
enableAutosize | boolean | true | 调整到媒体尺寸 |
timeFormat | string | (empty) | 使用的时间格式。默认值:mm: ss 。支持单位:h :小时,m :分钟,s :秒,f :帧数。如果使用2个字母,将显示2位数字(hh:mm:ss ) |
alwaysShowHours | boolean | false | 时间格式化时是否始终显示小时数 (##:00:00 ) |
showTimecodeFrameCount | boolean | false | 是否在时间码中显示帧数 (##:00:00:00 ) |
framesPerSecond | number | 25 | 每秒的帧数,当showTimecodeFrameCount 设置为true 时有效 |
autosizeProgress | boolean | true | 为true 表示根据其他元素的大小自动计算进度条的宽度 |
alwaysShowControls | boolean | false | 为false 表示视频播放过程中鼠标不在视频上时隐藏控件 |
hideVideoControlsOnLoad | boolean | false | 在视频加载时是否隐藏视频控制区 |
hideVideoControlsOnPause | boolean | false | 在视频暂停时是否隐藏视频控制区 |
clickToPlayPause | boolean | true | 是否允许点击视频元素时切换播放/暂停状态 |
controlsTimeoutDefault | number | 1500 | 媒体控件隐藏的默认延迟时间(ms)T |
controlsTimeoutMouseEnter | number | 2500 | 当鼠标移动触发控件隐藏定时器的延迟时间(ms) |
controlsTimeoutMouseLeave | number | 1000 | 当鼠标离开触发控件隐藏定时器的延迟时间(ms) |
iPadUseNativeControls | boolean | false | ipad使用原生控件 |
iPhoneUseNativeControls | boolean | false | iPhone使用原生控件 |
AndroidUseNativeControls | boolean | false | Android使用原生控件 |
features | array | [...] | 在播放器中使用的功能/插件列表,默认是: playpause , current , progress , duration , tracks , volume , fullscreen |
useDefaultControls | boolean | false | 如果设置为true ,上面features 中列出的所有默认控制元素将被使用,并且这些特性将附加在features 中声明的其他插件中。这种方法主要用于添加更多的插件,而不修改控件栏中的任何元素 |
isVideo | boolean | true | Only for dynamic purposes |
stretching | string | auto | 视频播放器的拉伸模式。如果设置auto ,播放器样式如果有max-width 和max-height ,则切换为responsive 模式;否则,将设置标签中指定的尺寸(与将此选项设置为none 时相同)。fill 模式将尝试使用可用空间来适应视频,当窗口大小调整时,它将根据可用空间裁剪尺寸以使其居中。 |
enableKeyboard | boolean | true | 是否支持键盘控制 |
pauseOtherPlayers | boolean | true | 当前播放器开始播放时,是否暂停其他播放器 |
ignorePauseOtherPlayersOption | boolean | true | 当前播放器忽略 pauseOtherPlayers 选项设置 |
secondsDecimalLength | number | 0 | 显示帧是否显示的小数位数 |
customError | string/callback | null | 如果发生错误,通过字符串或函数设置定制的HTML消息。该函数有两个参数:media (包含播放器所有本地事件/属性/方法的容器)和node (原始HTML视频、音频或iframe标签,媒体最初是在这里加载的) |
keyActions | array | [...] | 键盘事件处理。接受对象数组的格式:{keys:[1,2,3...], action: function(player, media){...}} 。/src/js/player.js 可查看整个列表 |
duration | number | -1 | 用于检测媒体持续时间变化的起始点 |
timeAndDurationSeparator | string | <span> | </span> | 当前时间和正在播放的媒体总持续时间之间的分隔符 |
hideVolumeOnTouchDevices | boolean | true | 触摸设备上有不同的方式控制音量,设为true 可隐藏不需要的音量控制 |
enableProgressTooltip | boolean | true | 是否启用在进度条中显示时间的工具提示 |
useSmoothHover | boolean | true | 在悬停进度条时是否启用平滑行为 |
forceLive | boolean | false | 如果设置为true ,Live Broadcast 消息将会显示,进度条将会隐藏,无论duration 是否有效 |
audioVolume | string | horizontal | 音量滑块在音频元素上的呈现方式,分horizontal 和vertical |
videoVolume | string | vertical | 音量滑块在视频元素上的呈现方式,分horizontal 和vertical |
usePluginFullScreen | boolean | true | 在全屏模式下激活Pointer事件检测的标志 |
useFakeFullscreen | boolean | false | 是否禁用移动设备上的原生全屏功能,并使用模拟的全屏模式 |
captionTextPreprocessor | function | not set | 显示标题文本之前对其进行预处理的选项。如果设置,函数接受标题文本并返回其预处理版本。如果没有设置,标题文本将按原样显示。 |
toggleCaptionsButtonWhenOnlyOne | boolean | false | If true and we only have one track, change captions to toggle button |
startLanguage | string | (empty) | Automatically turn on a <track> element. Note: Will not work when toggleCaptionsButtonWhenOnlyOne is set to true |
slidesSelector | string | (empty) | slides的选择器,可以是任何有效的JavaScript选择器(#id, .class, img等) |
tracksText | string | null | 关闭字幕按钮的标题 |
chaptersText | string | null | 章节按钮的标题 |
muteText | string | null | 静音按钮的标题 |
unmuteText | string | null | 取消静音按钮的标题 |
allyVolumeControlText | string | null | 辅助功能音量控制提示的标题 |
fullscreenText | string | null | 全屏按钮的标题 |
playText | string | null | 播放按钮的标题 |
pauseText | string | null | 暂停按钮的标题 |
API
MediaElementPlayer是一个完整的视频和音频播放器,你也可以只使用MediaElement对象,它将<video>
和<audio>
替换为一个Flash播放器,该播放器可以模仿HTML MediaElement API的属性、方法和事件。
属性
属性 | 描述 | GET | SET |
---|---|---|---|
autoplay | 设置或返回音频/视频是否应该在加载后立即开始播放 | X | X |
buffered | 返回TimeRanges对象,表示音频/视频的缓冲部分 | X | |
controls | 设置或返回音频/视频是否应该显示控件(如播放/暂停等) | X | X |
currentSrc | 返回当前音频/视频的URL | X | |
currentTime | 设置或返回音频/视频中当前播放位置(秒) | X | X |
duration | 返回当前音频/视频的长度(秒);要在不播放媒体的情况下确定,则必须设置preload="auto" | X | |
ended | 返回音频/视频的播放是否已经结束 | X | |
error | 返回一个MediaError对象,表示音频/视频的错误状态 | X | |
loop | 设置或返回音频/视频结束后是否应该重新开始 | X | X |
muted | 设置或返回音频/视频是否静音 | X | X |
paused | 返回音频/视频是否暂停 | X | |
readyState | 返回音频/视频的当前就绪状态 | X | |
seeking | 返回用户当前是否在音频/视频中寻找 | X | |
src | 设置或返回音频/视频元素的当前源 | X | X |
volume | 设置或返回音频/视频的音量 | X | X |
方法
方法 | 描述 |
---|---|
load() | 重新加载音频/视频元素;此外,它还用于在更改源或其他设置后更新音频/视频元素 |
play() | 开始播放音频/视频 |
pause() | 暂停当前播放的音频或视频 |
stop() | 仅在MediaElementPlayer中呈现以支持Flash RTMP流媒体。对于其他场景,等效的方法是pause |
remove() | 销毁视频/音频播放器实例 |
canPlayType(type) | 确定当前播放器是否可以播放特定的媒体类型;type 是MIME类型,每个渲染器都有一个它们的白名单 |
setPlayerSize (width, height) | 设置播放器的width 和height ,也需考虑stretching 配置 |
setPoster (url) | 在播放器的布局层中添加一个带有封面url的image 标签用于展示封面;传递空字符串可以清除封面 |
setMuted (muted) | 设置静音或取消静音,muted 为布尔值 |
setCurrentTime (time) | 为播放器设置新的当前时间,time 可以是整数或浮点数,如果是负数,将从0开始 |
getCurrentTime () | 获取媒体的当前播放时间 |
setVolume (volume) | 设置播放音量,volume 是0 到1 之间的数值 |
getVolume () | 获取媒体的当前播放音量 |
setSrc (src) | 为播放器设置一个新的URL |
getSrc () | 获取媒体的播放URL |
事件
事件 | 触发条件 |
---|---|
loadedmetadata | 元数据加载完毕 |
progress | 浏览器正在获取媒体数据 |
timeupdate | 播放时间发生改变 |
seeking | 寻找中 |
seeked | 寻找完毕 |
canplay | 一个文件已经准备好开始播放(当它有足够的缓冲可以开始播放时) |
play | play()和autoplay开始播放时触发 |
playing | 媒体已经开始播放 |
pause | 媒体暂停时触发 |
ended | 媒体播放结束时触发 |
volumechange | 音量改变时触发 |
captionschange | 检测到字幕变化 |
工具
所有工具方法都可通过 mejs.Utils.{name}
访问.
DOM
方法 | 描述 |
---|---|
offset(element) | 获取element 的top 和left 坐标 |
hasClass(element, className) | 检查 element 元素是否定义了类 className |
addClass(element, className) | 添加类名为 className 的样式到元素 element |
removeClass(element, className) | 移除 element 元素上的类 className |
toggleClass(element, className) | 添加/移除 element 元素上的类 className |
fadeIn(element, duration, callback) | 在 duration 持续时间(默认值是400)内显示 element ,显示后如果定义了 callback 则执行该回调 |
fadeOut(element, duration, callback) | 在 duration 持续时间(默认值是400)内隐藏 element ,隐藏后如果定义了 callback 则执行该回调 |
siblings(element, filter) | 根据 filter 选择器从 element 中获取所有兄弟元素 |
visible(element) | 检查 element 是否可见,不可见包含 display: none 和 visibility: hidden 情形 |
ajax(url, dataType, success, error) | 执行对某个 url 的AJAX请求,指定其类型(text , html , json , xml )并执行成功或错误回调 |
通用方法
方法 | 描述 |
---|---|
escapeHTML(input) | 对 input 中的 &, <, >, " 等字符转义防止XSS攻击 |
debounce(callback, wait) | 防抖,在指定的 wait 时间结束之后才执行 callback |
throttle(callback, wait) | 节流,在指定的 wait 时间之内只会触发 callback 一次 |
isObjectEmpty(object) | 检查 object 是否为空 |
splitEvents(events, id) | 将用空格分隔的 events 字符串分割为 document (d)和 window (w)事件。可以传递 id 来追加名称空间 |
createEvent(eventName, target) | 创建 CustomEvent 类的实例,传递事件名 eventName 和目标 target |
isNodeAfter(sourceNode, targetNode) | 检查DOM中 targetNode 是否出现在 sourceNode 之后 |
isString(input) | 判断 input 是否为字符串 |
Media
方法 | 描述 |
---|---|
absolutizeUrl(path) | 返回 path 的绝对路径 |
formatType(url, type) | 根据 url 获取媒体的MIME类型,如果提供了 type ,则返回 type |
getMimeFromType(type) | 如果 type 包含编解码器,则获取 type 中正确的MIME部分(video/mp4; codecs="avc1.42E01E, mp4a.40.2" 变成 video/mp4 ) |
getTypeFromFile(url) | 获取基于 url 结构的媒体类型 |
getExtension(url) | 从 url 获取媒体文件扩展名 |
normalizeExtension(extension) | 获取媒体 extension 的标准扩展 |
时间格式化
Method | Description |
---|---|
secondsToTimeCode(time, forceHours, showFrameCount, fps, secondsDecimalLength) | 将 time 格式化为“00:00:00”的格式,如果 forceHours 设置为 true ,则始终显示小时数,如果 showFrameCount 为 true ,则显示帧计数。此外,可以指定每秒帧数(fps ,默认为25 ),以及显示的小数位数(secondsDecimalLength ) |
timeCodeToSeconds(time, fps) | 将'00:00:00'时间字符串转换成以秒为单位的数字表示。如果格式化字符串包含帧数,可以指定每秒帧数(fps ,默认为25帧) |
calculateTimeFormat(time, options, fps) | 通过播放器选项options 和 时间 time 以及帧率 fps (可选),计算返回对应的时间格式 |
convertSMPTEtoSeconds(SMPTE) | 将电影和电视工程师协会(SMTPE)的时间代码转换为秒 |
特性
MediaElement.js
提供一些方法用来判断用户的浏览器环境以及全屏的支持情况,以下列出的特性可通过使用 mejs.Features.{name}
访问。
- mejs.Features.isiPad
- mejs.Features.isiPhone
- mejs.Features.isiOS
- mejs.Features.isAndroid
- mejs.Features.isIE
- mejs.Features.isEdge
- mejs.Features.isChrome
- mejs.Features.isFirefox
- mejs.Features.isSafari
- mejs.Features.isStockAndroid
- mejs.Features.hasMSE
- mejs.Features.supportsNativeHLS
- mejs.Features.supportsPointerEvents
- mejs.Features.hasiOSFullScreen
- mejs.Features.hasNativeFullscreen
- mejs.Features.hasWebkitNativeFullScreen
- mejs.Features.hasMozNativeFullScreen
- mejs.Features.hasMsNativeFullScreen
- mejs.Features.hasTrueNativeFullScreen
- mejs.Features.nativeFullScreenEnabled
- mejs.Features.fullScreenEventName
- mejs.Features.isFullScreen()
- mejs.Features.requestFullScreen()
- mejs.Features.cancelFullScreen()