jtest-npm-me
v1.0.3
Published
* [介绍](#介绍) * [快速开始](#快速开始) * [install](#install) * [全局引入](#全局引入) * [按需引入(针对功能插件)](#按需引入针对功能插件) * [使用](#使用) * [通用属性](#通用属性) * [配置](#配置) * [Standalone](#standalone) * [MediaElementPlayer](#mediaelementplayer) * [API](#API) * [属性](#
Downloads
5
Readme
目录
介绍
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
说明
- 要在M(PEG)-DASH中使用DRM,请确保CORS配置正确,并且站点必须使用SSL。
MediaElement
和MediaElementPlayer
的成功和错误回调均可用,但是,在使用MediaElementPlayer
时,会传递第三个参数instance
,可用于访问与MediaElementPlayer
类关联的方法。- 当使用
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()