0.4.1 • Published 4 years ago

@rplayer/ad v0.4.1

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

(WIP) RPlayer

npm version

美观、可定制的响应式播放器 开发中...

npm.io

兼容

目前兼容 IE11, Edge, Chrome, FireFox, Safari 等现代浏览器

安装

npm i -S rplayer

或者使用 CDN

<script src="https://unpkg.com/rplayer@latest/dist/index.js"></script>

使用

import RPlayer from 'rplayer'

const player = new RPlayer({
  video: {
    src: 'http://upload.wikimedia.org/wikipedia/commons/transcoded/c/c0/Big_Buck_Bunny_4K.webm/Big_Buck_Bunny_4K.webm.480p.vp9.webm',
    crossOrigin: 'anonymous'
  },
  settings: [
    { label: '自动播放' },
    { label: '画质', options: [{ label: '720p' }] },
  ],
  subtitle: {
    captions: [{
      label: 'English',
      src: 'http://127.0.0.1:8001/friday.vtt'
    },{
      label: '中文',
      src: 'http://127.0.0.1:8001/friday-zh.vtt'
    }]
  }
})

player.mount()
// 不设置 el 参数或 mount 方法参数时,将挂载到 document.body

配置

interface RPlayerOptions {
  media?: string | HTMLVideoElement; // 视频元素或 .video #video 等选择器字符串
  el?: string | HTMLElement; // 要挂载到的元素
  video?: HTMLVideoElement & { src?: string | string[] }; // 视频元素的属性
  settings?: (SelectOpts | SwitchOpts)[]; // 自定义设置项
  preset?: OptionPreset; // 预设
  shortcut?: ShortcutOpts; // 快捷键
  lang?: string; // 语言,默认用户当前浏览器使用的语言。
  thumbnail?: ThumbnailOpts; // 预览缩略图
  contextMenu?: ContextMenuOpts; // 右键菜单
  storage?: StorageOpts; // 持久化
  subtitle?: SubtitleOpts; // 字幕
  trays?: TrayOpts[]; // 底部控制器按钮
}

interface OptionPreset {
  playbackRate?:
    | boolean
    | { position?: number; steps?: { label?: string; value?: number }[] };
  // 默认会显示 0.5 ~ 2.0 的播放速度在设置菜单中
  version?: boolean; // 是否在右键菜单显示版本信息
}

interface SelectOpts {
  label: string;
  options: SelectOption[];
  checked?: number;
  onChange?: (o: SelectOption, update: () => void) => any;
  // 调用 update 将更新 UI
}

interface SelectOption {
  label: string;
  selectedLabel?: string;
  [key: string]: any;
}

interface SwitchOpts {
  label: string;
  checked?: false;
  onChange?: (v: boolean, next: () => void) => any;
}

interface OptionPreset {
  playbackRate?:
    | boolean
    | {
        position?: number;
        checked?: number;
        steps?: { label?: string; value?: number }[];
      };
  version?: boolean;
}

interface Shortcut {
  enable?: boolean; // 是否启用
  time?: number; // 每次递增递减的时间,默认 10s
  volume?: number; // 每次递增递减的音量,默认 0.1
  global?: boolean; // 是否捕获全局键盘事件,默认只捕获播放器的键盘事件
}

interface ThumbnailOpts {
  startTime?: number; // 缩略图的开始时间,默认 0
  gapSec?: number; // 每张缩略图的间隔时长,默认 10s
  col?: number; // 每张图片的有几列缩略图
  row?: number; // 每张图片的有几行缩略图
  width?: number; // 缩略图的宽度
  height?: number; // 缩略图的高度
  images?: string[]; // 所有的图片
  handler?: (seconds: number) => { x: number; y: number; url: string; }; // 手动控制缩略图显示,x, y 表示 background position 为正数
}

interface ContextMenuOpts {
  toggle?: boolean; // 是否和浏览器菜单交替显示
  enable?: boolean; // 是否启用右键菜单
  items?: ContextMenuItem[];
}

interface ContextMenuItem {
  icon?: string | Element; // 菜单项的 icon
  label?: string | Element; // 菜单项的值
  checked?: boolean; // 是否选中
  onClick?: (checked: boolean, update: () => void, ev: MouseEvent) => any;
  // update 用来更新 UI
}

interface StorageOpts {
  enable?: boolean; // 是否开启持久化
  key?: string; // localStorage 的 key,默认 rplayer
}

interface SubtitleOpts {
  style?: Partial<CSSStyleDeclaration>;
  checked?: number;
  captions: HTMLTrackElement[];
}

export interface TrayOpts {
  text?: string;
  icon?: string | Element;
  pos?: number;
  init?: (tray: Tray, player: RPlayer) => any;
  onClick?: (ev: MouseEvent) => any;
}

主题

主题色使用 css 变量,可以通过覆盖来自定义主题色。IE11 可以使用这个 polyfill

:root {
  --rplayer-primary: #448AFF;
  --rplayer-switch: #67cd67;
}

待完成

  • 移动版控件
  • 视频信息面板
  • 交互日志
  • 广告插件
  • 弹幕插件
0.4.1

4 years ago