@ 4 玩家/ 食人鱼
ODIN是一个多功能的跨平台软件开发Kit(SDK)被设计成能无缝地将实时语音聊天整合到多人游戏,应用程序和网站中. ODIN简化了与您重要联系人保持连接的过程。 ODIN通过其直观界面和强大的功能,加强互动经验,促进各种数字平台之间的实时接触与合作.
您可以在管理云和自托管解决方案之间选择。 让 4Players 股份有限公司 处理安装、管理和带宽费用或运行我们 服务器软件 完全控制并定制您的部署环境.
安装
国家预防机制(建议)
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). 这使得您能够使用共享的房间密码——而不依赖服务器作为信任锚点——来保护所有数据、信件和同伴用户数据.
快速启动
- 安装软件包,并确保音频在之后启动 用户交互 (例如点击按钮).
- 登记册 事件处理器 打电话前
room.join()因此,您会收到在加入时发生的事件(例如已经在房间里的远程对等器). - 仅在之后发送音频
room.addAudioInput(audioInput)。 。 。 . - 打电话
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社区的一部分.
X (原Twitter) (中文(简体) )
给我们打个电话 @ODIN4 请检查url=值 (帮助). 玩家。 。 。 .
电子邮件
扶养费
更新依赖关系时使用 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 工程配置是本地到安装根.
