eplayer

yisar更新放缓

基于 Web Components 的 HTML5 视频播放器,用 Shadow DOM 隔离样式,支持 HLS 播放,方便在任意网页里嵌入一个样式可控、面向未来的播放器。

:crystal_ball: A web-component html5 video player facing future

暂无版本283star28fork同步于 2026-11-07 07:33 UTC

怎么上手

由 README 提炼,执行前请确认
<script src="https://unpkg.com/@webcomponents/webcomponentsjs"></script>
<script type="module">
  import Eplayer from 'https://unpkg.com/eplayer?module'
  customElements.define('e-player', Eplayer)
</script>
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

基于 Web Component 的 HTML5 视频播放器,用 e-player 标签替代原生 video

基于 Web Components 的 HTML5 视频播放器,用 Shadow DOM 隔离样式,支持 HLS 播放,方便在任意网页里嵌入一个样式可控、面向未来的播放器。

核心能力

  • 用 e-player 自定义元素替换原生 video 标签
  • 通过 CSS 变量穿透 shadow-dom 定制主题色与进度条
  • 支持注册插件在右击菜单中增加自定义选项
  • 原生支持 mp4 和 mkv,引入 hls.js 后可播放 m3u8
  • 提供 Vue、React、Angular 等框架的接入说明

容易踩的坑

需先引入 @webcomponents/webcomponentsjs polyfill 才能兼容;播放 m3u8 需额外引入 hls.js;customElement 只能注册一次,Vue 需配置 ignoredElements 忽略 e-player;WAP 端官方建议改用原生播放器。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    eplayer NPM version NPM downloads

    :dart: A web-components html5 video player facing future.

    who use eplayer?

    eplayer.js.org - demo

    clicli - C 站

    Contributors

    感谢大家的 pr,阿里嘎多!

    Use

    1. ep 基于 web-component,为了兼容,需要事先引入 polyfill
    <script src="https://unpkg.com/@webcomponents/webcomponentsjs"></script>
    
    1. 插入 e-player 标签,没错,只需要将平时用的 video 换成 e-player 即可
    <e-player src="./001.mp4"></e-player>
    

    type 属性可选,默认为 mp4,支持 hls 和 flv

    1. 注册 customElement,注意 type=module,使用 es6 的 import
    <script type="module">
      import Eplayer from 'https://unpkg.com/eplayer?module'
      //注册 customElement
      customElements.define('e-player', Eplayer)
    </script>
    
    1. 可选定制 css,用于穿透 shadow-dom 预留的默认样式
    e-player {
      /* 主题色 默认为 clicli 同款基佬紫*/
      --theme: #00fff6;
      /* 进度条底色 一般不用设置 */
      --progress: rgba(255, 255, 255, 0.3);
      /* 进度条偏移颜色 一般不用设置 */
      --buffer: rgba(255, 255, 255, 0.6);
      /* 图标颜色 一般不用设置 */
      --icons: rgba(255, 255, 255, 0.6);
    }
    
    1. 可选定制插件,会在右击菜单中出现一个选项,触发点击事件
    Eplayer.use('github源码', ep => {
      // ep 为 shdow-root 元素
      window.location.href = 'https://github.com/132yse/eplayer'
    })
    
    hls

    原生支持 mp4 和 mkv ,如果需要支持 m3u8,需要先引入 hls.js

    <script src="https://unpkg.com/hls.js"></script>
    

    Npm

    yarn add eplayer -S
    

    同样的注册 customElement,但是注意,customElement 只能注册一次,然后还没完,往下看:

    omim

    omim 是腾讯前端框架 omi 的组件库分支,eplayer 已经集成进去

    戳我戳我

    Vue

    vue 默认是不支持 web-components 的,它无法主动判断含有-的是 vue 组件还是 web 组件

    所以需要手动配置,忽略掉e-player

    Vue.config.ignoredElements = [
      'e-player'
    ]
    

    然后,同样需要引入上面的几个文件,然后 bind 一下 src 和 type

    <e-player :src="url" :type="type"></e-player>
    

    可以封装成 vue 组件来使用:vue-web-components-wrapper

    React / Fre

    react 直接支持 customElement,直接在 render 函数中e-player标签

    比如,下面这个 fre 的粒子

    function EPlayer({ src, type }) {
      const [url, setUrl] = useState(0)
      useEffect(() => {
        fetch(`https://jx.clicli.us/jx?url=${src}@dogecloud`)
          .then(res => res.json())
          .then(data => {
            setUrl(data.url)
          })
      }, [])
      return <e-player src={url} type={type} />
    }
    

    完整代码在这里:fre-eplayer

    Angular

    在 angular.json 中添加 webcomponentsjs 和 hls.js

    ...
    "scripts": [
      "node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js",
      "node_modules/hls.js/dist/hls.min.js"
    ]
    ...
    

    在 app.component.ts 中引入 eplayer

    import { Component, OnInit } from "@angular/core";
    import Eplayer from "eplayer";
    
    @Component({
      selector: "app-root",
      templateUrl: "./app.component.html",
      styleUrls: ["./app.component.scss"],
    })
    export class AppComponent implements OnInit {
      ngOnInit(): void {
        customElements.define("e-player", Eplayer);
      }
    }
    

    在需要使用 eplayer 的模块中启用自定义元素的支持

    import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from "@angular/core";
    import { CommonModule } from "@angular/common";
    import { VideoComponent } from "./video.component";
    
    @NgModule({
      declarations: [VideoComponent],
      imports: [CommonModule],
      schemas: [CUSTOM_ELEMENTS_SCHEMA],
    })
    export class VideoModule {}
    

    在相应的 html 文件中对 src 和 type 绑定

    <e-player [attr.src]="src" [attr.type]="type"></e-player>
    

    完整项目示例: @cliclitv/pwa

    ssr

    ssr 服务端没有 web-components 的 API,通常 web-components 的 ssr 都会通过一些库去模拟这些 API

    eplayer 不推荐这么做,请直接和正常的 html 引入方式一样,引入 cdn

    WAP

    WAP 端建议使用原生播放器,国产浏览器太乱了,没得兼容,同时建议往 APP 上引流

    Screenshot