一、 什么是 Chiaki-ng?
Chiaki-ng(前身为 chiaki4deck)是一款免费、开源的 PlayStation(PS4/PS5)远程游玩(Remote Play)第三方客户端。
其主要用处在于允许玩家在非索尼官方授权的设备(如 Mac、Windows、Linux、Steam Deck 等)上串流游玩 PS 主机游戏,并提供官方客户端不具备的高级功能,例如 HDR 支持、DualSense 手柄的完整触觉反馈及自适应扳机支持、自定义按键映射以及更精细的码率控制。
发展历程:Chiaki-ng 脱胎于最初的开源项目 Chiaki(由开发者 thestr4ng3 创立)。随着原项目更新停滞,开发者 StreetPeanut 及其社区团队在其基础上进行了大量重构和功能扩展,最初专为 Steam Deck 优化(命名为 chiaki4deck),后因其跨平台表现优异,正式更名为 Chiaki-ng(Next Generation),成为目前最稳定且功能最全面的 PS 串流工具。
官方下载网站(GitHub Releases) :
https://github.com/streetpea/chiaki-ng/releases
二、 核心概念解析:NPSSO 与 b64_id
在配置 Chiaki-ng 时,第三方客户端无法像索尼官方 App 那样实现自动静默授权,因此需要用户手动提取并转换底层数据。这里涉及两个核心概念:
-
NPSSO (Network PlayStation Single Sign-On)
这是索尼官方的单点登录令牌(Token)。简单来说,它就像是用户在网页浏览器登录索尼 PSN 账号后,官方发放的一张"临时电子通行证"。该令牌通常为一串 64 64 64 位的纯字母和数字组合,有效期约为 2 2 2 个月。利用它,开发者工具可以向索尼服务器证明身份并拉取账号底层数据。
-
b64_id (Base64 Account ID)
在索尼的底层数据库中,每个 PSN 账号都有一个全球唯一的 64 64 64 位( 8 8 8 字节)数字 ID(即 Account ID)。Chiaki-ng 软件在注册主机时,强制要求必须提供经过 Base64 格式编码的 Account ID(即 b64_id)。
-
为什么官方没直接给出这个 ID?
因为远程游玩协议是索尼的闭源商业机密。官方客户端通过底层的 OAuth 协议在后台自动完成了鉴权与 ID 交换,根本不需要向普通用户展示这串机器代码。第三方开源软件为了绕过加密屏障,只能要求用户手动获取并填入这一关键参数。
三、 详细实操:获取专属的 Base64 Account ID
过去依赖第三方网页(如 psn.flipscreen.games)一键转换的方法往往因服务器被封锁或网站 404 而失效。以下是完全依赖 Mac 本地环境抓取并计算 b64_id 的硬核方法,该方法可从根本上避免缓存导致的大小号串号问题。
步骤 1:提取真实 NPSSO 凭证
- 强烈建议打开浏览器的 无痕模式/隐私窗口(避免主副账号 Cookie 混淆)。
- 访问索尼 PlayStation 官网:https://www.playstation.com ,登录需要绑定的 PSN 账号。
- 登录完成后,在同一个无痕窗口的地址栏输入索尼官方鉴权接口并访问:
https://ca.account.sony.com/api/v1/ssocookie - 页面只会显示一行简单的文本,格式如
{"npsso":"64位长字符串"}。请将引号内的 64 64 64 位纯数字和字母组成的字符串完整复制备用。
步骤 2:Mac 终端环境配置
-
打开 Mac 系统自带的 终端 (Terminal)。
-
若此前未安装过索尼接口插件,请先输入以下命令并回车安装:
bashpip3 install psnawp
(如已安装可跳过此步)。
PSNAWP 库简介:PSNAWP (PlayStation Network API Wrapper in Python) 是一个第三方 Python 库。它的作用是封装索尼 PlayStation Network 的未公开 API。通过提供有效的 NPSSO 令牌,这个库允许开发者通过编写 Python 脚本来模拟官方客户端的请求,从而实现查询 PSN 用户信息、获取游戏奖杯、查看在线状态等功能,极大地简化了与索尼服务器的交互过程。
- 安装完成后,输入
python3并回车,进入 Python 交互环境(此时命令行提示符会变成>>>)。
步骤 3:运行代码计算小端序 Base64 ID
这里需注意一个严重的技术陷阱:常规转换使用的是大端序,而 Chiaki-ng 底层严格要求 8 8 8 字节 小端序(little-endian) 。若序列错误,注册时必然触发 0x80108b02 (Invalid PSN ID) 报错。
另外如果在排版时为了方便阅读,在注释和代码之间加入了完全空白的行。
那么在 Python 终端里,当你处于 try: 这样的缩进块内部时,一旦它读取到一个没有任何空格的纯空行,终端就会默认"这个代码块已经结束了"。
结果就是,它提前把 try: 给关了。紧接着读取到下一行 user = ... 时,发现前面居然有 4 个空格,于是立刻报错 unexpected indent(意外的缩进)。后续的 except 也因为找不到配对的 try 而报语法错误。
请修改下方代码中的 npsso(替换为步骤 1 中抓取的值)和 online_id(替换为你实际的 PSN ID),然后将其完整复制粘贴到 Mac 终端中执行(粘贴后需按回车键触发执行):
python
import base64
from psnawp_api import PSNAWP
npsso = "nb1oK141505MYJ56znpfdzYts2EtukEBrBZ3aEsZ2Orgq5BrB6zj8BJbbcGeNw6X"
try:
psnawp = PSNAWP(npsso)
user = psnawp.user(online_id="Geoffry-librom")
account_id_int = int(user.account_id)
b64_id = base64.b64encode(account_id_int.to_bytes(8, 'little')).decode('utf-8')
print(f"\n===========================================")
print(f"真正的、小端序 Base64 ID 是:")
print(f"{b64_id}")
print(f"===========================================\n")
except Exception as e:
print(f"\n获取失败: {e}")
代码深入解析
b64_id = base64.b64encode(account_id_int.to_bytes(8, 'little')).decode('utf-8') 这行代码完成了从数字 ID 到 Chiaki-ng 可识别的 Base64 字符串的核心转换,分为以下三个动作:
.to_bytes(8, 'little'):索尼的 Account ID 是一个 64 64 64 位整数(即 8 8 8 个字节)。在计算机存储中,多字节数据的排列顺序分为大端序(高位字节存放在低地址)和小端序(低位字节存放在低地址)。Chiaki-ng 软件的底层通信协议强制要求这个 8 8 8 字节的 ID 必须以小端序 (little-endian) 进行排列。此函数的作用就是将提取到的整数 ID 转换为严格符合规范的 8 8 8 字节小端序二进制数据流。base64.b64encode(...):二进制数据流无法直接在软件输入框中输入。Base64 是一种基于 64 64 64 个可打印字符来表示二进制数据的编码方式。该函数将前一步生成的小端序二进制数据转换成由字母、数字和符号(如+,/,=)组成的 Base64 编码格式,以满足 Chiaki-ng 的输入要求。.decode('utf-8'):Base64 编码后输出的默认格式是字节串(bytes,即带有b''前缀),通过decode('utf-8')将其解码为标准的纯文本字符串(string),以便用户能够直接复制。
四、 PS5 主机端配置:获取远程游玩 PIN 码
代码准备完毕后,需要让 PS5 主机开启配对通道。
- 启动 PS5 主机。
- 务必确保当前屏幕登录的是你要绑定的目标 PSN 账号。
- 依次进入:设置 -> 系统 -> 远程游玩 -> 关联设备。
- 此时屏幕上会生成一组 8 8 8 位数字的 PIN 码(该验证码有时间限制,约 5 5 5 分钟有效,若过期需重新点击获取)。
五、 Chiaki-ng 端注册与避坑总结
回到 Mac 的 Chiaki-ng 软件界面:
- 点击右上角 Add Manual Host(添加手动主机)。
- 填写 IP 等信息后,在 PSN Account-ID 框中,填入通过 Python 算出的 Base64 格式代码(必须包含最后的等号)。
- 在 Remote Play PIN 框中,填入 PS5 屏幕上显示的 8 8 8 位数字。
- Console Pin Optional 代表 PS5 主机的四位数登录锁屏密码,若未设置则留空不填。
- 选择 PS5 后点击 Register。
常见错误排查
| 错误现象 | 主要原因 | 解决方法 |
|---|---|---|
0x80108b02 (Invalid PSN ID) |
账号身份不匹配,或 Base64 ID 字节序错误。 | 确认 Python 脚本计算的目标账号与 PS5 当前登录账号一致;确保使用了 little-endian(小端序)编码。 |
| 注册成功但列表未显示新图标 | Chiaki-ng 默认以 IP 为主键,同 IP 下新账号图标可能被折叠。 | 删除旧的连接记录,或双击现有图标直接连接测试;多账号建议配合官方客户端进行隔离使用。 |