chimee

Build StatusCoverage Statusnpmdependency StatusdevDependency Statustested with jestjest

English | 中文

简介

Chimee 由奇舞团研制的 h5 播放器,它支持 mp4、m3u8、flv 等多种格式。通过插件式开发,能满足业务方快速迭代、灰度发布等要求。让开发者能够轻松快捷地完成视频场景的开发。

特点

Chimee 首先是一个视频播放器

  • 它让我们可以播放 mp4、m3u8、flv 等多种格式的视频流。
  • 它帮我们解决大部分的兼容性问题,能够解决包括全屏、自动播放、内联播放等常见视频需求。 其次,Chimee 是一个基于 video 设计的组件化框架

  • 它容许我们使用插件分割业务上与视频相关的功能。

  • 对于每个组件来说,它们的编写都相当于直接操作 video 元素,简便快捷。
  • 它会梳理好插件间的层级关系,让我们免于被 z-index 困扰。
  • 它提供了如透明插件、穿透插件、内外层插件等多种模式,能够覆盖多种交互情景。
  • 它提供了多种便利的方式让我们进行组件间的沟通。
  • 它允许我们定义高优先级插件,从而让我们轻松完成业务上的广告需求。
  • 它支持异步组件。

安装

npm

  1. npm install --save chimee

cdn

你可以前往 https://cdnjs.com/libraries/chimee 获取各个版本的 cdn 地址。

如果你在国内,你可以使用 https://www.jsdelivr.com/package/npm/chimee 获取。

用法

你可以直接使用 chimee。

假设你的页面中有一 idwrapperdiv

  1. <body>
  2. <div id="wrapper">
  3. </div>
  4. </body>

那么你可以直接在其上建立 chimee 实例。

  1. import Chimee from 'chimee';
  2. const chimee = new Chimee('#wrapper');
  3. chimee.on('play', () => console.log('play!!'));
  4. chimee.load('http://cdn.toxicjohann.com/lostStar.mp4');
  5. chimee.play(); // play!!

有的时候我们可能需要进行一些定制,你可以传入相应参数。

  1. import Chimee from 'chimee';
  2. const chimee = new Chimee({
  3. wrapper: '#wrapper',
  4. src: 'http://cdn.toxicjohann.com/lostStar.mp4',
  5. controls: true,
  6. autoplay: true,
  7. });

如果需要播放 flv 或者 hls 格式,请传入解码器,具体参数请查阅此处

  1. import Chimee from 'chimee';
  2. import flv from 'chimee-kernel-flv';
  3. import hls from 'chimee-kernel-hls';
  4. const chimee = new Chimee({
  5. wrapper: '#wrapper',
  6. src: 'http://cdn.toxicjohann.com/lostStar.mp4',
  7. controls: true,
  8. autoplay: true,
  9. kernels: {
  10. flv,
  11. hls
  12. }
  13. });
  14. chimee.play();

如果你想了解更多,请点击此处

如果你直接使用 chimee 的话,最好添加以下样式。

  1. container {
  2. position: relative;
  3. display: block;
  4. width: 100%;
  5. height: 100%;
  6. }
  7. video {
  8. width: 100%;
  9. height: 100%;
  10. display: block;
  11. background-color: #000;
  12. }
  13. video:focus,
  14. video:active {
  15. outline: none;
  16. }

在没有配置任何皮肤插件的时候,chimee 会使用浏览器原生的皮肤。你可以尝试使用我们的皮肤插件。

  1. import popup from 'chimee-plugin-popup';
  2. import Chimee from 'chimee';
  3. Chimee.install();
  4. const chimee = new Chimee({
  5. wrapper: '#wrapper',
  6. src: 'http://cdn.toxicjohann.com/lostStar.mp4',
  7. plugin: [popup.name],
  8. controls: false,
  9. autoplay: true
  10. });

如果你想了解更多关于 chimee 插件的知识,请点击此处

可能你并不是太关心 chimee 是怎么运行的,你只是需要一个封装好的播放器。那么你可以直接下载 chimee-player。里面已经有基础 ui 和需要用的插件。

  1. import ChimeePlayer from 'chimee-player';
  2. const chimee = new ChimeePlayer({
  3. wrapper: '#wrapper',
  4. src: 'http://cdn.toxicjohann.com/lostStar.mp4',
  5. controls: false,
  6. autoplay: true
  7. });

如果你使用的是移动端,那么请使用为移动端设计的 chimee-mobile-player。里面有移动端常用的基础 ui 与插件。

  1. import ChimeeMobilePlayer from 'chimee-mobile-player';
  2. const player = new ChimeeMobilePlayer({
  3. wrapper: '#wrapper', // video dom容器
  4. src: 'http://cdn.toxicjohann.com/lostStar.mp4',
  5. autoplay: true,
  6. controls: true,
  7. playsInline: true,
  8. preload: true,
  9. x5VideoPlayerFullscreen: true,
  10. x5VideoOrientation: true,
  11. xWebkitAirplay: true,
  12. muted: true
  13. });

文档

文档分为以下若干部分:

指南

设计理念

进阶

API

不同的构建版本

你会发现我们有四种构建的版本。

名称种类用处是否需要定义环境
index.jscommonjsCommon js, 常用于 Webpack 1.
index.mjsesmodulein es module, 常用于 webpack 2 和 rollup
index.browser.jsumd常直接用于浏览器否,构建为 development 环境
index.min.jsumd常直接用于浏览器否,构建为 production 环境
index.esm.jsesmodule用于浏览器使用 module 的模式引入否,构建为 development 环境

Development vs. Production

开发环境/生产环境模式是硬编码的 UMD 构建:开发环境下不压缩代码,生产环境下压缩代码。

CommonJS 和 ES Module 构建是用于打包工具的,因此我们不提供压缩后的版本。你有必要在打最终包的时候压缩它们。

CommonJS 和 ES Module 构建同时保留里原始的 process.env.NODE_ENV 检测,以决定它们应该运行在什么模式下。你应该使用适当的打包工具配置来替换它们的环境变量以便控制 Vue 所运行的模式。把 process.env.NODE_ENV 替换为字符串字面量同样可以让 UglifyJS 之类的压缩工具完全丢掉仅供开发环境的代码段,减少最终的文件尺寸。

Webpack

使用 Webpack 的 DefinePlugin:

  1. var webpack = require('webpack')
  2. module.exports = {
  3. // ...
  4. plugins: [
  5. // ...
  6. new webpack.DefinePlugin({
  7. 'process.env': {
  8. NODE_ENV: JSON.stringify('production')
  9. }
  10. })
  11. ]
  12. }

Rollup

使用 rollup-plugin-replace:

  1. const replace = require('rollup-plugin-replace')
  2. rollup({
  3. // ...
  4. plugins: [
  5. replace({
  6. 'process.env.NODE_ENV': JSON.stringify('production')
  7. })
  8. ]
  9. }).then(...)

Browserify

贡献

克隆本项目

  1. npm install
  2. npm start

然后打开如下网页 http://127.0.0.1:10001/demo/base/index.html

你可以选择其他你想要的 demo

更新日志

请点击更新日志

证书

MIT