npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

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

参数 | 类型 | 默认值 | 描述 ------ | --------- | ------- | -------- 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, audioiframe标签);如果使用 html5medianode基本上是一样的) 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. MediaElementMediaElementPlayer的成功和错误回调均可用,但是,在使用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-widthmax-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> &#124; </span> | 当前时间和正在播放的媒体总持续时间之间的分隔符 hideVolumeOnTouchDevices | boolean | true | 触摸设备上有不同的方式控制音量,设为true可隐藏不需要的音量控制 enableProgressTooltip | boolean | true | 是否启用在进度条中显示时间的工具提示 useSmoothHover | boolean | true | 在悬停进度条时是否启用平滑行为 forceLive | boolean | false | 如果设置为trueLive Broadcast消息将会显示,进度条将会隐藏,无论duration是否有效 audioVolume | string | horizontal | 音量滑块在音频元素上的呈现方式,分horizontalvertical videoVolume | string | vertical | 音量滑块在视频元素上的呈现方式,分horizontalvertical 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) |设置播放器的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 | 一个文件已经准备好开始播放(当它有足够的缓冲可以开始播放时) play | play()和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 的标准扩展

时间格式化

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