本文汇总 Miracast WFD(Wi-Fi Display)层五类问题:Source 重启后搜不到设备、关 Wi-Fi 再开后搜不到、投屏器已接入但无画面、Sink 断开后无法再投、改 Sink 名称后无法再建连。

各案设备并不相同(见各节「使用环境与设备」):有投屏器大禹 200,也有 HarmonyOS Next + 3568 开发板

WFD 对应部件 castengine_wifi_display(别名 Sharing),提供 Miracast 镜像投屏流媒体能力,受投播框架(castengine_cast_framework)调度,并依赖 Wi-Fi P2P(communication_wifi)。排查时常见分层:应用 → cast_framework → WFD scene/session → Wi-Fi P2P。

设备环境

img

案例疑难分析:断开投屏并开关 Wi-Fi后再次投屏搜不到设备

1. 问题描述

使用环境与设备: Source 端已成功投屏至投屏器;随后在控制中心关闭投屏,再关闭 Wi-Fi,再点「无线投屏」并允许打开 Wi-Fi 后进入搜索页。

问题现象: 进入搜索设备界面后一直搜不到设备(等待约 10 分钟仍无)。

一句话概括:退出投屏后断 Wi-Fi 时空指针把 sharing 服务打崩,后续 IPC 全失败。

2. 分析过程

应用侧无有效发现回调。cast_framework 日志显示:startDiscovery 下发到 WFD 失败。

image.png

WFD 侧进一步看到 IPC remote died,命令下发失败:

image.png

在设备 data/log/faultlog/faultlogger/ 找到 crash,用 addr2line 定位:退出投屏后 Wi-Fi 断开时 connDev_ 为空,触发空指针,服务崩溃。

3. 解决方案

在退出投屏、Wi-Fi 断开等相关路径对 connDev_ 增加空指针保护:访问前判空并提前返回或走安全分支,避免 sharing 服务崩溃。服务存活后,startDiscovery 的 IPC 可正常下发,搜索恢复。

同类排查建议: 出现 do ipc command failed 29189 时,优先怀疑 sharing_service crash,导出 faultlogger 下 crash 日志定位。

案例疑难分析:投屏器显示已接入但无画面,Source 一直处于连接中

1. 问题描述

使用环境与设备: 准备投屏器大禹 200 Sink;Source 为大禹(步骤中「重启大禹 source 端」)。先连大禹 200 Sink,在 Sink 已横屏、画面未出时点取消;再改搜并连接投屏器

问题现象: 投屏器显示已接入但无画面;Source 一直显示「正在连接投屏器」,未进入投屏中/PLAYING。

一句话概括:取消上次投屏时 session 没打断,新连接仍用旧 session,MAC 对不上就不报 Playing。

2. 分析过程

应用未收到 PLAYING,故界面停在连接中。cast_framework 显示对端未上报 Playing:

img

下层已收到 EVENT_WFD_NOTIFY_RTSP_PLAYED,但日志为:

connDev_ is nullptr or mac: doesn't match.

67fa8761e155c37e62cf7e450ad1da93.png

连接 MAC 与 session 侧 MAC 不一致,因此不上报 Playing:

img

在 HandlePlayRequest 打印 session 地址,与创建时不一致:

f1d9c397bb7fe7eb7ebc149df495b3e3.png

取消向 dayu 投屏时未见 OnInnerDestroy,说明取消未打断旧 session;再投投屏器时新建 session 未被使用,仍沿用旧 session。

3. 解决方案

Source 端在取消/切换连接时增加打断操作:销毁或失效旧 session,并同步更新 agent 侧 statusMsg,使新连接使用新 session、MAC 匹配后能上报 PLAYING。

同类排查建议: Source「连不上」时先确认 P2P 是否已连,再看 RTSP 是否走完,结合 MAC/session 是否匹配定位。

案例疑难分析:修改 Sink 设备名称后无法再次建立投屏连接

1. 问题描述

使用环境与设备: HarmonyOS Next 设备作 Source(源端)3568 开发板作 Sink(接收端)。投屏成功后断开,修改 3568 开发板设备名称,再尝试投屏。

问题现象: 改名后无法再次建立投屏连接。

一句话概括:与「Source 应用重启后设备发现无法再搜到对端」同根因——scene/callback 释放后未反注册,改名重建 scene 后回调仍指向旧对象。

2. 分析过程

日志进入 OnP2pGcJoinGroup 后无后续:

补判断与日志后出现:

[OnP2pGcJoinGroup()] Parent is null

打印 parent 与 wfdSinkScene 地址,发现未随重建更新,仍是第一次注册对象:

1752223775526_DE79DB06-4B89-427d-8990-F480B777A039.png

1752223801961_E33844D1-8D1D-4eba-89E6-C54E6F2950DD.png

改名后创建 scene 成功,但创建地址与使用地址不一致:死亡监听释放 scene 时 callback 未注销,第二次注册无效。

image.png

3. 解决方案

与首案处理相同:

  1. Wi-Fi 层增加 UnRegisterCallBack()
  2. WFD 释放资源时调用取消注册,保证重建 scene 后回调指向新对象

改名触发 scene 重建后,P2P 入组回调可落到新 scene,投屏可再次建连。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐