1.0.3 • Published 4 years ago

jtest-npm-me v1.0.3

Weekly downloads
9
License
MIT
Repository
-
Last release
4 years ago

目录

介绍

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, metadatanone (推荐)
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 可以使用以下设置进行配置。

参数类型默认值描述
renderersarray[]要使用的渲染器列表
fakeNodeNamestringmediaelementwrapperMediaElement 容器名称
pluginPathstringbuild/Flash shims 路径
shimScriptAccessstringsameDomain<object><embed> 中标记,确定是使用本地文件还是CDN文件。可能值有: always (CDN 版本) 、 sameDomain (本地文件)
successcallback在媒体资源加载后立即执行的操作;传递2个参数:media (为所有渲染器模仿所有本地事件/属性/方法的包装器)和 node (媒体最初加载的原始HTML video, audioiframe标签);如果使用 html5medianode基本上是一样的)
errorcallback如果源文件没有加载,将触发错误回调,传参与 success 回调一致
dashobject接收参数 debug, drm (加载受保护/授权的流媒体,更多信息查看 drm) 和 path (声明 dash.js 的本地路径)
flvobjectpath参数指定库加载的路径,其他信息请查看文档flv.js
hlsobjectpath参数指定库加载的路径,其他信息请查看文档hls.js

说明 1. 要在M(PEG)-DASH中使用DRM,请确保CORS配置正确,并且站点必须使用SSL。 2. MediaElementMediaElementPlayer的成功和错误回调均可用,但是,在使用MediaElementPlayer时,会传递第三个参数instance,可用于访问与MediaElementPlayer类关联的方法。 3. 当使用MediaElementPlayer时,error回调参数是:error(错误事件的详细描述),media和node

MediaElementPlayer

除了上面的参数之外, MediaElementPlayer 对象还可配置以下参数:

参数类型默认值描述
classPrefixstringmejs__播放器元素的class前缀
posterstring(empty)覆盖poster属性的Poster URL
showPosterWhenEndedbooleanfalse当视频结束时,展示海报
showPosterWhenPausedbooleanfalse当视频暂停时,展示海报
defaultVideoWidthnumber480<video>宽度未设定时的默认宽度
defaultVideoHeightnumber270<video>高度未设定时的默认高度
videoWidthnumber-1如果设定了,将覆盖 <video> width
videoHeightnumber-1如果设定了,将覆盖 <video> height
defaultAudioWidthnumber400音频播放器宽度未指定时的默认宽度
defaultAudioHeightnumber30音频播放器高度未指定时的默认高度
defaultSeekBackwardIntervalfunction按下返回键时向后移动的默认间隔。默认回调是这样表示的: function(media) {return (media.duration * 0.05);}
defaultSeekForwardIntervalfunction按下前进键时向前移动的默认间隔。默认回调是这样表示的: function(media) {return (media.duration * 0.05);}
setDimensionsbooleantrue通过JS而不是CSS设置尺寸
audioWidthnumber-1音频播放器宽度
audioHeightnumber-1音频播放器高度
startVolumenumber0.8媒体播放初始音量(被用户cookie覆盖),用浮点值表示
loopbooleanfalse是否循环播放
autoRewindbooleantrue当媒体结束时是否倒回开始
enableAutosizebooleantrue调整到媒体尺寸
timeFormatstring(empty)使用的时间格式。默认值:mm: ss。支持单位:h:小时,m:分钟,s:秒,f:帧数。如果使用2个字母,将显示2位数字(hh:mm:ss)
alwaysShowHoursbooleanfalse时间格式化时是否始终显示小时数 (##:00:00)
showTimecodeFrameCountbooleanfalse是否在时间码中显示帧数 (##:00:00:00)
framesPerSecondnumber25每秒的帧数,当showTimecodeFrameCount设置为true时有效
autosizeProgressbooleantruetrue表示根据其他元素的大小自动计算进度条的宽度
alwaysShowControlsbooleanfalsefalse表示视频播放过程中鼠标不在视频上时隐藏控件
hideVideoControlsOnLoadbooleanfalse在视频加载时是否隐藏视频控制区
hideVideoControlsOnPausebooleanfalse在视频暂停时是否隐藏视频控制区
clickToPlayPausebooleantrue是否允许点击视频元素时切换播放/暂停状态
controlsTimeoutDefaultnumber1500媒体控件隐藏的默认延迟时间(ms)T
controlsTimeoutMouseEnternumber2500当鼠标移动触发控件隐藏定时器的延迟时间(ms)
controlsTimeoutMouseLeavenumber1000当鼠标离开触发控件隐藏定时器的延迟时间(ms)
iPadUseNativeControlsbooleanfalseipad使用原生控件
iPhoneUseNativeControlsbooleanfalseiPhone使用原生控件
AndroidUseNativeControlsbooleanfalseAndroid使用原生控件
featuresarray[...]在播放器中使用的功能/插件列表,默认是: playpause, current, progress, duration, tracks, volume, fullscreen
useDefaultControlsbooleanfalse如果设置为true,上面features中列出的所有默认控制元素将被使用,并且这些特性将附加在features中声明的其他插件中。这种方法主要用于添加更多的插件,而不修改控件栏中的任何元素
isVideobooleantrueOnly for dynamic purposes
stretchingstringauto视频播放器的拉伸模式。如果设置auto,播放器样式如果有max-widthmax-height,则切换为responsive模式;否则,将设置标签中指定的尺寸(与将此选项设置为none时相同)。fill模式将尝试使用可用空间来适应视频,当窗口大小调整时,它将根据可用空间裁剪尺寸以使其居中。
enableKeyboardbooleantrue是否支持键盘控制
pauseOtherPlayersbooleantrue当前播放器开始播放时,是否暂停其他播放器
ignorePauseOtherPlayersOptionbooleantrue当前播放器忽略 pauseOtherPlayers 选项设置
secondsDecimalLengthnumber0显示帧是否显示的小数位数
customErrorstring/callbacknull如果发生错误,通过字符串或函数设置定制的HTML消息。该函数有两个参数:media(包含播放器所有本地事件/属性/方法的容器)和node(原始HTML视频、音频或iframe标签,媒体最初是在这里加载的)
keyActionsarray[...]键盘事件处理。接受对象数组的格式:{keys:[1,2,3...], action: function(player, media){...}}/src/js/player.js可查看整个列表
durationnumber-1用于检测媒体持续时间变化的起始点
timeAndDurationSeparatorstring<span> &#124; </span>当前时间和正在播放的媒体总持续时间之间的分隔符
hideVolumeOnTouchDevicesbooleantrue触摸设备上有不同的方式控制音量,设为true可隐藏不需要的音量控制
enableProgressTooltipbooleantrue是否启用在进度条中显示时间的工具提示
useSmoothHoverbooleantrue在悬停进度条时是否启用平滑行为
forceLivebooleanfalse如果设置为trueLive Broadcast消息将会显示,进度条将会隐藏,无论duration是否有效
audioVolumestringhorizontal音量滑块在音频元素上的呈现方式,分horizontalvertical
videoVolumestringvertical音量滑块在视频元素上的呈现方式,分horizontalvertical
usePluginFullScreenbooleantrue在全屏模式下激活Pointer事件检测的标志
useFakeFullscreenbooleanfalse是否禁用移动设备上的原生全屏功能,并使用模拟的全屏模式
captionTextPreprocessorfunctionnot set显示标题文本之前对其进行预处理的选项。如果设置,函数接受标题文本并返回其预处理版本。如果没有设置,标题文本将按原样显示。
toggleCaptionsButtonWhenOnlyOnebooleanfalseIf true and we only have one track, change captions to toggle button
startLanguagestring(empty)Automatically turn on a <track> element. Note: Will not work when toggleCaptionsButtonWhenOnlyOne is set to true
slidesSelectorstring(empty)slides的选择器,可以是任何有效的JavaScript选择器(#id, .class, img等)
tracksTextstringnull关闭字幕按钮的标题
chaptersTextstringnull章节按钮的标题
muteTextstringnull静音按钮的标题
unmuteTextstringnull取消静音按钮的标题
allyVolumeControlTextstringnull辅助功能音量控制提示的标题
fullscreenTextstringnull全屏按钮的标题
playTextstringnull播放按钮的标题
pauseTextstringnull暂停按钮的标题

API

MediaElementPlayer是一个完整的视频和音频播放器,你也可以只使用MediaElement对象,它将<video><audio>替换为一个Flash播放器,该播放器可以模仿HTML MediaElement API的属性、方法和事件。

属性

属性描述GETSET
autoplay设置或返回音频/视频是否应该在加载后立即开始播放XX
buffered返回TimeRanges对象,表示音频/视频的缓冲部分X
controls设置或返回音频/视频是否应该显示控件(如播放/暂停等)XX
currentSrc返回当前音频/视频的URLX
currentTime设置或返回音频/视频中当前播放位置(秒)XX
duration返回当前音频/视频的长度(秒);要在不播放媒体的情况下确定,则必须设置preload="auto"X
ended返回音频/视频的播放是否已经结束X
error返回一个MediaError对象,表示音频/视频的错误状态X
loop设置或返回音频/视频结束后是否应该重新开始XX
muted设置或返回音频/视频是否静音XX
paused返回音频/视频是否暂停X
readyState返回音频/视频的当前就绪状态X
seeking返回用户当前是否在音频/视频中寻找X
src设置或返回音频/视频元素的当前源XX
volume设置或返回音频/视频的音量XX

方法

方法描述
load()重新加载音频/视频元素;此外,它还用于在更改源或其他设置后更新音频/视频元素
play()开始播放音频/视频
pause()暂停当前播放的音频或视频
stop()仅在MediaElementPlayer中呈现以支持Flash RTMP流媒体。对于其他场景,等效的方法是pause
remove()销毁视频/音频播放器实例
canPlayType(type)确定当前播放器是否可以播放特定的媒体类型;type是MIME类型,每个渲染器都有一个它们的白名单
setPlayerSize (width, height)设置播放器的widthheight,也需考虑stretching配置
setPoster (url)在播放器的布局层中添加一个带有封面url的image标签用于展示封面;传递空字符串可以清除封面
setMuted (muted)设置静音或取消静音,muted 为布尔值
setCurrentTime (time)为播放器设置新的当前时间,time可以是整数或浮点数,如果是负数,将从0开始
getCurrentTime ()获取媒体的当前播放时间
setVolume (volume)设置播放音量,volume01之间的数值
getVolume ()获取媒体的当前播放音量
setSrc (src)为播放器设置一个新的URL
getSrc ()获取媒体的播放URL

事件

事件触发条件
loadedmetadata元数据加载完毕
progress浏览器正在获取媒体数据
timeupdate播放时间发生改变
seeking寻找中
seeked寻找完毕
canplay一个文件已经准备好开始播放(当它有足够的缓冲可以开始播放时)
playplay()和autoplay开始播放时触发
playing媒体已经开始播放
pause媒体暂停时触发
ended媒体播放结束时触发
volumechange音量改变时触发
captionschange检测到字幕变化

工具

所有工具方法都可通过 mejs.Utils.{name} 访问.

DOM

方法描述
offset(element)获取elementtopleft坐标
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: nonevisibility: 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 的标准扩展

时间格式化

MethodDescription
secondsToTimeCode(time, forceHours, showFrameCount, fps, secondsDecimalLength)time 格式化为“00:00:00”的格式,如果 forceHours 设置为 true,则始终显示小时数,如果 showFrameCounttrue,则显示帧计数。此外,可以指定每秒帧数(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()
1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

4.2.16

4 years ago