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 日志和录屏。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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