零部署成本:单文件 XGPlayer 自适应播放器方案(支持 M3U8 + 西瓜视频内核)

零部署成本:单文件 XGPlayer 自适应播放器方案(支持 M3U8 + 西瓜视频内核)

_

零部署成本:单文件 XGPlayer 自适应播放器方案(支持 M3U8 + 西瓜视频内核)

如果你需要一个支持 M3U8 格式西瓜视频内核零依赖部署的视频播放器,基于 XGPlayer + HLS 插件的方案是一个高性能的选择。它自带画中画、截图、下载、键盘快捷键等功能,适合作为资源站的通用播放方案。

在线演示

点击预览实际效果:
👉 XGPlayer 自适应播放器演示

该演示使用开源测试视频流,支持画中画、截图、倍速播放、键盘快捷键等功能。

为什么选择 XGPlayer?

  • 西瓜视频内核:字节跳动出品,性能优化到位
  • HLS 原生支持:通过 xgplayer-hls.js 插件完美支持 M3U8
  • 画中画模式:支持 PiP(Picture-in-Picture)小窗播放
  • 视频截图:一键截取当前画面
  • 下载功能:支持视频下载按钮
  • 键盘快捷键:支持方向键控制、倍速切换等操作
  • 自适应全屏:CSS 强制 100% 视口宽高,无边距黑边
  • 零依赖部署:单 HTML 文件,所有资源通过 CDN 加载

完整代码

将以下代码保存为 index.html,上传到服务器任意目录即可使用:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,minimal-ui">
  <meta name="referrer" content="no-referrer">
  <title>xgplayer</title>
  <style type="text/css">
    html, body {
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
      overflow: hidden;
      background: #000;
    }
    #mse {
      width: 100vw;
      height: 100vh;
    }
    /* 强制 video 元素填满容器 */
    #mse video {
      width: 100% !important;
      height: 100% !important;
      object-fit: contain; /* 保持比例 */
      background: #000;
    }
  </style>
</head>
<body>
  <div id="mse"></div>

  <!-- 远程 CDN 资源 -->
  <script src="https://cdn.jsdelivr.net/npm/xgplayer@3.0.10/dist/index.min.js" charset="utf-8"></script>
  <script src="https://cdn.jsdelivr.net/npm/xgplayer-hls.js@3.0.10/dist/index.min.js" charset="utf-8"></script>

  <script>
    // 仅从 URL 参数获取视频地址,无默认值
    const urlParams = new URLSearchParams(window.location.search);
    const videoUrl = urlParams.get('url');

    if (videoUrl) {
      let player = new HlsJsPlayer({
        "id": "mse",
        "url": videoUrl,
        "playsinline": true,
        "whitelist": [""],
        "playbackRate": [null],
        "download": true,
        "pip": true,
        "screenShot": true,
        "keyShortcut": "on",
        "closeVideoClick": false,
        "closeVideoDblclick": false,
        "closeVideoTouch": false,
        "width": "100%",
        "height": "100%",
        "fluid": false
      });

      window.addEventListener('resize', () => {
        if (player && typeof player.resize === 'function') {
          player.resize();
        }
      });
    } else {
      document.body.innerHTML = '<h1 style="color:#fff;text-align:center;margin-top:20%">缺少 ?url= 参数</h1>';
    }
  </script>
</body>
</html>

使用方法

基础播放(支持 m3u8)

将视频地址通过 URL 参数传入:

https://你的域名.com/player.html?url=https://example.com/video.m3u8

嵌入到博客文章

在其他页面中通过 iframe 嵌入:

<iframe src="https://你的域名.com/player.html?url=视频地址" 
        width="100%" 
        height="500" 
        frameborder="0" 
        allowfullscreen>
</iframe>

核心特性解析

1. 格式支持

XGPlayer 通过插件支持多种视频格式:

  • M3U8 (HLS):通过 xgplayer-hls.js 插件支持
  • MP4:浏览器原生播放
  • FLV/Dash:可通过对应插件扩展

2. 内置功能

功能配置项说明
画中画pip: true支持 PiP 小窗播放模式
视频截图screenShot: true一键截取当前画面
下载按钮download: true显示视频下载入口
键盘快捷键keyShortcut: "on"开启方向键等快捷键
内联播放playsinline: trueiOS 微信内不强制全屏

3. 交互控制

  • 关闭点击暂停closeVideoClick: false 防止误触暂停
  • 关闭双击全屏closeVideoDblclick: false 防止误触全屏
  • 关闭触摸事件closeVideoTouch: false 防止移动端误触

4. 自适应布局

  • 视口单位100vw + 100vh 适配各种屏幕
  • Object-fitcontain 保持视频比例,黑边填充
  • Resize 监听:窗口变化自动调用 player.resize()

注意事项

  • HTTPS 要求:播放页和视频源必须同为 HTTPS,混用会被浏览器拦截
  • CORS 限制:视频服务器需允许跨域访问(Access-Control-Allow-Origin: *
  • CDN 可用性:如果 jsdelivr 访问慢,可将 CDN 地址替换为:
    • https://unpkg.com/xgplayer@3.0.10/dist/index.min.js
    • 或下载到本地使用相对路径
  • HLS 插件版本:确保 xgplayer 和 xgplayer-hls.js 版本一致

高级配置(可选)

如需更多功能,可在初始化时扩展配置:

let player = new HlsJsPlayer({
    "id": "mse",
    "url": videoUrl,
    "playsinline": true,
    "whitelist": [""],
    "playbackRate": [0.5, 0.75, 1, 1.25, 1.5, 2],  // 倍速档位
    "download": true,
    "pip": true,
    "screenShot": true,
    "keyShortcut": "on",
    "closeVideoClick": false,
    "closeVideoDblclick": false,
    "closeVideoTouch": false,
    "width": "100%",
    "height": "100%",
    "fluid": false,
    // 新增配置
    "autoplay": true,           // 自动播放
    "muted": true,              // 默认静音(解决自动播放限制)
    "poster": "封面图地址",      // 视频封面
    "loop": false,              // 循环播放
    "preload": "auto",          // 预加载策略
    "hlsOpts": {                // HLS 专属配置
        "maxBufferLength": 30,
        "maxMaxBufferLength": 60
    }
});

总结

这是一个比 Video.js 更现代化的替代方案,特别适合需要画中画截图功能的场景。XGPlayer 的西瓜视频内核让它在移动端表现优异,而完善的插件体系支持各种高级功能。配合单文件部署,适合作为个人资源站的通用播放器。

零部署成本:单文件 Video.js 自适应播放器方案(支持 M3U8/FLV 双格式 + 键盘快捷键) 2026-02-12