@babelforce/rtvbp

中文文档
0.1.0发布于 2026/08/14MITTypeScriptES Module构建来源已验证近 30 天下载 3340

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

中文使用文档
文档目录4 节
  1. 浏览器音频
  2. 浏览器认证
  3. 内容安全政策
  4. 节点.js

RTVBP 类型脚本 SDK

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

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编辑 公共类型脚本快速启动 显示每种所需方法的完全最低限度实施.

从 npm 公共登记册安装 :

npm install @babelforce/rtvbp

浏览器音频

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

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

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 运输:

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浏览器的部署可以使用下面的明确帮助.
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 或 更新器可以直接注入升级头 :

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

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

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

版本与发布记录

@babelforce/rtvbp 共发布 1 个版本,首次发布于 2026/08/14;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.0latest2026/08/142 个月前

关于 @babelforce/rtvbp 的常见问题

@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 和提交记录判断。