Shaka Player 入门指南:从源码构建、环境准备到测试运行全流程
2026/9/16 17:57:20 网站建设 项目流程

Shaka Player 入门指南:从源码构建、环境准备到测试运行全流程

【免费下载链接】shaka-playerJavaScript player library / DASH & HLS client / MSE-EME player项目地址: https://gitcode.com/GitHub_Trending/sh/shaka-player

Shaka Player 是一个开源的自适应媒体流播放 JavaScript 库,可在浏览器中无插件播放 DASH 与 HLS,其实现建立在 MediaSource Extensions(MSE)与 Encrypted Media Extensions(EME)等开放 Web 标准之上,并支持 Media over QUIC(MoQ)。本指南以 docs/tutorials/welcome.md 为主线,完整讲解在本地获取源码、准备构建环境、编译库与生成文档、以及运行自动化测试的每一步,并结合作仓库内构建脚本源码,说明每个命令背后的实际行为与产物,帮助你建立从源码到可部署库的完整认知。

Shaka Player 是什么

Shaka Player 的定位是一个"部署前需要先编译"的库:官方提供的构建工具链(Closure Compiler、Closure Linter、JSDoc)随源码一同分发,你需要使用这些工具将源码编译为可分发的 bundle。这一点与其他直接提供未压缩源码的播放器库不同——本仓库根目录虽然存在shaka-player.uncompiled.jstransmuxer_worker.uncompiled.js,但它们供调试与开发使用,正式部署应使用dist/下编译出的产物。

值得注意的两个与编译直接相关的设计:

  • 如果你将 Shaka Player 集成到另一个基于 Closure 的项目中,构建过程会为 Shaka Player 自身生成 externs 文件(即dist/shaka-player.compiled.externs.js),供外部 Closure 工程引用;
  • 如果你通过 npm 安装 Shaka Player,包内携带的已经是编译后的源码,externs 也已一并生成,无需本地再执行编译。

构建环境前置条件

Shaka Player 支持在 Linux、Windows、Mac 三种操作系统上构建。要获取源码并编译库,需要以下工具:

工具最低版本用途
Gitv1.9+检出源码
Pythonv3.5+运行构建脚本(build/all.pybuild/test.py等均为 Python 3 脚本)
Java Runtime Environmentv21+运行 Closure Compiler
NodeJSv18+运行部分构建依赖(jsdoc、karma 等)
本地 Web 服务器(如 Apache)运行 demo 页面

其中"本地 Web 服务器"不是可选建议而是硬性要求:浏览器对file:///协议的 URL 有安全限制,demo 与测试页面必须通过 HTTP 提供。这一点在 docs/tutorials/basic-usage.md 的页面示例中同样隐含依赖。

前置条件的版本核对(以仓库为准)

关于版本号的精确性,可以对照仓库中的实际校验逻辑:

  • 当前 package.json 声明"engines": { "node": ">=18" },与文档要求的 NodeJS v18+ 一致;
  • build/install-linux-prereqs.sh 中通过正则v\(1[8-9]\|[2-9][0-9]\)检测已安装的 Node 是否为 v18–v19 或 v20+,不满足则走升级流程;该脚本安装的是zulu21-jre(Java 21 JRE),对应文档的 JRE v21+。

Ubuntu / Debian 一键安装脚本

如果你使用的是 Ubuntu 或 Debian 系发行版,可以运行仓库内自带的脚本快速安装上述前置依赖:

bash build/install-linux-prereqs.sh

(原文档中的一键命令是通过 curl 拉取远程脚本执行;在本仓库内该脚本即位于 build/install-linux-prereqs.sh,直接运行本地副本效果相同。)

结合 build/install-linux-prereqs.sh 源码,可以了解该脚本的实际行为与限制:

  • 会安装apache2curlextrepogitpython3,并通过extrepo enable zulu-openjdk+apt install zulu21-jre安装 Java 21 运行时;
  • Node 处理策略:若检测到 v18+ 直接跳过;若存在旧版本会询问是否卸载并重装;若系统源中 Node 低于 v18,则从 nodesource 安装 v18.x;
  • 不建议以 root 运行:脚本需要检测用户级安装的 Node(如 nvm),以 root 身份运行会破坏这一逻辑;
  • 支持的平台:官方测试覆盖 Ubuntu 22.04 LTS、Debian 11 (Bullseye) 及 gLinux;不支持 Ubuntu 18.04、Debian 10(无法获取新版 Java),也不支持 RHEL/CentOS 6/7(Python/Git 版本过低)。

对于其他操作系统或非 Debian 系发行版,仓库不提供详细安装说明或脚本,需要按上文链接手动安装各前置工具。

获取源码

git clone https://github.com/shaka-project/shaka-player.git cd shaka-player

仓库根目录即包含全部构建脚本(build/)、核心库源码(lib/)、UI 库(ui/)、测试(test/)、demo 应用(demo/)与文档(docs/)。

编译库并生成文档

在满足前置条件后,在仓库根目录执行:

python3 build/all.py

这是面向用户的统一构建入口。查看 build/all.py 源码可知它内部依次完成:生成本地化资源(localizations)→ 生成依赖图(build/gendeps.py)→ 运行代码检查(build/check.py)→ 生成 JSDoc 文档(build/docs.py)→ 编译ui/controls.lessdemo/demo.less→ 最后并行调用 build/build.py 完成各变体的 Closure 编译。

构建产物

构建完成后,dist/目录下将生成:

  • dist/shaka-player.compiled.js—— 编译后的完整 bundle(release 版)
  • dist/shaka-player.compiled.debug.js—— 调试 bundle
  • dist/shaka-player.compiled.externs.js—— 生成的 externs,供 Closure 工程引用
  • docs/api/index.html—— 生成的 API 文档

从 build/all.py 的源码可以进一步推断出python3 build/all.py的默认行为细节:

  • 构建变体:默认按experimentaluicompileddashhls五种名称并行构建;其中dash变体剔除 HLS/transmuxer/offline/cast/ads 等模块,hls变体剔除 DASH/offline 等模块,便于按需裁剪体积;
  • 模式:默认同时构建debugrelease两种模式,可用--debug--release限制;
  • 语言目标:默认同时输出 ECMASCRIPT5 与 ECMASCRIPT_2021(文件名带-es2021后缀)两种变体,可用--only-es5只输出 ES5;
  • 其他参数--fix自动修复风格问题,--force/-f强制重建,--locales指定编译进包的语言(默认值见build/generateLocalizations.py),--jobs/-j控制并行任务数(默认等于 CPU 核数);
  • 此外还会单独构建transmuxer-worker供 Worker 内转封装场景使用。

使用 Docker 编译

如果只想为其他项目编译导出,也可以选择在 Docker 容器中完成,避免污染本地环境:

docker build -t shaka-player-build build/docker docker run -v $(pwd):/usr/src --user $(id -u):$(id -g) shaka-player-build

第一条命令根据 build/docker 目录下的 Dockerfile 构建镜像,第二条将当前目录挂载到容器内/usr/src并执行默认构建命令,--user $(id -u):$(id -g)确保产物归属当前用户而非 root。

运行测试

测试依赖少数第三方工具,但这些工具会在运行测试时通过npm自动安装,不会全局安装任何东西。在仓库根目录执行:

./build/test.py

指定浏览器

可以通过--browsers参数指定运行测试的浏览器,支持逗号或空格分隔:

./build/test.py --browsers Opera # 或: ./build/test.py --browsers Chrome,Firefox,Edge

查看 build/test.py 源码,--browsers接受"逗号分隔或空格分隔"的混合列表(由_HandleMixedListsAction统一展开),并且:

  • 使用--browsers help可以列出当前平台上所有可用浏览器;
  • 使用--help可以查看完整的测试选项列表(包括日志、网络、浏览器启动等分组参数)。

测试脚本的进阶能力(源码可见)

从 build/test.py 的参数定义中还可以看到以下与浏览器相关的选项:

  • --exclude-browsers:从默认浏览器集合中排除若干浏览器;
  • --no-browsers:不主动启动浏览器,而是等待外部浏览器连接 Karma(适合远程调试与 Selenium 场景);
  • --headless:不打开浏览器窗口运行测试(需 Linux 与相应浏览器支持);
  • Karma 浏览器捕获超时可配置,Selenium grid 模式下默认超时放宽到 10 分钟(源码中SELENIUM_CAPTURE_TIMEOUT),避免排队导致的误杀。

测试用例按功能域组织在 test/ 目录下,例如test/player_unit.jstest/dash/test/hls/test/net/等,可在了解播放器行为时配合源码阅读。

构建产物的后续使用

编译完成后即可按 docs/tutorials/basic-usage.md 的指引,在 HTML 页面中通过<script src="dist/shaka-player.compiled.js">引入库,然后调用shaka.polyfill.installAll()shaka.Player.isBrowserSupported()player.attach(video)player.load(manifestUri)完成首个流的加载。

如果你希望继续深入学习,仓库内的教程序列提供了完整的进阶路线:错误处理见 docs/tutorials/errors.md,配置体系见 docs/tutorials/config.md,DRM 配置见 docs/tutorials/drm-config.md,UI 定制见 docs/tutorials/ui.md,全部教程索引位于 docs/tutorials/index.json。

小结与下一步

本指南覆盖了 Shaka Player 从环境准备、源码获取、编译构建到测试运行的完整流程。核心要点回顾:

  1. 环境先行:Git v1.9+ / Python v3.5+ / JRE v21+ / Node v18+ / 本地 Web 服务器,Ubuntu/Debian 可用bash build/install-linux-prereqs.sh一键安装;
  2. 一键构建python3 build/all.py产出编译 bundle、debug bundle、externs 与 API 文档,Docker 方式适合无污染导出场景;
  3. 按需测试./build/test.py --browsers配合--browsers help--help即可定位到合适的浏览器与参数组合。

完成本指南后,推荐阅读 docs/tutorials/basic-usage.md 编写你的第一个播放页面,再结合 docs/tutorials/debugging.md 掌握排查手段,即可正式进入 Shaka Player 的深度集成阶段。

【免费下载链接】shaka-playerJavaScript player library / DASH & HLS client / MSE-EME player项目地址: https://gitcode.com/GitHub_Trending/sh/shaka-player

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询