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()