Apollo 迁移指南:从 GameStream 到 UPnP 公网串流

发布时间:2026/11/5 7:43:10

Apollo 迁移指南:从 GameStream 到 UPnP 公网串流 Apollo 迁移指南从 GameStream 到 UPnP 公网串流【免费下载链接】ApolloSunshine fork - The easiest way to stream with the native resolution of your client device项目地址: https://gitcode.com/gh_mirrors/apollo18/ApolloNVIDIA 在 2023 年 2 月终止了面向 NVIDIA Games 客户端的 GameStream 服务而 Apollo一个以客户端设备原生分辨率串流为目标的 Sunshine fork的性能已达到或超过 GameStream客户端仍可直接使用 Moonlight无需更换。本文讲清两件事如何用 GSMS 工具把原有游戏条目搬进apps.json以及 Apollo 内置的 UPnP 公网串流机制、配置项和常见故障的排查思路。结论先行什么情况值得直接迁移判断很简单只要你的客户端是 Moonlight迁移就是换服务端、不换客户端成本最低。串流质量官方文档明确 Sunshine 性能已达到或超过 GameStream见 docs/gamestream_migration.md公网串流原来依赖 Moonlight Internet Hosting Tool 打洞的迁移后可直接移除该工具改用 Apollo 内置的 UPnP 端口映射需要接受的差异能力GameStreamApollo自动扫描并列出已安装游戏支持不支持依赖apps.json条目或 GSMS 迁移结果自动调整游戏内设置优化串流支持不支持需用prep-cmd等手段自行编排互联网串流依赖 NVIDIA 云服务本地 UPnP 端口映射无需额外服务如果游戏库很小手工在apps.json里写几条就够用条目多、怕出错再上 GSMS 自动迁移。GSMS把游戏条目一次性搬进 apps.jsonGSMSGameStream Migration Service是官方为迁移场景提供的自动化工具。它能把你 GameStream 里的自定义应用和自动检测到的游戏一起迁走具体落点是每个条目的工作目录、启动命令写入apps.json封面图box-art复制到你指定的目录apps.json默认与主配置文件同目录Linux/macOS 为~/.config/sunshineWindows 为%ProgramFiles%\Sunshine\configDocker 为/config首次启动时由内置模板复制生成src/config.cpp 中APPS_JSON_PATH的拷贝逻辑。文件默认模板长这样// src_assets/linux/assets/apps.json { env: { PATH: $(PATH):$(HOME)/.local/bin }, apps: [ { name: Low Res Desktop, image-path: desktop.png, allow-client-commands: false, prep-cmd: [ { do: xrandr --output HDMI-1 --mode 1920x1080, undo: xrandr --output HDMI-1 --mode 1920x1200 } ] } ] }顶层env定义所有应用共享的环境变量$(PATH)、$(HOME)这类占位符在运行时展开apps数组里每个条目就是一个可串流启动的应用。解析逻辑在 src/process.cpp常用字段如下字段类型默认值含义namestring必填显示在客户端的名称cmdstring空启动命令working-dirstring空工作目录Windows 上会自动去引号并补反斜杠image-pathstring空封面图路径须为 PNGelevatedboolfalse是否提升权限运行auto-detachbooltrue自动分离进程wait-allbooltrue等待所有子进程退出exit-timeoutint5退出判定超时秒prep-cmdarray空启动前/退出后执行的命令每项含do、undo、elevateddetachedarray空独立于主进程启动的附加命令virtual-displayboolfalse是否使用虚拟显示器allow-client-commandsbooltrue是否放行 AltTab 等客户端命令uuidstring必填应用唯一标识Web UI 增删改依赖它两个实用细节全局准备命令global_prep_cmd会在所有应用启动前执行任一条失败就中止启动docs/configuration.md 中的示例用nircmd.exe临时切换分辨率undo再切回Web UI 提供GET /api/apps和POST /api/apps两个 REST 接口src/confighttp.cpp新增或编辑应用后调用proc::refresh热刷新不用重启 Sunshine。迁移完成后建议在这个页面上逐条核对cmd、working-dir、image-path是否指向正确路径UPnP 公网串流的内部机制想从外网串流前提只有一个路由器支持 UPnP。开启方式是 Web UI 打开 UPnP 选项或在配置文件中写# docs/configuration.mdNetwork 一节 upnp enabled配置解析在 src/config.cpp读到upnp enabled后翻转flag::UPNP标志位src/upnp.cpp 的upnp::start()发现该标志未置位就什么都不启动否则创建一个后台映射线程。线程启动时先组装端口映射清单基址是port默认 47989实际映射的 6 个端口为端口协议路由表中的描述48010TCPSunshine - RTSP47998UDPSunshine - Video48000UDPSunshine - Audio47999UDPSunshine - Control47989TCPSunshine - Client HTTP47984TCPSunshine - Client HTTPS只有当origin_web_ui_allowed设为wan时才会额外映射 47990Web UI 端口——默认lan下管理端口不对外开放这是安全设计不是 bug。映射线程的工作节奏src/upnp.h中两个常量REFRESH_INTERVAL 120s每 120 秒重新发现 IGDInternet Gateway Device即支持 UPnP 的路由器并逐端口核对映射。注释里写明原因路由器重启、WAN IP 变化等都会让映射丢失必须周期刷新PORT_MAPPING_LIFETIME 3600s映射租约 1 小时到期前被刷新逻辑续上每个端口的处理顺序先用UPNP_GetSpecificPortMappingEntry查是否已映射目标 IP 一致就直接跳过被别的设备占用则记UPnP conflict detected并尝试删除重建如果路由器返回异常错误非 606 Unauthorized会判定为老旧的 IGDv1 设备退化为 0 秒租约的永久映射来兼容。另外若address_family both且 IGD 支持 IPv6 防火墙控制会额外为每个 LAN 端口打 IPv6 pinholeIPv6 下没有 WAN→LAN 端口映射概念。Sunshine 退出时调用unmap_all_upnp_ports清理全部映射。相关配置项速查配置项默认值说明upnpdisabled是否启用内置端口映射port47989端口族基址改动后上表所有端口整体偏移address_familyipv4ipv4仅 IPv4both为 IPv4IPv6origin_web_ui_allowedlanpc/lan/wan三级决定 Web UI 是否对外external_ip自动检测手动指定公网 IP留空则自动⚠️ 一条官方警告Moonlight Internet Hosting Tool 低于 v5.6 的版本与 Sunshine 同时运行会导致 UPnP 端口转发变得不可靠。迁移时直接卸载它或至少升级到 v5.6 及以上。连不上时按这个顺序排查外网串流失败大多是映射没生效或映射被占日志里都有对应线索发现不到 IGD日志出现Couldnt discover any IPv4 UPNP devices或No IGD device found说明路由器没开 UPnP或根本不支持。到路由器后台开启 UPnP/远程端口映射后等 120 秒内线程自动重试即可映射存在但指向别处日志出现UPnP conflict detected with: IP表示端口被局域网内其他设备占用。Apollo 会尝试删除对方映射后重建部分路由器出于安全禁止未认证客户端删除他人映射此时需手动到路由器后台清理旧规则路由器重启后短暂连不上属正常现象。映射丢失后线程会在下一轮最多 120 秒重新发现 IGD 并补建映射同时打印Completed UPnP port mappings提示改了port却忘了客户端port一改上表 6 个端口全部偏移Moonlight 侧需要按新端口重连手动在路由器上转发端口的用户要同步更新规则想从外网管 Web UI 却连不上确认origin_web_ui_allowed已设为wan否则 47990 端口根本不会进入映射清单公网 IP 探测不对多出口/NAT 环境下自动检测可能失败用external_ip手动指定日志级别调到 debug 可以看到每一步查映射、建 pinhole、失败回退永久映射等细节Successfully mapped TCP 47989这类输出都在这条线程里。什么时候不适合这套方案路由器不支持 UPnP部分运营商定制路由关闭了该功能内置映射无从生效只能手动配置路由器端口转发本文机制不覆盖游戏库更新频繁Apollo 不会自动扫描新装游戏新游戏不会自己出现在串流列表里需要重新跑一次 GSMS 或在 Web UI 手工添加希望服务端替你调优游戏GameStream 会自动改游戏内设置适配串流Apollo 不会干预游戏内部配置。替代做法是用prep-cmd/state-cmd在串流前后执行自己的命令切分辨率、开低延迟模式等把 GameStream 的自动化换成脚本化收个尾迁移本身是一次性动作GSMS 跑一遍 核对apps.json真正的长期成本在网络侧。UPnP 开关只影响 6 个固定端口的映射日志每 120 秒一轮自检出问题时先看映射状态再看 IP基本能定位九成故障。【免费下载链接】ApolloSunshine fork - The easiest way to stream with the native resolution of your client device项目地址: https://gitcode.com/gh_mirrors/apollo18/Apollo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/5 7:43:10

LMMS 音频插件怎么选、扫不到怎么修?一篇实战排障手册

LMMS 音频插件怎么选、扫不到怎么修?一篇实战排障手册 【免费下载链接】lmms Cross-platform music production software 项目地址: https://gitcode.com/gh_mirrors/lm/lmms LMMS 音频插件分 LADSPA、LV2 和 VST 三个家族。新手最常见的卡点就三个&#xff…

2026/11/5 7:38:10

ADS122U04+STM32L476RG:工业与HVAC精密温度采集系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 8:23:15

Go安全测试工具工程化:并发超时、字节解析与限速审计

1. 先把“黑帽子”这三个字摆到台面上:Go 在安全测试里真正吃香的三件事前阵子帮一个做内部资产盘点的团队看代码,他们用某个脚本语言写的探测工具,扫完一个 /16 的网段要跑将近四个小时,中间还因为网络抖动卡死在某个地址上&…

2026/11/5 8:23:15

校园网POST自动认证:抓包还原、断线重连与守护进程

校园网认证这件事,说小很小,说烦是真烦。每天打开电脑,浏览器弹出一个认证页面,输入账号密码,点登录,一天掉线三五次,每次都得重来一遍。如果手上还有一台常年开着的开发机、一台树莓派、几台虚…

2026/11/5 8:23:14

IT运维实战:故障排查与应急处置手册

1. 项目概述:IT运维人员的实战急救手册在机房凌晨三点刺耳的报警声中,在CEO会议室投影仪罢工的尴尬时刻,在财务系统突然崩溃的月末关账日——这些场景构成了IT运维人员的日常战场。"IT疑难杂症诊疗室"不是教科书式的理论百科&#…

2026/11/5 8:23:14

Android中国象棋源码:规则引擎与Alpha-Beta搜索落地

简介:这份 Android 中国象棋源码基于 Java 与 Android Studio 构建,面向希望借助完整可运行项目入门移动游戏开发的初学者与进阶者,覆盖棋盘绘制、棋子走子规则、触摸事件响应、胜负判定与 AI 对弈等核心环节,可用于课程设计、自学…

2026/11/5 8:23:14

O2O系统中台架构设计与实践指南

1. 同城O2O系统与中台架构的必然结合 去年我参与改造某连锁超市的O2O系统时,发现他们前端有7个业务App(会员/配送/团购等),后端却用了12套重复的库存服务。每次促销活动,技术团队都要通宵改代码。这让我深刻意识到&…

2026/11/5 8:18:14

CY8CMBR3116触摸驱动与CT1642显示实战:从I2C时序到避坑指南

简介:这份资源面向使用8051系列单片机的嵌入式开发者,提供CY8CMBR3116电容触摸传感器在C51平台上的完整驱动实现,并配套CT1642液晶驱动,解决触摸按键检测与键值显示的一体化控制问题。压缩包共30个文件,约54KB&#xf…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑