Skip to content

HarmonyOS NEXT 智能帧率下 120fps 串流可能被降到 60Hz #34

Description

@qiin2333

问题描述

在 HarmonyOS NEXT 设备上使用 Moonlight V+ 进行 120fps 串流时,如果系统屏幕刷新率设置为「智能帧率 / Smart」,不触摸屏幕后屏幕刷新率可能回落到 60Hz,导致 Moonlight 的实际显示帧率跑不满 120fps。

表现上比较像:

  • Moonlight 客户端设置为 120fps;
  • 主机端游戏 / Sunshine / 显示器或虚拟显示器也配置为 120Hz / 120fps;
  • 客户端在触摸屏幕时可能短暂维持高刷新率;
  • 停止触摸后,系统刷新率疑似被智能帧率策略降到 60Hz;
  • 最终实际显示 / Moonlight 统计值只能接近 60fps,可能伴随 frame pacing / 解码队列延迟上升。

复现步骤

  1. 在支持 120Hz 的 HarmonyOS NEXT 设备上,将系统屏幕刷新率设置为「智能帧率」。
  2. 打开 Moonlight V+。
  3. 连接 Sunshine / GameStream 主机,并将串流帧率设置为 120fps。
  4. 开始串流 120fps 游戏或桌面。
  5. 停止触摸屏幕,观察系统刷新率、Moonlight overlay FPS、frame pacing / decoder queue 等指标。

期望行为

当 Moonlight V+ 当前串流配置为 120fps 时,应用应尽量持续向系统请求 120Hz / 120fps 绘制帧率,使 HarmonyOS NEXT 的智能帧率策略不要在播放中回落到 60Hz。

实际行为

智能帧率模式下,不触摸屏幕后疑似会回落到 60Hz,导致 120fps 串流无法实际跑满 120fps。

可能原因 / 适配建议

目前项目里已经有 NativeVSync / NativeWindow 层面的高帧率适配逻辑,但 HarmonyOS NEXT 的智能帧率决策可能还需要 XComponent / ArkUI 显示层持续提供期望帧率提示。

建议排查是否需要在 Moonlight 的 XComponent / Native 渲染链路中补充或确保以下接口持续生效:

  • OH_NativeXComponent_SetExpectedFrameRateRange
  • OH_NativeXComponent_RegisterOnFrameCallback
  • OH_DisplaySoloist_SetExpectedFrameRateRange
  • NativeWindow / NativeVSync 的 120fps range 是否只在初始化时设置,还是在串流开始、分辨率/帧率变化、前后台切换、画面恢复后都会重新设置

同时建议在日志中输出当前配置帧率和各层帧率 hint 设置结果,例如:

configured fps = 120
NativeVSync expected frame rate range = 120/120/120
NativeWindow frame rate range = 120/120/120
XComponent expected frame rate range = 120/120/120

临时规避方案

用户侧可以临时将系统刷新率从「智能帧率」切到「高刷新率 / 120Hz」,并关闭省电模式。但理想情况下,Moonlight V+ 在 120fps 串流中应能在智能帧率模式下持续请求高刷。

环境信息

  • App:Moonlight V+
  • OS:HarmonyOS NEXT
  • 系统刷新率模式:智能帧率
  • 串流配置:120fps
  • 设备型号 / 系统版本 / App 版本:待补充

如果需要,我可以继续补充具体设备、系统 build、Moonlight 日志和录屏。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions