Skip to content

Repository files navigation

POIO

POIO

面向朋友与小型社区的 Windows / macOS / Android / Web 语音、聊天、低延迟屏幕共享与社交小游戏平台。

下载最新版 · POIO 官网 · ModelScope 镜像

当前版本:POIO 1.5.1,提供 Windows x64、macOS Apple Silicon、Android arm64 与网页版。桌面在线更新和官网下载使用 ModelScope;安装包尚未进行代码签名,首次运行时可能显示系统安全提示。

游戏从 1.3.0 起采用独立插件注册机制;新增游戏请阅读 POIO 游戏开发手册

正式发布统一由 GitHub Actions 的 Release POIO 工作流完成:验证源码后并行构建 Windows、Android 和 macOS,创建 GitHub Release、同步 ModelScope,并在所有构建成功后自动部署服务器和网页。

已实现功能

  • POIO 游戏中心:2–6 人联机 21 点、Mines、社区多人 Crash、5×3 霓虹转轴、幸运大转盘、联机五子棋、2–6 人德州扑克和 8 球台球。多人 21 点支持共享庄家、顺序操作、邀请、观战、超时托管和独立结算。所有下注与结算均由服务端判定,每局公布 SHA-256 随机种子摘要并在结束后公开原始种子。娱乐积分不可充值、提现或兑换。
  • 原生 Mumble + Opus 语音链路,支持输入/输出设备切换、麦克风测试、实时音量反馈、静音、关闭声音、挂断与自动重连。
  • Windows 原生全局静音快捷键与按住说话,支持键盘组合键和鼠标侧键,POIO 在托盘后台时仍然生效。
  • Windows 的成员说话动画、麦克风状态和托盘提示直接读取 Mumble 原生发送状态,按键说话模式下不会把未发送的环境音误判为正在说话。
  • 语音频道支持进入和离开提示音:进入者自己与频道内其他成员均可听到,支持账号级自定义加入音、试听、恢复默认和本地关闭;多开与短暂断线重连不会重复播放。
  • 麦克风与听筒的关闭、恢复均使用独立提示音;听筒关闭遵循 Mumble 规则,同时关闭接收声音和麦克风。
  • 语音频道成员列表、说话状态提示,以及本地独立调节其他用户音量(0%–200%)。
  • 社区创建、邀请码加入、已加入社区记忆,以及文字/语音频道管理。
  • 社区支持分享 HTTPS 邀请链接;已安装 Windows 客户端时通过 poio:// 直接唤起,未安装时显示 POIO 下载页,登录后会继续处理待加入邀请。
  • 频道聊天支持图片、文件、中文文件名、拖放/粘贴附件、区域截图、Markdown、GFM 和代码块;并支持回复、编辑、撤回、表情回应、@ 提醒、消息搜索、频道草稿和未读标记。
  • 支持 PNG、JPG、WebP、GIF 自定义头像,GIF 可作为动态头像显示。
  • 社区拥有者可以修改社区和频道名称、删除频道、踢出成员、禁止成员发送聊天消息,并通过 Mumble 服务端强制关闭成员麦克风。
  • 混合 WebRTC 屏幕共享:Windows 观看者优先 P2P 直连,全部直连成功后暂停重复的 SFU 上行;P2P 失败、新观看者连接中或 Android 加入时立即恢复 mediasoup SFU。提供 720p30、1080p30、1080p60 和原画档位,支持系统音频、全屏观看、实时分辨率/帧率/码率/延迟/丢包诊断与共享结束清理。
  • 客户端内检查更新、后台下载和重启安装。
  • Android 版支持登录状态恢复、原生 Mumble 语音、语音房间内独立聊天入口、回复/编辑/撤回/表情回应/消息搜索、附件、动态头像、观看桌面共享(可独立控制共享声音)、断线状态卡、应用内下载进度与安装更新。

架构

模块 实现
Windows 客户端 Electron、React、TypeScript、隔离的 preload IPC
Android 客户端 Kotlin、Jetpack Compose、NDK/JNI、AAudio、libmediasoupclient
语音 修改后的原生 Mumble 客户端、Mumble Server、Opus
业务与实时状态 Node.js、Express、Socket.IO
屏幕共享 WebRTC P2P 优先、mediasoup SFU 兜底、VP8/H.264(取决于系统能力)
数据 SQLite、Argon2id 密码哈希、随机会话令牌的 SHA-256 摘要
部署 Docker Compose,反向代理负责 HTTPS/WSS

语音不是在 Electron 中重新实现的:安装包内包含 POIO 修改并编译的 Mumble 原生运行时,Electron 通过本地命名管道控制连接、设备、音量与状态。屏幕视频走独立的 WebRTC 链路:一至两名新版 Windows 观看者优先与分享者直连,直连稳定后暂停重复的 SFU 上行;直连失败、观看人数超过限制或使用 Android 时自动恢复 mediasoup SFU 转发。界面会显示当前是 P2P、TURN 还是服务器转发,并展示实际画质与网络诊断数据。

Mumble 原生来源

本项目的原生语音改动基于 mumble-voip/mumble 提交 a4c981af。完整改动保存在 native/mumble/poio-mumble.patch,重建说明见 native/mumble/README.md。安装包内的 Mumble 许可文本保存在 apps/desktop/resources/mumble/MUMBLE-LICENSE.txt

使用发行版

  1. POIO 官网 下载 Windows、macOS 或 Android 客户端。
  2. 安装并注册/登录账号。
  3. 创建社区后复制邀请码给朋友;朋友首次加入后,社区会保留在左侧列表,不必每次重新输入。
  4. 进入语音频道即可连接 Mumble 原生语音;“共享屏幕”可选择来源和清晰度。

本地开发

要求:Windows 10/11 x64、Node.js 22 或更高版本、npm。服务端容器部署还需要 Docker Compose。

git clone https://github.com/shi0712/POIO.git
Set-Location POIO
npm install
Copy-Item apps/server/.env.example apps/server/.env
npm run dev

桌面端默认连接 POIO 公网服务。开发自建服务时设置 VITE_SERVER_URL,例如:

$env:VITE_SERVER_URL = 'https://voice.example.com'
npm run dev

常用命令:

npm test          # TypeScript 与服务端测试
npm run build     # 构建服务端和桌面端
npm run dist:win  # 生成 Windows NSIS 安装包

npm run dist:win 会把 apps/desktop/resources/mumble/ 中的原生 Mumble 运行时一同打包。当前仓库保留这组已验证的 Windows x64 二进制,方便复现发行包。

Android

Android 工程位于 apps/android/,要求 JDK 17、Android SDK 36、NDK 28.2.13676358 和 CMake 3.22.1。仓库包含 arm64 版原生 libmumble 运行库,不包含本地 SDK、Gradle 缓存或 APK 构建产物。

apps/android/local.properties 中配置 sdk.dir 后运行:

Set-Location apps/android
.\gradlew.bat :app:testDebugUnitTest :app:assembleDebug :app:lintDebug

调试 APK 输出到 apps/android/app/build/outputs/apk/debug/app-debug.apk。当前只支持 arm64-v8a;升级安装必须继续使用同一 Android 签名密钥。

服务端部署

复制根目录配置样例并修改公网地址与所有密码:

cp .env.example .env
docker compose up -d --build

反向代理应把 HTTPS/WSS 请求转发到本机 127.0.0.1:17920。生产防火墙至少放通:

端口 协议 用途
443 TCP 官网、API、Socket.IO、更新与上传下载
64738 TCP + UDP Mumble 语音连接
3478 UDP P2P 的 STUN 地址发现(部署本机 STUN/TURN 时)
42000–42100 UDP mediasoup/WebRTC 屏幕共享媒体

17920/TCP(应用服务)与 6502/TCP(Mumble Ice)只供服务器本机使用,不应直接暴露到公网。P2P_STUN_URLS 可配置多个逗号分隔的 STUN 地址;TURN 是可选项,因为直连失败时 POIO 会自动保留 SFU 画面。若配置 P2P_TURN_URLS,还需配置用户名和密码并限制中继端口范围。P2P 会让连接双方能够获知彼此的公网地址,媒体内容仍由 WebRTC 加密。

安全与许可

不要提交 .env、证书、数据库、上传内容或真实密码;这些路径已加入 .gitignore。POIO 自有代码目前未声明开源许可证;仓库公开不等同于授权复制或再发行。Mumble 与 npm 依赖分别遵循其自身许可证,详情见 THIRD_PARTY_NOTICES.md

About

基于原生 Mumble 的 Windows / Android 语音、频道聊天与低延迟屏幕共享客户端

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages