[I.2] 个人作业:软件案例分析
项目 | 内容 |
---|---|
这个作业属于哪个工程 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2025_LR |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2025_LR/homework/13367 |
我在这个课程的目标是 | 学习团队软件开发方式, 丰富开发经验 |
这个作业具体在哪个具体方面帮助我实现目标 | 学习优秀的软件案例. 提升自我对软件设计的理解 |
0. 选题
选择题目4, 开源软件
电子设备种类丰富的今天, 设备之间关联成为工作娱乐中提升体验的重要一环, 而跨屏幕远程操作就是其中重要的一部分, 可以实现拓充屏,外置主机等多种效果, 适用场景广泛.
sunshine+moonlight是开源项目LizardByte下的串流远程软件, 目前仍在活跃更新. 正如软件名称形象的比喻, sunshine运行于服务端发出串流数据, moonlight用户侧接受数据实现远程效果.
相关链接:
-
LizardByte
-
LizardByte/Sunshine: Self-hosted stream host for Moonlight.(后文使用的官方release)
-
Moonlight Streaming Project
-
GitHub - qiin2333/Sunshine-Foundation: Sunshine Enhanced Edition(更高自定义化的魔改版,笔者自用版本)
1. 使用流程
作为远程串流相关软件, 这里选择最常用的两个场景, 分屏办公为例与游戏远程操作
-
用户端与服务端软件安装与配对
-
服务端: 笔记本电脑win11系统下运行sunshine, 可打开webUI
-
用户端: 平板电脑OPD2101, android colorOS13. 运行moonlight应用
-
配对操作: 双端连接无代理局域网(使用校园网开放热点), 此时用户端已可以检测到电脑端,按照引导点击使用PIN码完成配对, 配对完成后使用
-
用户端点击Desktop项,即可看到主屏幕投影, 此图为用户侧使用效果截图, 平板触控映射为笔记本电脑触碰板, 可以正常使用蓝牙连接的键盘,鼠标,手柄等外设(左上角为串流状态参数面板)
-
-
办公分屏模拟
-
配置虚拟分屏, 抓取分屏配置信息并在sunshine配置=>Audio/Video=>输出名称中指定输出为虚拟屏幕.
配置应用后串流活动会自动重启, 用户端可见到虚拟分屏内容,下图左侧为电脑端, 右侧围平板端, 鼠标窗口操作可以无缝连接
-
在笔者最常用的代码场景, 采用主屏ide,分屏监视控制台的方式, 正常使用无延迟感.
窗口操作跨屏兼容良好, 可以无缝拖拽
此后笔者连续使用两小时, 未出现断联, 画面bug等, 整体效果与实体连线分屏无明显差距.
-
-
游戏投屏配置
-
硬件配置: 使用外置主机思路, 电脑核心,显卡用于主屏渲染, 投屏至平板.
sunshine方面, 在配置 => NVIDIA NVENC Encoder => 配置显卡编码加速
低性能要求游戏(这里选用夜雀食堂, 小碎骨可爱), 基本没有卡顿延迟感, 仅在快速操作时存在细微拉扯感, 整体游玩体验优秀
高性能要求3D游戏(选用Monster Hunter World), 由于高显卡占用, 视屏流编码gpu加速几乎无效, 画面帧率仍维持60fps上下,但出现明显模糊现象. 延迟陡升, 体感明显.整体体验差, 几乎无法游玩
-
2. 分析评价
- 概述
首先作为远程工具, sunshine+moonlight在性能方面表现是相当出色的参考社区文档描述, sunshine+moonlight方案下, 远程投屏以视频流的方式实现, sunshine能够智能检测屏幕变化并采取合适的输出帧率.
日常简单办公场景中延迟稳定20ms以下, 跨屏操作流畅便捷, 连续使用(测试时间2h)中表现稳定, 未出现明显bug. 低性能要求游戏整体表现类似, 只是由于画面变化更频繁, 延迟相应地增加到了100ms上下, 但不足以影响体验.
高性能要求游戏中, 过高的延迟导致几乎无法游玩, 但是必须承认软件本身是不可能突破硬件性能上限的, 在笔者本就高负荷运行的机器上要求实现优秀的串流效果还是有些强"人"所难, 据其他使用者描述, 在性能条件充足的情况下, sunshine+moonlight还是能够有优秀的表现的.笔者的3060本已经落后力(悲)
- 实测数据
整理操作中记录的一些数据, 可供对比感受并进一步猜测分析
数据来源: moonlight性能检测工具, 任务管理器性能监测工具
项目 | 办公(代码调试) | 低性能要求游戏 | 高性能要求游戏 |
---|---|---|---|
延迟/(抖动) | 14ms/(5ms) | 68ms(42ms) | 796ms(146ms) |
帧率(fps) | 5~80(适应操作频率) | 60(基本稳定) | 40~60(基本稳定) |
CPU占用率/(总占用率) | 1%~10% /(30%) | 约15% / (40%) | 约15% /(54%) |
核显占用率/(常态占用率) | 17%/(17%) | 22%/(20%) | 58%/(20%) |
独显占用率/(常态占用率) | 1%~8%/(1%) | 10%/(2%) | 96%/(97%) |
补充说明:
-
CPU占用率这里指
sunshine+虚拟屏
进程在任务管理器中占比显示, 总占用率取显示总占用-任务管理器
-
核显(独显)占用率/(常态占用率) :由于笔者没有掌握监测进程GPU占用情况的方法, 这里采用对比法, 即 运行了sunshine时的占用 / 普通使用时的占比, 笔者认为这在一定程度上也能反映性能消耗问题
一点小推测:
- 由GPU占用情况推测, 可能独显高占用时sunshine自动切换到了核显编码, 但效果不佳, 造成了较高延迟与画面模糊问题
- 调研
事实上, 笔者原本并不是很了解网络串流这一领域, 使用这类软件的契机来源于乐于分享的同学X, 同学X使用串流工具时间久, 且常用设备多元, 串流远程使用需求大, 这里对他进行了一段采访
采访中可以看到同学X将sunshine+moonlight视为一套局域网小规模串流远程的解决方案, 并且对于这款开源软件的便捷性与社区环境十分看好, 同时也提出了部分功能(如远程穿透)的引导不完善, 官方版本与民间魔改版之间缺少整合的问题.
- 评测结论:
笔者给出最高评价 e)非常推荐, sunshine+moonlight在匹配的应用场景下表现优秀, 社区活跃, 文档/插件/魔改多元, 功能强大, 是一套高效易上手的串流远程解决方案
- 改进意见
-
完善一些进阶功能的使用引导
-
给出民间插件/魔改版等的整合平台, 方便用户按需获取个性化的服务
3. bug分析与提交
-
bug分级:
-
五星: 重大安全漏洞, 服务功能完全不可用, 且对软件状况甚至用户系统造成损坏
-
四星: 业务性恶性bug, 服务暂时不可用, 但可以通过简单的设置或重启修复
-
三星: 部分功能暂时不可用, 可以通过手动修改相关设置修复
-
两星: 部分功能使用效果下降, 但对正常使用影响不大
-
一星: 基本不影响服务功能,仅会暂时带来一些迷惑性结果
-
-
运行环境:
-
电脑: AMD Ryzen 7 6800H withRadeon Graphics 3.20GHz + NVIDIA GeForce RTX3060, win11 23H2 64位操作系统
运行sunshine Version2025.0303.134612
-
平板电脑: 高通骁龙870八核 ColorOS 13.1
运行moonlight Version 12.1
-
串流方式: 局域网串流
-
-
bug描述
-
三星
适配器抓取bug: 在集显独显混合输出情况下, 使用sunshine内置的虚拟屏创建方案无法抓取到独显, 判断这并非独显不在运作, 因为相同情形下使用parsec(另一套远程方案)能够正常创建独显输出虚拟屏查找社区issue相关讨论, 独显核显混合输出模式下的硬件适配涉及设备欺骗问题, 官方给出的推荐方案为显卡欺骗器(一个HDMI接口硬件插件), 据社区反馈该方法是快捷有效的.正常使用中笔者使用纯独显输出, 此时这个问题不会出现, 也可作为一种解决方案.
但是在笔者的理解中, 既然同类型软件(如parsec)在相同情况下不会出现类似问题, 那么这一问题在软件层面一定是可以解决的. 而在软件理论上可以解决的情况下硬件显然不是最佳方案, 问题还是高概率出现在sunshine软件本身上,可能是虚拟屏相关功能设计不完善.
-
两星
,非自适应输出视屏流情形下, 用户侧锁帧率60fps.sunshine配置 => Audio/Video => 显示设备设置 => 分辨率调整 设定为忽略客户端的分辨率要求, 即按照输出屏幕的分辨率配置输出视频流.
由于输出屏幕与客户端屏幕可能不同, 客户端会进行相应的缩放, 但意外的是帧率方面出现了限60帧的现象.
此时两端载荷均维持较低水平, 可以排除性能约束, 且在自适应输出视屏流情况下帧率可以轻松达到80fps或更高.
推测可能客户端进行对视频流解码缩放时有垂直同步配置, 这可能是moonlight相关设计中的约束策略, 但笔者认为应当给予相应的提醒, 或提供相应的帧率上限配置选项.
4. 软件分析
-
工作量分析:
正如前面提到的, sunshine+moonlight来自开源项目LizardByte, 这是一个专注云游戏服务的开源项目, 至今以有月5年的活跃历史, 当前活跃开发者有570余人. sunshine+moonlight是这样一个专业社区长期沉淀的集中体现之一
-
首先, 软件设计方面, sunshine+moonlight的webUI与应用外壳并没有太大的设计难度, 估计一周即可, 基本可忽略不计. 设计难点在于底层串流方案,, 虚拟硬件设计方案, 这需要学习大量的网络知识, 以及不同设备平台的特色, 保守估计也要3个月以上才能实现一个相对完善的设计
-
具体架构与开发: 这将是一个巨大的工程
需要开发的关键功能包括虚拟硬件管理, 数据编解码与发送, 这些功能贴近底层, 这意味着恐怕无法找到一个便捷的跨平台方案, 按目前LizardByte项目目前的状况, 各个平台都有这一套复杂的实现方案来达到稳定的性能表现, 而这样的平台目前已经实现了超过15个, 这对于6名计算机本科生组成的团队将会是巨大的挑战, 单个平台开发,测试,优化工作量按6个月计算, 考虑部分实现的复用, 总计估计至少为5年.
-
用户反馈, 迭代优化:
这是一个长期的过程, sunshine+moonlight丰富的文档引导, 大量自定义化的插件需要长时间的积累, 这恐怕难以估算. 这里笔者假设为6个月, 这大约足够建立一个比较成熟的人员管理体系来实现规范化的维护与持续优化工作.
概括起来, 总工作量估计为6年上下. 当然笔者并非相关专业人士, 仅是凭着粗浅的工作经验给出估算, 仅供参考.
-
-
软件质量分析
在串流远程领域竞品软件本身并不多, 高度相似且使用率较高的软件笔者进了解到parsec一款, 此外类似的还有steamlink, shuttleX等, 但指向的领域有往往较狭窄, 例如steamlink就是游戏平台steam推出的专用游戏远程控制软件, 并不是通用的串流远程解决方案.
sunshine+moonlight的优势在于通用性, 高自定义, 性能强大. 但是高自定义也带来了高学习门槛, 一定程度上劝退了一部分非专业的潜在用户.
因此要说排名, sunshine+moonlight在自身领域中至少是第二的存在, 笔者个人能给出第一的评价(详细原因可见后文与parsec对比)
要进一步提高, 笔者认为可以尝试提供一些直白化的预设组合推荐, 提供一个傻瓜式的一键配置, 这也许可以留住更多用户.
5. 建议与规划
-
市场现状
市场概况
串流远程本身并不是一个很大众的需求从社区下载量看,全球活跃用户群体仅有大约50万不足.
但是, 笔者不认为这是因为这个领域不重要, 未来
电子设备进一步多元
与大前端
的潮流将会带来越来越多的"屏幕", 串流远程将会是优化屏幕集群服务表现的重要一环. 按照笔者与身边亲友的交流, 很多时候人们只是没有想到可以用远程控制来优化自己的工作生活体验, 当笔者解释完串流远程是什么时, 很多人都表现出了极高兴趣.笔者认为这一市场的关键在于"门槛", 若能够降低这一领域产品的使用门槛, 远程控制的便捷性一定能够深入人心, 届时, 全球几十亿的"屏幕"使用者都将成为重要的潜在用户
竞争产品
产品 | 类型 | 连接方式 | 技术门槛 | 最佳远程效果 |
---|---|---|---|---|
sunshine+moonlight | 开源免费工具 | 局域网串联(主) | 较高,需自主配置 | 优秀 |
parsec | 基础功能免费,高级功能付费 | 云电脑+公网穿透()主 | 较低,有一键式图形化服务 | 相对上限低,但仍然优秀 |
产品定位
笔者对于这两款软件都有使用, 直观感受上, sunshine+moonlight更多是用于打造自己的工作空间, 在我的工作台上电子屏建无缝互通, 交互方式由我自己管理. 而parsec则是更正式的远程工具, 例如帮亲友远程解决一些电脑问题, 在手机上检查不在手边的电脑状态等等.
从前面的对比表格不难看出, parsec则更接近一款服务化的商品, 在努力的将串流远程包装为直白的服务形式, 使用门槛更低, 但也意味着无法达到最佳的远程效果.
相对的, sunshine的特色可以概括为专业化
, 高度灵活的自定义空间允许用户最大限度的利用机器性能来达到最好的远程效果, 产品画像可以概括为一项专业的串流工具.
-
市场与产品生态
核心用户
笔者的视角中, 串流远程是一群有技术背景的爱好者们组成的小圈子, 其中技术热情尤为强烈者组织起了类似LizardByte这样的项目并开发出一批优秀的工具供圈子内交流使用
sunshine+moonlight就是这样的工具之一, 他的核心用户群就是这群技术爱好者群体, 他们往往学历较高, 具备网络,计算机领域的专业知识, 且有着较强的技术热情, 爱动手, 乐于用技术改变自己的生活. 他们的潜在需求可能包括: 对个性化的追求, 对技术的探索欲, 自主学习动手的空间.
用户生态
sunshine+moonlight用户以一群高技术力, 交流反馈积极的爱好者为主, 全球的用户群体交流积极, 并以志愿者的形式共同参与到软件的优化改进中.
要进一步优化用户生态, 笔者认为可以在LizardByte项目社区中推出民间优化方案的整理发表区域, 将非官方的插件, 魔改方案更加有条理的整理起来, 让更多的用户在产品优化中更有参与感
与其他产品的关系
LizardByte项目下有以
云游戏服务
为主题的大量软件项目, sunshine,moonlight都是其中之一. 要发挥这些软件之间的联系, 可以尝试推出多功能整合体型软件, 让众多开发者的工作串联相通. -
产品规划
新功能
一键式预设组合套用功能, sunshine+moonlight想要扩大用户群体的核心要务就是要降低新手用户的上手门槛, 而一键式配置使用就是一个很好的方案.同时, 对于熟练用户, 预设组合可以实现不同状态(工作/娱乐)之间的快捷切换, 也是一个便捷的细节功能.
Need: 新手用户面对复杂的配置选项容易产生畏难情绪, 需要一个简单直白的快速上手途径能够先提供基本服务, 保持用户新鲜感, 进而逐渐引导用户探索高级功能. 熟练用户在不同使用场景中可能需要切换软件配置, 也有快速配置的需要.
Approach: 预设套用本身并不涉及核心服务功能的修改, 修改风险小, 学习成本低.
Benefit:这一改动可以让串流远程改变更多人的生活, 也能优化现有功能的使用体验
Competition:相比竞争产品parsec, sunshine+moonlight最大的缺点就在于更高的学习门槛, 这一新功能能够缩小这一缺点的影响, 提升产品竞争力
Delivery:简单易用, 高效方便, 这就是最好的宣传, 配置内容批量管理套用功能相比逐步勾选操作快, 不易出错, 又不破坏软件本身的自定义特色, 优势巨大.
人员分工配置
开发初期(2~3周): 调研与设计
4人进行功能调研, 初步形成功能实现方案, 讨论相关成本,风险.
2人进行功能设计, 学习项目已有架构并决定UI改动方案, 产出设计图形稿
开发中期(7~8周): 具体开发
4人组按实现方案, 推进开发进度
2人组跟进开发进度, 按实际情况配合开发组优化UI, 筹备公测, 宣发资料
开发后期(3~4周): 测试完善
4人组二二分为测试组与修改组, 结合公测反馈优化迭代
2人组进行宣发工作, 组织公测, 整理公测结果