# @babelforce/rtvbp 中文文档

规范地址：https://npmcn.com/package/%40babelforce/rtvbp/

版本：0\.1\.0
npm 元数据更新时间：2026-08-14T13:29:00.719Z
中文译文更新时间：2026-11-07T18:08:56.353Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40babelforce/rtvbp
原文对照：https://npmcn.com/package/%40babelforce/rtvbp/?lang=original
项目主页：https://babelforce.github.io/rtvbp/docs/getting-started/typescript
源码仓库：https://github.com/babelforce/rtvbp

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

- 包体积（解压后）：512 kB，119 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：2 个
- 首次发布：2026-08-14T13:28:59.912Z
- 最新版本发布：2026-08-14T13:29:00.295Z
- 近 30 天下载量：3340（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 1 个）

## 中文简介

生成 RTVBP 协议表面和浏览器/节点运行时间

## 安装

```sh
npm install @babelforce/rtvbp
```

也可以使用：`pnpm add @babelforce/rtvbp`、`yarn add @babelforce/rtvbp`、`bun add @babelforce/rtvbp`

## README

# RTVBP 类型脚本 SDK

`@babelforce/rtvbp` 是生成的 RTVBP 协议表面外加节点.js 的手写运行时间 和永恒的浏览器。 根导出为平台中立. 导入运输和浏览器介质 仅从其专用切入点:

```ts
import {
  Handler,
  Session,
  babelforceV1,
  classicV1,
  profileMediaFormat,
  profiles,
} from "@babelforce/rtvbp";
import {
  BrowserAudioDevice,
  BrowserWebRtcTransport,
  babelforceBearerSubprotocols,
  browserWebRtcTransport,
  browserWebSocketTransport,
} from "@babelforce/rtvbp/browser";
```

导入 `@babelforce/rtvbp/node` 仅来自节点入口; 浏览器模块和示例永远不会 解决其节点内置或 `ws` 依赖性.

以下片段假设生成的应用程序执行 `VoiceHandler` 财务报告和审定财务报表 `VoiceEventHandler` 合同名称 `voiceHandler` 财务报告和审定财务报表 `voiceEvents`编辑 [公共类型脚本快速启动](https://babelforce.github.io/rtvbp/docs/getting-started/typescript) 显示每种所需方法的完全最低限度实施.

从 npm 公共登记册安装 :

```sh
npm install @babelforce/rtvbp
```

## 浏览器音频

`BrowserAudioDevice` 明确拥有它创造的资源。 它要求一个麦克风轨道, 启动一个 `AudioContext`,运行抓取和播放 `AudioWorklet`状态 设备速率 QQ 8 kHz 转换为 WebSocket 音频, 限制播放, 并停止其音轨和 上下文 `close()`。 。 。 .

对于 `rtvbp.v1`,配置生成的配置格式,并在处理器后附加适配器 接受音频 :

```ts
const device = new BrowserAudioDevice();
const format = profileMediaFormat(profiles.PROFILE_RTVBP_V1, "audio");
const handler = new Handler({
  adapter: babelforceV1.voiceAdapter(voiceHandler, voiceEvents),
  onBegin: async (context) => {
    await context.acceptAudio();
    await device.attachWebSocket(context.audio);
  },
});
const session = new Session({
  envelope: classicV1.classicV1Envelope,
  handler,
  transportFactory: browserWebSocketTransport({
    url: "wss://voice.example/rtvbp",
    audioFormat: format,
  }),
});

const running = session.run();
try {
  await session.ready;
  // In the generated audio.buffer.clear handler:
  const removedBytes = device.clearPlayback();
  await running;
} finally {
  await session.close().catch(() => {});
  await device.close();
}
```

从一个用户手势( 如呼叫按钮) 启动会话 。 有些浏览器不会恢复 创建 `AudioContext` 用于从背景调用麦克风/讲机的工作; 自动播放失败 报告为 `media_autoplay`。 。 。 .

`rtvbp.v1` 携带精确的 L16/8000/16- bit/mono/20 ms 帧作为 WebSocket 二进制 留言。 适配器转换浏览器 `Float32` 音频之间不重设重印相 工作块.

对于 `rtvbp.webrtc.v1`,将同一设备传递给本地的 WebRTC 运输:

```ts
const device = new BrowserAudioDevice();
const session = new Session({
  envelope: classicV1.classicV1Envelope,
  handler: new Handler({
    adapter: babelforceV1.voiceAdapter(voiceHandler, voiceEvents),
    onBegin: async (context) => await context.acceptAudio(),
  }),
  transportFactory: browserWebRtcTransport({
    url: "wss://voice.example/rtvbp",
    audioDevice: device,
    rtcConfiguration: {
      iceServers: [{ urls: "stun:stun.example:3478" }],
    },
  }),
});

const running = session.run();
try {
  await session.ready;
  const transport = session.transport;
  if (!(transport instanceof BrowserWebRtcTransport)) {
    throw new Error("WebRTC transport was not selected");
  }
  const report = await transport.getStats();
  await running;
} finally {
  await session.close().catch(() => {});
  await device.close();
}
```

浏览器拥有ICE,DTLS,SRTP,捕获,渲染和PCMU. RTVBP控制仍为经典 webSocket上的信封文本 。 信号仍为一带式、完整式、非三角形 `transport.webrtc.offer` 请求和相互关联的答复。 原始内容 `session.audio.read()` 编号 : `write()` 为: 因此无法用于浏览器本地 WebRTC; 使用 `BrowserAudioDevice` 以及运输统计.

目前被冻结的装订允许双向音频轨道, PCMU/8000/1 仅限, 没有微调的 ICE, 没有重新谈判,也没有重启 ICE 。 明确供应STUN/TURN配置;SDK包含无 默认服务或证书.

## 浏览器认证

本地浏览器 `WebSocket` 无法设置 `Authorization` 升级标题 。 认证仍然是 部署问题:

-   同源饼干由浏览器发送;
-   当部署政策允许时,可将查询参数列入调用人提供的URL;
-   可应用注入的套接字执行 `headers` 在本地浏览器之外;
-   bailforce浏览器的部署可以使用下面的明确帮助.

```ts
function authenticatedTransport(url: string, oauthAccessToken: string) {
  return browserWebSocketTransport({
    url,
    protocols: babelforceBearerSubprotocols(
      profiles.PROFILE_RTVBP_V1,
      oauthAccessToken,
    ),
    audioFormat: profileMediaFormat(profiles.PROFILE_RTVBP_V1, "audio"),
  });
}
```

帮助者发布 RTVBP 简介,然后是 `bearer.<base64url(UTF-8 token)>`,没有铺垫. 接受端点会解码无记名载体,但只回放选定的RTVBP配置. 使用 `wss://`浏览器 `Origin`,尽可能在 URL 和 日志中保留符号,永远不要 将证书放入申请包.

## 内容安全政策

默认音频适配器创建短寿命 `blob:` AudioWorklet 模块并取消其 URL 装入后。 有了更严格的CSP, 自动主机字符串返回 `browserAudioWorkletModuleSource()` 并传递其信任的同源 URL 与 `workletModuleUrl`。 。 。 .

## 节点.js

节点 22 或 更新器可以直接注入升级头 :

```ts
import { nodeWebSocketTransport } from "@babelforce/rtvbp/node";

function authenticatedNodeTransport(token: string) {
  return nodeWebSocketTransport({
    url: "wss://voice.example/rtvbp",
    headers: { authorization: `Bearer ${token}` },
  });
}
```

节点入口也出口 `NodeWebSocketServer`;支持两个生成的角色 客户端和服务器会话.

## 常见问题

### @babelforce/rtvbp 是什么？

生成 RTVBP 协议表面和浏览器/节点运行时间

### 如何安装 @babelforce/rtvbp？

在项目目录运行 npm install @babelforce/rtvbp，或使用 pnpm add / yarn add / bun add。

### @babelforce/rtvbp 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @babelforce/rtvbp 支持 ESM 还是 CommonJS？

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

### @babelforce/rtvbp 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @babelforce/rtvbp 可以商用吗？

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

### @babelforce/rtvbp 的下载量有多少？

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

### @babelforce/rtvbp 还在维护吗？

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

