@4players/odin

中文文档
1.11.0发布于 2026/11/02ISCTypeScriptES Module近 30 天下载 3275

一个跨平台的 SDK 使开发者能够将实时 VoIP 聊天技术整合到他们的项目中

中文使用文档
文档目录14 节
  1. 安装
  2. 国家预防机制(建议)
  3. CDN (浏览器)
  4. 特征
  5. 高级音频处理
  6. 网络运输(HTTP/3)支持
  7. 端到端加密( Cipher)
  8. 快速启动
  9. JavaScript / 类型脚本示例
  10. 解决问题
  11. 解析器
  12. X (原Twitter) (中文(简体) )
  13. 电子邮件
  14. 扶养费

@ 4 玩家/ 食人鱼

npm npm npm

ODIN是一个多功能的跨平台软件开发Kit(SDK)被设计成能无缝地将实时语音聊天整合到多人游戏,应用程序和网站中. ODIN简化了与您重要联系人保持连接的过程。 ODIN通过其直观界面和强大的功能,加强互动经验,促进各种数字平台之间的实时接触与合作.

您可以在管理云和自托管解决方案之间选择。 让 4Players 股份有限公司 处理安装、管理和带宽费用或运行我们 服务器软件 完全控制并定制您的部署环境.

在线文档 • 妇女 API 参考

安装

npm install @4players/odin

包括类型定义。 音频插件( E)@4players/odin-plugin-web)是一种依赖,在需要时自动加载(例如,在呼叫时) ensurePlugin() 或者说 setOutputDevice()) (中文(简体) ).

CDN (浏览器)

对于只使用浏览器,您可以通过CDN加载SDK. 偏好选择特定版本来避免突破更改 :

  • IIFE (英语)数字 : https://cdn.odin.4players.io/client/js/sdk/<version>/odin-sdk.js (全球 ODIN(中文(简体) )
  • 无害环境管理数字 : https://cdn.odin.4players.io/client/js/sdk/<version>/odin-sdk.esm.js

见 文档 用于当前版本和使用.

特征

高级音频处理

ODIN通过在网页浏览器中发现的基本音频处理功能之外提供一套全面的过滤器,增强了您在VoIP聊天期间的音频体验. 这些增强是默认启动的,确保了清晰而无中断的通信.

  • 语音活动检测
    启用后,ODIN使用智能语音检测算法分析音频输入信号以确定语音的存在. 您可以定义启动和停止传输所需的概率 .
  • 输入音量门
    启用后,音量闸会测量输入音频信号的音量,从而决定一个用户何时发出足够大的声音来传输语音数据. 您可以定义根的正方形功率( dBFS) , 用于门应该何时接触和脱离 .

网络运输(HTTP/3)支持

我们使用最新的WebTransport API实时传输语音数据,与WebRTC进行无缝回落以与更古老的浏览器兼容.

端到端加密( Cipher)

ODIN通过使用可插接的OdinCipher模块支持端到端加密(E2EE). 这使得您能够使用共享的房间密码——而不依赖服务器作为信任锚点——来保护所有数据、信件和同伴用户数据.

快速启动

  1. 安装软件包,并确保音频在之后启动 用户交互 (例如点击按钮).
  2. 登记册 事件处理器 打电话前 room.join() 因此,您会收到在加入时发生的事件(例如已经在房间里的远程对等器).
  3. 仅在之后发送音频 room.addAudioInput(audioInput)。 。 。 .
  4. 打电话 setOutputDevice({}) 以听到其他同位素(可以随时调用以设置或切换输出设备).

JavaScript / 类型脚本示例

import {
  setOutputDevice,
  Room,
  DeviceManager,
} from '@4players/odin';

let room;
let audioInput;

async function joinRoom(token) {
  await setOutputDevice({});

  room = new Room();
  room.onJoined = (payload) => console.log('Joined', payload.room.id);
  room.onLeft = (payload) => console.log('Left', payload?.reason);
  room.onPeerJoined = (payload) => console.log('Peer joined', payload.peer.userId);
  room.onPeerLeft = (payload) => console.log('Peer left', payload.peer.userId);
  room.onDatagramStatusChanged = (payload) => console.log('Audio', payload.newState.status);

  // Waits up to 5 s for the audio path to open; see `waitForAudio`
  await room.join(token, { gateway: 'https://gateway.odin.4players.io' });

  audioInput = await DeviceManager.createAudioInput();
  await room.addAudioInput(audioInput);
}

async function leaveRoom() {
  if (audioInput && room) {
    room.removeAudioInput(audioInput);
    audioInput.close();
  }
  if (room) room.leave();
  room = undefined;
  audioInput = undefined;
}

// Call from a user gesture (e.g. button click).
joinRoom('__YOUR_TOKEN__');

键必须生成服务器侧 。 见 文档 用于认证和网关选项.

解决问题

  • 没有对等者的音频: 确保 setOutputDevice({}) 已被调用以配置输出设备.
  • 未传送的麦克风: 确保 room.addAudioInput(audioInput) 在加入后被调用.
  • 不允许音频背景:从用户交互(点击/tap)开始流出.
  • 已加入, 但音频没有连接数字 : room.join() 最多等待5秒的音频路径,然后解决 无论如何,所以检查 room.datagramStatus (或听 DatagramStatusChanged)并显示其状态. 过 waitForAudio 改为 room.join() 等待更长的时间,或 false 完全不会等待.
  • 未开火的事件: 登记所有事件处理器 在此之前 电话 room.join() 因此,您会收到在加入时发生的事件(例如已经在房间里的远程对等器).

解析器

加入我们的官方Discord服务器与我们聊天,成为4Players ODIN社区的一部分.

Join us on Discord

X (原Twitter) (中文(简体) )

给我们打个电话 @ODIN4 请检查url=值 (帮助). 玩家。 。 。 .

电子邮件

奥丁@ 4players.io

扶养费

更新依赖关系时使用 npm 12 或更新, 双十天发布 年龄和性别 @4players/* 例外规定得到执行。 检查 npm --version 财务报告和审定财务报表 npm config get min-release-age 在安装前。 保存登记册证书 在您的用户配置或 CI 机密中, 外部跟踪的政策文件.

选择至少十天前的稳定释放,包括过渡依赖. 第三方 @4players/* 软件包豁免;其第三方依赖性 没有。 将 TypeScript 保留在 6.x 上, 并调整 ODIN 共享版本 同行要求允许的仓库。 保存和审查锁文件; 现有锁定版本不是释放年龄资格的证据.

安装方式 npm install --min-release-age=10 --min-release-age-exclude='@4players/*'。 。 。 . 使用 npm ci 用于从已审查的锁文件复制的安装.

每个独立安装的示例或测试应用程序都带有自己的 .npmrc,因为 npm 工程配置是本地到安装根.

版本与发布记录

@4players/odin 共发布 130 个版本,首次发布于 2022/02/20;过去 12 个月发布了 32 个版本。

版本发布日期距今
1.11.0latest2026/11/026 天前
1.10.22026/10/1226 天前
1.10.12026/08/132 个月前
1.10.02026/07/273 个月前
1.9.12026/07/213 个月前
1.9.02026/07/213 个月前

其他发布通道:next → 1.0.0-alpha.52。

关于 @4players/odin 的常见问题

@4players/odin 是什么?

一个跨平台的 SDK 使开发者能够将实时 VoIP 聊天技术整合到他们的项目中

如何安装 @4players/odin?

在项目目录运行 npm install @4players/odin,或使用 pnpm add / yarn add / bun add。

@4players/odin 支持 TypeScript 吗?

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

@4players/odin 支持 ESM 还是 CommonJS?

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

@4players/odin 需要什么版本的 Node.js?

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

@4players/odin 可以商用吗?

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

@4players/odin 的下载量有多少?

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

@4players/odin 还在维护吗?

最新版本 1.11.0 发布于 2026/11/02(6 天前);至今共发布 130 个版本,其中过去 12 个月发布了 32 个;首次发布于 2022/02/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。