Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@lin-media/player

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@lin-media/player

player

  • 2.1.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

播放器

安装

npm i @lin-media/player

初始化

import MediaPlayer from "@lin-media/player";

const player = new MediaPlayer({
  // 容器
  el: ".container",
  // 视频列表
  videoList: [
    {
      label: "标清",
      url: "http://127.0.0.1/demo.mp4"
    },
    {
      label: "高清",
      url: "http://127.0.0.1/demo.mp4",
      // 默认播放这个视频,否则默认为第一个
      default: true
    }
  ]
});

参数

参数说明类型可选值默认值
el播放容器String,HTMLElement
videoList视频播放列表,格式见下方Array
speedList倍数列表,可选,格式见下方Array
plugins注册局部插件,可选Array
autoplay是否自动播放,可选Booleanfalse
muted是否静音,一般配合 autoplay 属性实现自动播放,可选Booleanfalse
customType自定义 esm,可选,,格式见下方Function
live是否为直播,可选Booleanfalse
crossorigin是否开启跨域,可选Booleantrue
preload视频预加载,可选Stringnone,metadata,autoauto
poster视频封面,可选String
controls播放器控件是否显示,可选,详细见下方boolean,ControlsObjfalse,ControlsObjControlsObj
lang使用的语言Stringzh,enzh
customLanguage自定义语言包Object

videoList 格式

字段说明类型
label清晰度文本String
url播放地址String
default是否默认播放,可选,false 时默认播放第一个Boolean

speedList 格式

字段说明类型
label倍数文本String
value倍数值,可选值 0-2Number
default默认倍数,可选,false 时默认第一个Boolean

customType 参数

字段说明类型
videoElementvideo 标签HTMLVideoElement
optionsvideoList 列表项Object

controls 参数格式

注意:

controls 值为 false 时,所有控件将不会显示。当 controls 值为一个对象时(即ControlsObj),可根据下方的字段来选择那些控件需要显示,那些不需要显示,其中 true 为显示控件, false 为隐藏控件。所有控件默认显示

字段说明类型默认值
VideoPlayButton播放按钮控件Booleantrue
VideoVolume音量控件Booleantrue
VideoLive直播提示控件Booleantrue
VideoSpeed倍速控件Booleantrue
VideoFullscreen全屏控件Booleantrue
VideoDefinition清晰度控件Booleantrue
VideoProgress进度条控件Booleantrue
VideoTip通知提示控件Booleantrue
VideoTime时间控件Booleantrue
VideoLoadingloading 控件Booleantrue
VideoFloatButton悬浮播放按钮控件Booleantrue
VideoMask视频遮罩层控件Booleantrue
VideoControls视频下方控制条Booleantrue
DomResizeObserver播放器DOM元素大小发生变化监听Booleantrue
ShortcutKey快捷键功能控件Booleantrue
VideoPlayer视频播放控件Booleantrue

事件

  • 自定义事件
事件名称说明回调参数
destroy播放器销毁时触发
switch_definition_start清晰度切换前触发
switch_definition_end清晰度切换后触发
enter_browser_screen浏览器进入全屏时触发
exit_browser_screen浏览器退出全屏时触发
enter_web_screen网页进入全屏时触发
exit_web_screen网页退出全屏时触发
show_controls控制条显示时触发
hide_controls控制条隐藏时触发
resize播放器大小发生变化时触发
keyboard_right按下键盘 → 键时触发
keyboard_left按下键盘 ← 键时触发
keyboard_up按下键盘 ↑ 键时触发
keyboard_down按下键盘 ↓ 键时触发
keyboard_space按下键盘 空格 键时触发
picture_in_picture_window_resize画中画窗口发生变化时触发
  • 原生 video 标签事件
事件名称说明回调参数
abort发生中断时触发event
canplay视频能够播放,但可能因缓冲停止时触发event
canplaythrough视频能够播放,并且无需因缓冲而停止,ie 上触发不了改事件event
durationchange视频总时长发生变化时触发event
emptied媒介资源元素突然为空时(网络错误、加载错误等)时触发event
ended视频播放结束时触发event
error视频加载发生错误时触发event
loadeddata加载数据时触发event
loadedmetadata媒介元素的持续时间以及其他媒介数据已加载时触发event
loadstart开始加载数据时触发event
pause视频暂停触发event
play视频播放时触发event
playing视频已经开始播放时触发event
progress获取数据(缓冲数据)时触发event
ratechange视频倍数发生变化时触发event
seeked跳转到指定时间之后触发,一般是用户拖拽进度条时触发的event
seeking正在跳转到指定的时间时触发event
stalled取回媒介数据过程中(延迟)存在错误时触发event
suspend浏览器已在取媒介数据但在取回整个媒介文件之前停止时触发event
timeupdate播放位置发生变化时触发event
volumechange视频音量发生变化时触发event
waiting正在播放,但是因为缓冲而卡顿时触发event
enterpictureinpicture进入画中画时触发event
leavepictureinpicture退出画中画时触发event

API

实例方法

  • player.$on(eventName: string, handler: Function) : 事件监听

  • player.$emit(eventName: string, ...data: any) : 触发事件

  • player.$once(eventName: string, handler: Function) : 事件监听,只触发一次

  • player.$off(eventName: string, handler?: Function) : 取消事件监听

  • player.play() : 播放视频

  • player.pause() : 暂停视频

  • player.seek(time: number) : 跳转到指定时间

  • player.setNotice(text: string, time?: number) : 显示通知

  • player.switchDefinition(index: number) : 切换清晰度

  • player.setSpeed(playbackRate: number) : 设置倍数

  • player.setVolume(volume: number) : 设置音量

  • player.toggle() : 切换播放状态

  • player.requestFullscreen(type: 'web'|'browser') : 进入网页/浏览器全屏

  • player.cancelFullscreen(type: 'web'|'browser') : 退出网页/浏览器全屏

  • player.showControls() : 显示下方控制条

  • player.hideControls() : 隐藏下方控制条

  • player.toggleControls() : 切换下方控制条显示/隐藏状态

  • player.destroy() : 销毁播放器

  • player.requestPictureInPicture() : 进入画中画

  • player.exitPictureInPicture() : 退出画中画

实例属性

  • player.videoElement : 原生 video 标签

  • player.paused : 视频是否处于暂停状态

  • player.currentTime : 视频当前时间

  • player.duration : 视频总时长

  • player.volume : 当前音量

静态方法

  • MediaPlayer.useLang(lang:Object) : 自定义语言包,会跟默认的语言包进行合并
MediaPlayer.useLang({
  Player: {
    live: "直播",
    goBack: "快退{time}秒",
    fastForward: "快进{time}秒",
    volume: "音量{volume}",
    switch: "已经切换至{quality}",
    invalidDefinition: "无效清晰度"
  }
  // 其他插件语言包
});
  • MediaPlayer.setLang(lang:string) : 设置使用何种语言,zh/en,默认 zh

  • MediaPlayer.use(ctor: Function) : 注册全局插件

静态属性

  • MediaPlayer.PlayerEvents : 播放器自定义事件

  • MediaPlayer.VideoEvents : video 标签事件

  • MediaPlayer.globalConfig : 默认的全局配置项,播放器在初始化的时候,会将用户传入的配置项跟全局的配置项进行合并,形成一个新的配置项

插件

播放器内置了插件功能,可自己实现一些奇奇怪怪的功能,比如自定义进度条提示点,截图,弹幕等等。

插件分为全局插件和局部插件,使用全局插件时,每个播放器实例都会具备全局插件的功能。使用局部插件时,只有当前播放器实例才会存在局部插件的功能。

全局插件是通过MediaPlayer.use(ctor: Function)进行注册的

局部插件是通过 options 参数中的plugins字段进行注册的

每一个插件都需要是一个构造器函数(类),并且需要包含pluginName静态属性,这是为了外部可以通过player.$plugins[pluginName]访问到插件实例

构造器函数(类)会接受到三个参数:

  • player:播放器实例,即new MediaPlayer(),你可以使用该实例提供的任意方法
  • el:整个播放器的 dom 元素,当你需要获取某个元素时,请使用el.querySelector(),而不是document.querySelector()

插件代码示例:

Test 插件

import MediaPlayer from "@lin-media/player";

class Test {
  // 提供一个pluginName静态属性
  static pluginName = "Test";
  el = null;
  player = null;

  constructor(player,el) {
    // 保存接受到的两个参数
    this.el = el;
    this.player = player;
    // 往播放器实例中添加一个sleep方法
    Object.defineProperty(player,'sleep',{
      get(){
        console.log("sleep");
      }
    })
    // 开始实现其他的功能
    this.init();
  }
  // 往播放器上面追加一个悬浮按钮,点击的时候发射click自定义事件,并对播放状态进行切换
  init() {
    const div = document.createElement("div");
    div.innerHTML = "切换播放状态";
    div.addEventListener("click", () => {
      // 通过发布订阅模式,实现事件的监听和发射
      this.player.$emit("test-click");
      // 切换播放器的播放状态
      this.player.toggle();
    });
    // 添加到播放器中
    this.el.appendChild(div);
  }
}

使用插件:

import MediaPlayer from "@lin-media/player";

// 全局注册插件
MediaPlayer.use(Test);

const player = new MediaPlayer({
  // ...
  // 或者通过局部注册
  // plugins:[MediaPlayer]
});

// Test插件发射出来的事件
player.$on("test-click", () => {
  console.log("test-click");
});
// Test插件在原型上面挂载的方法
player.sleep();
// 访问Test插件的实例
player.$plugins.Test;

Keywords

FAQs

Package last updated on 05 Apr 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc