Skip to content

关于 MeshArc 与 Moonlight 跨应用一键串流联动的合作提议 #89

Description

@flypigJ

鸿蒙Moonlight作者您好。我目前正在开发 HarmonyOS NEXT 原生 Tailscale 客户端 MeshArc:
https://github.com/flypigJ/Tailscale-OHOS
https://appgallery.huawei.com/app/detail?id=io.github.tailscaleohos&channelId=SHARE&source=appshare

最近我在实际使用 Moonlight 与 MeshArc 时,发现两者非常适合进行跨应用联动,在远程环境下使用串流 ,因此想向您咨询是否有合作实现一个外部启动接口的意向。

我的设想是由 MeshArc 负责 Tailscale 网络与设备入口,Moonlight 继续负责配对、应用列表、音视频解码和输入控制。

具体交互流程如下:

MeshArc 在 Tailnet 设备列表中展示在线电脑。

MeshArc 通过电脑的 Tailscale IP 请求 Sunshine 的 /serverinfo,判断当前是否存在可访问的 Sunshine 服务。

检测成功后,在对应设备卡片中显示“开始串流”按钮。

用户点击后,MeshArc 通过 HarmonyOS Want 或 Deep Link 拉起 Moonlight,并传入主机 IP、设备名称和当前 Tailscale 连接路径。

Moonlight自动添加或打开对应主机。首次使用仍按原有流程完成配对;已经配对时,可以直接进入该主机的应用列表。

这样用户可以直接在 MeshArc 的设备列表中完成:

“发现电脑 → 检测 Sunshine → 一键进入 Moonlight”

无需再手动复制和输入 100.x.x.x 地址。

另外,我在真机测试中发现,当 Tailscale 无法建立直连、流量经过 DERP 中继时,Moonlight使用默认较高码率会出现明显卡顿;主动降低码率后仍有一定的可用性。

因此我还希望在启动参数中传递连接路径和一次性的推荐串流配置。例如:

{
"protocolVersion": 1,
"action": "openHost",
"source": "MeshArc",
"host": "100.64.12.34",
"displayName": "Jerry-PC",
"pathType": "derp",
"derpRegionCode": "hkg",
"latencyMs": 92,
"lossPercent": 0,
"streamProfile": "relaySafe",
"recommendedBitrateKbps": 5000,
"temporaryOverride": true
}
其中推荐码率仅对本次启动生效,不覆盖 Moonlight 中用户原有的全局、主机或应用设置;用户也可以选择继续使用原配置。

我认为 Moonlight 一侧需要的最小改动主要是:

提供一个可由外部应用调用的 Want 或 Deep Link 入口;

在应用首次启动及已经运行时接收启动参数;

根据传入地址自动添加或定位主机;

支持一次性的临时码率覆盖;

其余配对、证书、应用列表和串流逻辑仍完全由 Moonlight 管理。

MeshArc 一侧的 Sunshine 探测、Tailscale 直连/Peer Relay/DERP 判断、参数生成、异常提示和 UI 均可以由我完成。若您认可这个方向,我也愿意根据 Moonlight 现有架构编写相应代码并提交 PR,由您决定最终的接口形式和实现方式。

整个联动只会在用户明确点击“开始串流”后传递目标设备的 Tailscale IP、显示名称和网络质量信息,不涉及 Moonlight 的配对证书、账号信息或其他私有数据。

我觉得这种合作可以让 Moonlight 获得更便捷的跨公网使用入口,也能让 MeshArc 从单纯的组网工具进一步成为 HarmonyOS NEXT 上的远程设备入口。双方应用仍保持独立发布和维护,MeshArc 也会在功能页面和项目说明中明确标注并推荐安装 Moonlight。

不知道您是否对这一联动方向感兴趣?有意请联系 15821178583@163.com

感谢您开发 鸿蒙Moonlight,也期待有机会合作。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions