cockpit-video-player-provenance.md 19 KB

驾驶舱视频播放器来源与离线测试依赖核查

核查日期:2026-11-10(UTC+8)。范围:共享任务 task-1;只写本文,不改应用代码、包清单、票据或参考仓,不复制播放器资产。本文是工程来源核查,不替代法务意见,也不代表已获授权或真实播放验收通过。

结论先行

后续决定优先:第1至5节保留首轮核查时的事实与待定建议。Lead 随后转达用户已选择原生 WebRTC/原生 video,并允许仅测试用 DOM 依赖、禁用安装脚本;当前执行决定与 LinkeDOM 官方核实见第6节。首轮“尚未决定/不可安装”不再作为新的方案或授权结论。

  • 现有参考 Jessibuca 资产不能直接作为“已确认合法且完整”的交付载体。 当前只找到两个压缩脚本和一个类型声明;无法确证本地播放器/解码器的发行版本与原始来源包,缺少其引用的同目录 Wasm。没有找到随这三份资产提供的 SDK 许可或商业授权证明。
  • 官方仓的开源许可可确认,但不能据此填补本地来源链。 官方 v3 分支与 master 分支的 LICENSE 都展示 GNU GPL version 3;不能用参考应用的 MIT 或当前应用的 Apache-2.0 代替 SDK 许可。用户需确认实际授权、交付形态和相应发行义务后,才能决定复用。
  • 无需新增第三方播放器 SDK 的原生 WebRTC 可保留为传输适配备选,不是已决定的替换方案。 是否可用取决于既有媒体服务返回的真实协议/信令合同与浏览器能力;不因此重建视频台账、业务会话或媒体服务,也不把 WebRTC URL 当作普通 <video src>。
  • 离线已有 Vue 编译/SSR 工具,不等于已有 DOM 测试环境。 根目录不能解析 jsdom、happy-dom、linkedom、Vue Test Utils、Vitest、jest-environment-jsdom;不可安装新包来填补。本次仅核查依赖,没有运行编译、DOM 测试或媒体代码。

1. 约束与已读依据

已阅读项目规则、领域词汇、领域文档规则、票据规则、实施票02、视频规格以及视频边界例外、视频访问例外。

参考仓的协作规则、记忆索引与最近索引会话亦已读取;索引指定的长期记忆文件读取为不存在。参考仓的记忆写入要求不扩大本任务唯一文档写权限;未在参考仓补写记录。

本任务不运行服务、浏览器、设备操作、真实迁移、包安装或下载 SDK;不使用 deck,不提交。

2. 本地资产身份与完整性

对 E:/city-life-line/public/jessibuca 做了完整普通文件列表检查(3个文件),并以只读 SHA-256 运算固定当前内容。参考仓 git ls-files public/jessibuca 也仅列出这三项;该路径 git status --short 无变更。最近路径历史为 5117acf(2026-10-13,视频重构)和 df508d1(2026-10-12,新增视频模块),它们是应用入库历史,不是上游发行版本证明。

本地文件 字节数 SHA-256
jessibuca.js 207042 7112378e6c3e6e477eb8155dd71857a707867455cdb2cbe13a7407bfcc3ee783
decoder.js 110216 30ea729d30ec1f93740c265549e74cf07d8ea923a1bacff8beb5ef57623314ff
jessibuca.d.ts 20126 cad4bacfbdb65cf639d96b7c4ba426625fe61da8ccab33953d2116980c481df3

可以确证的内容

  1. 类型声明:37–40明确写道:decoder.js 与 decoder.wasm文件必须是放在同一个目录下面。当前该目录没有 decoder.wasm。解码脚本本身也有 we(ve="decoder.wasm"),后续通过 locateFile 或脚本路径拼接定位;在当前参考组件的设置下不能把三个文件视作完整软解码交付包。
  2. 类型声明:169–173引用了上游 issue 152,压缩脚本导出 window.Jessibuca。这只能提供项目归属线索,不能证明来自某个 tag、未修改的发行包或授权合同。
  3. 对两个脚本做有界字符串分析,未发现明确的 Jessibuca/decoder 发行版本或独立 license/copyright 标记。本地播放器出现的 5.6.2 处于 RecordRTC 代码上下文;不能把它报告成 Jessibuca 版本。脚本中的 Emscripten 文档地址也不是具体编译器/解码库版本或许可证明。
  4. 目录内没有 LICENSE、NOTICE、来源清单、原始发行包元数据或源码映射。当前无法核实解码器对应源码、构建选项、内嵌依赖许可清单和获取渠道;这些均保留为未知,不根据文件时间或应用提交日期猜版本。

参考组件并非可原样复制的交付件

参考 VideoPlayer:15–43按 BASE_URL 加载本地播放器和解码脚本,设置 useMSE: false、useWCS: false,并打开 screenshot: true;它只把 script onload 当作加载完成、监听播放器 play 作为 ready。其缺失 Wasm、加载/就绪确认、受控路径及禁止截图/录制等边界必须独立复核,不能复制后就声称满足视频规格的静态资源和真实验收要求。

本地压缩播放器还包含录制相关的外部默认资源 URL(例如 unpkg 上的 webm-wasm)。本次未执行脚本,不能据此断言实际发生过外连;后续受控资源检查不应只核对顶层 script 地址,也不应启用超出规格的录制路径。

3. 官方许可核实:已知与未知分开

先加载了 research、firecrawl、firecrawl-developer-index、firecrawl-scrape 技能。现有 firecrawl --status 返回 command not found,未安装工具;直连 raw GitHub 失败。随后使用现有 read_page 读取官方 GitHub 页面,工具明确返回 Firecrawl 云端 Markdown 提取,不是原始文件字节。未启动本地浏览器,未登录,未读取用户凭据,未下载 SDK。

官方证据 可得出的结论 不可得出的结论
v3/LICENSE;页面文件提交 379c930c88ab403d7f7d8b917e077b85bb3a8929 正文标题为 GNU GENERAL PUBLIC LICENSE / Version 3, 29 June 2007,不是 MIT 不能证明本地压缩资产与该分支/提交逐字一致,不能证明已有商业例外授权
master/LICENSE 此分支同样显示 GPL v3,未将旧 master 错当当前默认分支 不能从分支许可替本地资产完成版本归属
v3/package.json;页面文件提交 663cbb1d84fa3459c0a25379433f2d74c2346062 当次页面显示 jessibuca、3.3.28,依赖 recordrtc: 5.6.2 3.3.28不是已核实的本地版本;5.6.2不是播放器版本
官方仓 README 区分开源版与 PRO 版;说明 Emscripten/Wasm 解码及多种播放能力 “开源”“已有文件”或“可商用”不等于免除许可证条件,也不证明购买/授权范围

GPL 正文已提取到第4、5、6节:包括保留许可/版权通知、修改说明、适用的整体许可要求及非源码形式的 Corresponding Source 条件。本文不替用户判断本项目交付是否属于何种组合/传播形式;需维护者/授权方确认合规路径。许可文本中的 Copyright (C) 2007 Free Software Foundation, Inc. 是许可证文本版权,不能当作 Jessibuca 实现的作者/权利人证明。

参考应用 LICENSE写的是 Copyright (c) 2018 RuoYi 和 MIT;参考应用包清单也写 MIT。它们没有给这套第三方压缩 SDK 建立可验证的授权链。当前驾驶舱包清单的 Apache-2.0 同样不覆盖这个证据缺口。

复用前最少需要用户确认/提供

  • 已合法持有的播放器原始包或供应方交付件,以及明确版本、获取来源、对应源码/构建来源和可核对指纹。
  • 与播放器配套的完整解码器文件及其许可/NOTICE/内嵌依赖信息;不能任意补一份同名 Wasm 混版本。
  • 若按 GPL 开源版交付:明确本项目的交付对象、组合方式及履行适用许可义务的方案;若依靠商业许可:提供覆盖该版本、解码器、目标应用及再分发方式的许可确认。不在本文记录合同密钥或其他凭据。
  • 确认之后才决定受控静态资源发布、版本锁定、错误 HTML 拒收与失败退出等实施内容。本次未复制任何 SDK 资产。

4. 当前前端离线测试依赖

以当前仓根目录的 createRequire(.../package.json).resolve(...) 做只读入口解析,并读取已有包清单/许可证;没有调用这些模块的编译或测试函数。Node 为 v24.20.0。

包 本地状态 可以支持/不能证明的事项
vue 3.5.21,入口可解析;版本与应用声明一致 已有 Vue 运行时;不提供浏览器 DOM
@vue/compiler-sfc 清单 3.5.21;本地 MIT 可作为后续获准离线 SFC 编译工具;本次未执行
@vue/compiler-dom 清单 3.5.21;本地 MIT 模板编译器,不是 DOM 模拟器
@vue/server-renderer 清单 3.5.21;本地 MIT 可供后续 SSR 输出检查;SSR 不能证明 TAB 点击、焦点、事件传播、媒体播放或卸载行为
jsdom / happy-dom / linkedom 根目录逐项解析均 MODULE_NOT_FOUND 不能声称已有现成离线浏览器 DOM 环境
@vue/test-utils / vitest / jest-environment-jsdom 根目录逐项解析均 MODULE_NOT_FOUND 不能默认使用这些测试 API,也未安装它们

直接针对现有 yarn.lock的完整检索也未匹配上述缺失包。对整个依赖目录的通用递归搜索曾达到10,000文件扫描上限,因此不宣称整个磁盘或任意深层私有依赖绝对不存在这些包;本结论限定为当前项目根入口不可解析、锁文件无记录。缩小到 node_modules/@vue 的列表已完成,现有 compiler/runtime/server-renderer 可见,test-utils 未列出。

最小测试建议(供 lead 决定,不是本任务实施):

  1. 先复用现有 Node 与 Vue 工具,在已获准的离线边界上验证外部 API/时钟/播放器替身及资源归属,不引入新框架。
  2. 若自行提供很小的 DOM 宿主替身或 Vue 自定义 renderer,需明确其只是组件/状态行为测试,不应冒称浏览器 DOM 集成测试;不能在夹具里重写设备能力或会话业务算法。
  3. 编译/SSR/替身通过仍不能代替从“设备详情→最新指标TAB→监控按钮”开始的真实入口验收,也不能证明真实画面、浏览器媒体能力或物理设备停止。

5. 给主任务的方案建议与未完成门槛

  • 优先路径:继续复用已有业务会话/接口边界,等待能够确证版本、来源、完整性和授权的现有播放器载体;不要先复制不明许可资源再补手续。
  • 备选路径:仅在 lead/用户确认且既有媒体合同匹配时,考虑浏览器原生 WebRTC 的小型传输适配。它不捆绑第三方播放器/解码 SDK,但仍须核实实际 SDP/信令响应、媒体协议与编解码兼容、网络可达性、静音播放、有界就绪/失败及本会话释放。不能新建平行信令/媒体业务,不能把媒体服务成功响应当首帧已播放,也不能对未知媒体地址盲目尝试。
  • 本任务没有改变播放器方案,没有把等待许可或等待真实验收写成完成交付。当前允许复用的确定载体只有项目已安装且本地许可可见的 Vue 开发工具;本地 Jessibuca 交付资格仍未确认。

由于项目规则要求,已跳过 build/debug 验证;未运行服务、浏览器、测试套件、真实视频、设备操作或数据库迁移。本文只提供只读证据与决策输入,不把 SDK 来源缺口或 DOM 测试缺口静默掩盖。

6. 后续用户决定与 LinkeDOM 官方核实

更新日期:2026-11-10(UTC+8)。决定依据:本会话 Lead 转达“用户已选择原生WebRTC/原生video,明确允许添加仅测试用DOM依赖并禁安装脚本”。这不是本研究代理自行变更方案;本代理仍只更新本文、只读核实,不安装任何包、不修改应用包清单或锁文件,由 Lead 负责依赖变更。

已决定的播放载体

  • 本次实施采用浏览器原生 WebRTC / 原生 <video> 的协议适配,不复制现有 Jessibuca、decoder 脚本或 Wasm,不新增第三方播放 SDK。
  • 浏览器内置的媒体解码能力不需要应用另行发布 vendor 解码器静态资源;这不表示所有媒体协议/编解码都受浏览器支持,也不改变浏览器、媒体服务或编码内容各自的许可责任。
  • 仍复用已有设备业务编码、匿名会话、媒体服务与资源归属接口,不新建信令/媒体业务。WebRTC 用实际信令协商与媒体轨道,不能把 webrtc: 地址直接塞进 <video src>;原生 video 也只消费实际支持的媒体信息。
  • 编解码兼容、媒体网络可达性、信令与跨域/安全上下文、静音播放和真实首帧仍待真实验收。 DOM 替身的 playing/轨道事件不能替代真实播放;本会话没有因此获得服务启动、浏览器或设备操作授权。

LinkeDOM:当前可用版本与许可

本次只读查询官方 npm latest 元数据和固定版本元数据,均返回 HTTP 200;并与官方 GitHub 包清单、官方 LICENSE交叉核对。npm 返回的是 JSON 元数据;GitHub 通过已有 Firecrawl 云读取通道提取。未下载 tarball、未安装、未运行包脚本。

项目 当次可核实的结果
名称 / 当前 latest linkedom / 0.18.15;建议 Lead 若采用则精确锁定这个版本,不把浮动 latest 写入测试依赖
上游仓库 https://github.com/WebReflection/linkedom.git
npm gitHead / 官方包清单提交 6e2ae0ca56adc00f9e6e7d35971f22d676a454ff(官方页面显示 0.18.15)
包许可 ISC;官方 LICENSE 为 Copyright (c) 2021, Andrea Giammarchi, @WebReflection,允许有偿/无偿使用、复制、修改、分发,但要求保留版权与许可通知;无担保
Node 要求 engines.node: >=16;此前本机 v24.20.0 满足直接包要求,尚未安装验证传递依赖
已发布入口 ESM ./esm/index.js;CommonJS ./cjs/index.js;包元数据已列相应 exports,无需从 Git 源码运行 build 来获得入口
直接运行依赖 css-select ^7.0.0、cssomnom ^0.1.11、html-escaper ^3.0.3、htmlparser2 ^10.1.0、uhyphen ^0.2.0
可选 peer canvas >=2,peerDependenciesMeta.canvas.optional: true;本测试范围不需要主动加入原生 canvas 包或其构建链
自身安装生命周期 当次官方 scripts 未声明 preinstall、install、postinstall、prepare;存在 build/test 等开发脚本,但本次不执行。这不能证明传递依赖或当前应用没有安装脚本
tarball 完整性元数据 sha512-o0w7eD/SvoCao+pUi6dzocCLuMR11g4Tv/et0W2OUzwWmUcewntSzyl+Ua/K+0yKym0Y/Mav3nFAaI5Av5jvZg==;仅记录 registry 值,未下载验证

ISC 原文关键条件:“Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.” 此许可结论来自 LinkeDOM 自身,不由应用许可推断;传递依赖应保留其各自许可。

只用于测试,禁安装脚本仍是全局边界

  • 用户已允许添加仅测试用 DOM 依赖,Lead 可将 LinkeDOM 放入开发依赖而不是生产播放链。本研究代理不执行安装。
  • 后续安装需在所用包管理器的整次安装操作上禁用脚本,例如使用其 --ignore-scripts 选项,而非仅检查 LinkeDOM 自身。尤其应用现有 postinstall也属于需禁止的安装脚本;不能为“修补环境”补跑。依赖图与锁文件最终结果仍由 Lead 核对。
  • 官方 README明确其为 DOM-like、偏向 SSR 的实现,不追求100%标准兼容或完整浏览器模拟,且不支持 live collections。因此可作为 Vue 挂载、元素查询和合成事件的离线测试宿主候选,但需实际验证适配;媒体播放、WebRTC、布局/焦点等缺失或不完整能力仍须诚实标注并在对应外部边界使用替身。
  • 本追加没有将“npm 可获取”写成“已安装可用”,也没有将“有 DOM 依赖”写成“真实媒体验收已通过”。本代理仍未运行构建、debug、测试、服务、浏览器、设备或迁移;已跳过 build/debug 验证。