# @blockcast/window-multicast-bridge 中文文档

规范地址：https://npmcn.com/package/%40blockcast/window-multicast-bridge/

版本：0\.6\.0
npm 元数据更新时间：2026-11-05T02:17:14.535Z
中文译文更新时间：2026-11-08T07:14:04.558Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40blockcast/window-multicast-bridge
原文对照：https://npmcn.com/package/%40blockcast/window-multicast-bridge/?lang=original
项目主页：https://github.com/Blockcast/beacon/tree/main/packages/window-multicast-bridge#readme
源码仓库：https://github.com/Blockcast/beacon

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：134 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2026-10-20T22:28:05.132Z
- 最新版本发布：2026-11-05T02:17:14.201Z
- 近 30 天下载量：3202（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：6（近 12 个月 6 个）

## 中文简介

浏览器 MESC 多元填充,可以发现本地 Blockcast 桥并安装窗口. 通过Web Transport进行多播.

## 安装

```sh
npm install @blockcast/window-multicast-bridge
```

也可以使用：`pnpm add @blockcast/window-multicast-bridge`、`yarn add @blockcast/window-multicast-bridge`、`bun add @blockcast/window-multicast-bridge`

## README

# `@blockcast/window-multicast-bridge`

浏览器 MESC 多元填充器,可以找到本地的 Blockcast 桥 (Beacon app, an 孤立的Web App或本土的BCDS桥,通过Web Transport与它连接,以及 安装 `window.multicast` 在页面上.

```js
import { initMulticastBridge } from '@blockcast/window-multicast-bridge';

window.addEventListener('multicast-bridge-ready', () => {
  // window.multicast is installed; resolve it with @blockcast/multicast-browser.
});
initMulticastBridge({ autoStart: true });
```

包船在 `dist/`数字 :

| 导出 | 文件 | 这是什么 |
| --- | --- | --- |
| `.` | `dist/multicast-bridge.js` | 发现,即 BCDS-v1 Web Transport客户端,以及 `window.multicast` |
| `./bootstrap` | `dist/bridge-bootstrap.js` | 以下描述的页上自带的拖网协调员 |
| `./beacon-connect` | `dist/beacon-connect.js` | 以下描述的iOS连接灯塔链接 |

来源居住在 `src/`。浏览器直接加载已建模块和捆绑器 它可以作为一个普通的依赖.

## 页面拖带协调员

`src/bridge-bootstrap.js` 是canonial的网页协调员. `createBridgeBootstrap()` 拥有发现之上的地层——能力 诊断、临终状态、有限度的发现预算和复苏——同时 `initMulticastBridge()` 继续拥有发现, BCDS-v1网络运输 握个手 `window.multicast` 安装。 它从来没有描述媒体和 从来没有嵌入一个玩家.

任何探测前都要报告能力(`probeBridgeCapabilities()`: 网络运输支持、安全环境、每个东道方的混合内容可行性、, 和精细的本地网络访问权限。 一个缺失的能力是 有原因的地位(`webtransport-unsupported`, (中文(简体) ), `insecure-context`, (中文(简体) ), `local-network-denied`),从不开放探测回路. 年长者 `local-network-access` 别名保留信息:它报告 `denied` 打开 Chromium 建在给予两种优异的许可的地方。 掷出 发射途径是遵守同一合同而不是逃避:终止 与 `launch-threw`,所以一页 带有敌意 `window.multicast` 访问器 得到一个倒数而不是一个 `checking` 状态永远无法解决.

每站可以通过触发器而不是定时器恢复:扩展 准备、 本地网络许可更改、 来源批准 (单位:千美元)`originApproved()`),或桥接变化. 一个桥上的例子 由于原生桥薄荷a 每次运行时启动时的新证书; 明确的描述符 `instanceId` 当一个人存在时获胜。 复数以 `maxDiscoveryAttempts` 财务报告和审定财务报表 `maxRetries`。 。 。 .

`transportPolicy` 是荣誉,而不是假设。 仅 `auto` (和 `moq-only`,哪个 直接跳过桥)报告 `fallback: 'moq-quic'`,返回页面 到它开始的QUIC/MoQ路径. 下 `multicast-only` 终端状态 不得倒计时:强迫本土/AMT要求沉默地继续 QUIC 读作多播回放 .

## 浏览器页面范围

发现 `.` 财务报告和审定财务报表 `./bootstrap` )是一个通用浏览器桥,没有本地的交接或app-assexation 合同:通用链接、App链接、AASA/资产链接文件、 `/live*` 路线,以及 `blockcast.network` 主机不是桥梁发现的一部分或 授权。 可选 `./beacon-connect` 条目( 下) 构建灯塔 通用链接; 发现和授权从未读过 . `initMulticastBridge()` 发现本地的 BCDS 桥并可能 安装 `window.multicast` 在任何浏览器页面上( 包括非 Blockcast) HTTPS 来源, 移动浏览器页面, 或本地开发页面 ; 它没有 检查页面主机或路径名。 发现使用配置的浏览器 桥的源代码,然后直接连接 网易运输. 玩家可以从任何一页导入并武装桥; `/live*` 浏览器使用不需要.

证书 pinning 不批准 iOS 背景执行: 当 Beacon 是 同分机桥,暂停灯塔 暂停该桥为浏览器. 一个单独的总是运行的局域网网关 独立于电话应用程序 生命周期.

## 连接灯塔( iOS)

Safari通过Beacon的Safari扩展找到Beacon的桥. 克罗姆, Firefox, Edge等iOS浏览器没有扩展名, WebKit 块 一个 HTTPS 页面的回路 `/health` 探测器,所以发现无法到达灯塔 他们. `./beacon-connect` 给任何一页的一图配对链接 :

```html
<a id="beacon-connect" hidden>Connect Beacon</a>
```

```js
import { initMulticastBridge } from '@blockcast/window-multicast-bridge';
import { offerBeaconConnect } from '@blockcast/window-multicast-bridge/beacon-connect';

offerBeaconConnect(document.getElementById('beacon-connect'));
initMulticastBridge({ autoStart: true });
```

该提议遵循了桥梁的窗口事件,所以无论谁建造 在此窗口中带有此软件包的控制器( 0. 4. 0 或 后期): 此页面, `createBridgeBootstrap()`,或玩家库。 当控制器运行时,每个 过渡 `initMulticastBridge()`是因为 `onStatus` 报告也于 `window` 作为 `multicast-bridge-status`,与 `detail: { phase, ok, reason, fromCache, takeover }` 没有终点和针. `phase` 实值 `discovery`, (中文(简体) ), `connect`, (中文(简体) ), `disconnect` 或者说 `extension`· ; `ok` 设置在 `discovery` 财务报告和审定财务报表 `connect`· ; `reason` (单位:千美元)`miss` 或者说 `lock-busy`在发现上 老师 事件没有重播, 所以在控制器前创建要约 启动, 或种子 `offer.onStatus` 自己(同样需要) `createBridgeBootstrap()`自己的状态, 没有发送 。 链接 显示在发现丢失或连接失败上,所以一个页面已经 配对时从不闪出,而一发一发又能提供. 现予撤回 `multicast-bridge-ready`。 。 。 .

它只在iOS上提供,超过HTTPS,在顶级页面中提供. 水龙头去 `https://www.blockcast.network/beacon/connect`,或改为 `https://blockcast.network/beacon/connect` 从页面上 `www`。 。 。 . `return=` chrome, Firefox 或 Edge; 所有其他 iOS 浏览器, 和一个 iPad 浏览器 请求桌面站点而无需其产品代号,则返回到 Safari . `to=` 指定页面名称,不附带证书或搜索发现字段 逃到RFC 3986, 正如Beacon描述的。 灯塔开通了桥 重新开放 在浏览器的页面 与桥的针 在碎片. `initMulticastBridge()` 保持针作为配对,所以以后的访问连接 灯塔桥开通时没有水龙头;一个不再连接的接针 再次提供链接。 灯塔使用自己的原产地 `to`。 。 。 .

iOS 打开灯塔只用于在用户自带时的导航 在顶级框中处理到顶级页面以外的主机. 让控制保持一个真正的链接;帮助者在水龙头内部重建其螺旋. 这个 帮助显示并隐藏它 `hidden`,所以不要给它 `display` 规则 没有匹配 `[hidden] { display: none }`。当iOS不交出水龙头时 到灯塔(Beacon未安装,或私人标签,其中Chrome和Firefox) 它不会从链接中打开应用程序,而是在该地址打开网页. `beaconConnectUrl()` 返回自成一体的页面的赤壁 控制系统.

## 发现边界

当一个信任的呼叫者提供已知的主机名和证书针时,浏览器 直接连接; 不获取 `/health` 或者说 `/certificate.sha256`数字 :

```text
https://player.example/watch?mc_bridge=beacon.local&wt_port=33445&fingerprint=<64-hex-SHA256>
```

监督办必须解决实际广告问题 `.local` 主机名; 一个 DNS- SD 服务 实例名称本身不是主机名称。 针是全叶的SHA-256 证书 DER, 通过认证的信道提供, 而不是从 HTTP或未签名的Bonjour TXT唱片. 明确的针绕过发现缓存 并拯救了门户。 错误的,过期的,或者变形的指针不能关闭. 一个已知 主机名不建立初始 pin 信任, 而服务器 pin 不建立 取代桥的原产地接纳政策.

双方出席 `mc_bridge` 财务报告和审定财务报表 `fingerprint` (或 `fp`)选择此严格 路径,即使一个值是空的。 空或错构值为配置 错误, 不允许发现另一个网关; 删除参数到 请求普通的发现。 一个赤裸的 `fingerprint` 无 `mc_bridge` 没有 桥梁配置.

HTTPS 页面上一个明确的回回回接被直接拨出并保留 根据浏览器本地网络权限。 永远无法改变 保存 AutotLS 网关以绕过此策略 .

网络运输封存证书有效期不得超过14天. 这个 本地桥目前每次运行时都会发出新证书,所以 呼叫者必须在重启或旋转后提供当前指针。 这个直接 路径不添加 pin-distribution 服务或手动证书 UI.

普通 HTTPS JavaScript 无法列举 DNS- SD/ mDNS 服务或发行 DNS-SD/mDNS查询. 没有明确的钉子配置, 发现探测的原生 桥的回转 `/health` 终点( e)`localhost` 或者说 `127.0.0.1`· ; `localhost` 也覆盖一条连接到 `::1`, (中文(简体) ), 验证BCDS-v1能力并完成SHA-256证书指纹, 然后打开一个直接的Web Transport(QUIC)连接 指纹. 这个 HTTP 靴子陷阱依赖于浏览器政策, 并且被 Safari 屏蔽在 HTTPS页面;它不是一个通用的移动发现机制.

局域网发现是一个单独的平台能力. 已安装的 IWA, 浏览器 扩展,或本地平台代理可以使用其平台 DNS-SD 堆栈 发现 `_multicast-bridge._udp.local.` 并提供一个配置的混凝土 浏览器的私人端点 。 常规页面没有列出 服务本身。 桥仍然只有桥:它携带多播字节到 `window.multicast`,而浏览器拥有演示文稿分辨率和媒体 翻译.

## 批发包`packets` 活动)

此桥返回的字节订阅也发出 `packets`: 每一个 将读取器装入一个发送批次解码,按到达顺序排列 冷冻阵列。 每一个元素都是一样的 `bytes` 事件会 携带(a) `ArrayBuffer`,或 `{ data, receiveTime, receiveTimeOrigin?, receiveTimestampSource }` 当框架有计时元数据时)。 批次结束 读取器同步运行已经结束——在其现有的出产点, 或者在Web Transport的结尾读到,所以没有包在计时器和 批次没有添加自身大小常数.

`packets` 是提供者扩展名,而非被冻结 v1 的一部分 `window.multicast` 合同。 在使用和听完之前先发现它 两个表面之一:

```js
if (subscription.eventTypes?.includes('packets')) {
  subscription.addEventListener('packets', (event) => {
    for (const packet of event.detail) consume(packet);
  });
} else {
  subscription.addEventListener('bytes', (event) => consume(event.detail));
}
```

订阅只构建一些听众要求的事件,所以 `packets`\- 只有消费者从来不为每件DOM事件付费(计量) `dispatchEvent` + 键 `CustomEvent` 每条主线约22毫秒 第二组在Kirin 659上为~450包/秒. `bench/packet-dispatch.mjs` 驱动 真实读取器为真实的订阅并报告 DOM 事件和 CPU 时间 两个表层的包.

## 宣布交货`subscription.delivery`(中文(简体) )

一个字节订阅报告其数据包是如何到达该页面的,作为桥梁 **服务器** 已经申报了 `subscribe_response`数字 :

-   `'ordered-relay'`: 每一个包都穿行订阅器的一个可靠的BCDS 按套接字读取顺序排列的单流 。 服务器可能降下最老的队列 包在溢出但从不重排,所以页面看到一个子序列 套接字的接收订单. `native-bcds-bridge` (iOS灯塔桥) 宣布 此; 它没有发送数据格网媒体 .
-   `'datagram'`,或 `undefined` 当服务器没有声明时:否 命令承诺.

`@blockcast/mmt-transport`是因为 `MulticastTransport` 读一次每个加入和,因为 `'ordered-relay'`,已经 `FECManager` 按流序决定 FEC 块归宿 代替数据克不活动截止日期:中继暂停不会丢失 资料。 在最后期限之后,50-200 ms在溪流上停放失败了~7%-9% iPhone Safari上的块,电线损失只有~0.2%。 客户 将声明通过并永不推断; 服务器也可以 将 WT 数据显示为订阅(例如,国际水协会服务人员) 已启用数据映射介质) 不得声明 `'ordered-relay'`。该值为 用于页面订阅寿命的固定; 宣告的重联重播 不同的记录,没有应用.

## 建筑和测试

```sh
npm --prefix packages/window-multicast-bridge install --include=dev
npm --prefix packages/window-multicast-bridge run build   # src/ -> minified dist/
npm --prefix packages/window-multicast-bridge test
npm --prefix packages/window-multicast-bridge run test:dist  # same suite on the minified dist/
```

`test/vectors/` 拥有跨语言合同载体 本土桥梁 对(或`packet-id-allow-list-v1.json`, (中文(简体) ), `bridge-enrollment-v1.json`) (中文(简体) ). 与桥梁服务器同步修改; `test/vectors.test.mjs` 钉住他们 文摘,所以要更改,也要更新接针.

## 释放

桥版独立于合同 和适配器,所以它骑 自己的标签: 推 `window-multicast-bridge-v<version>`匹配 `version` 内 这个 `package.json`CI 建立,测试和包装,检查标签与 包装版本,并通过 npm 信任的出版以出处出版. 第一次公布这个名字需要一次性的靴子 [`../multicast-contract/docs/RELEASE.md`](https://npmcn.com/package/%40blockcast/multicast-contract/docs/RELEASE.md)。 。 。 .

## 常见问题

### @blockcast/window-multicast-bridge 是什么？

浏览器 MESC 多元填充,可以发现本地 Blockcast 桥并安装窗口\. 通过Web Transport进行多播\.

### 如何安装 @blockcast/window-multicast-bridge？

在项目目录运行 npm install @blockcast/window-multicast-bridge，或使用 pnpm add / yarn add / bun add。

### @blockcast/window-multicast-bridge 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/blockcast\_\_window-multicast-bridge 是否存在。

### @blockcast/window-multicast-bridge 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @blockcast/window-multicast-bridge 可以商用吗？

@blockcast/window-multicast-bridge 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @blockcast/window-multicast-bridge 的下载量有多少？

根据 npm 官方下载统计，@blockcast/window-multicast-bridge 在 2026/10/09 – 2026/11/07 这 30 天内被下载 3,202 次，日均约 107 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @blockcast/window-multicast-bridge 还在维护吗？

最新版本 0\.6\.0 发布于 2026/11/05（3 天前）；至今共发布 6 个版本，其中过去 12 个月发布了 6 个；首次发布于 2026/10/21。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

