统一互联开发指导—富对富投屏
一、概述
统一互联是鸿蒙生态中实现设备间互联互通的核心技术体系,旨在打破平台壁垒、消除设备隔阂、贯通数据流与控制流,构建可互操作、可协同、可信任的全域数字网络。通过统一互联技术,能够打通 OpenHarmony 设备与消费类领域 HarmonyOS Next 标准设备的互联生态,实现跨厂商设备互联互通。
本指导文档聚焦于富对富投屏场景,系统讲解从 Source 端(发屏/控制端)到 Sink 端(收屏/渲染端)开发的核心技术路径,涵盖 Miracast 镜像投屏、DLNA 内容投屏、投播管理框架(CastEngine Framework)以及 SystemUI / Settings / 各模块应用的完整开发指南。当前支持 OpenHarmony 标准设备间的跨协议投屏,以及与 HarmonyOS Next、第三方影音应用的标准 DLNA / Miracast 互操作。
该特性提供两大核心投屏能力:
| 投屏类型 | 说明 |
|---|---|
| Miracast 镜像投屏 | 基于 Wi-Fi Direct + Wi-Fi Display 标准,支持整屏镜像传输,适配演示、游戏等场景;OpenHarmony 设备可作为 Source 向标准 Miracast 设备投屏,也可作为 Sink 接收各类 Miracast Source 的投屏内容 |
| DLNA 内容投屏 | 遵循 DLNA/UPnP 协议,支持将在线视频、本地媒体推送到大屏播放,适配影音娱乐场景;OpenHarmony 设备作为 Sink(DMR),可被 HarmonyOS、OpenHarmony 及第三方影音应用发现并投屏 |
1.1 系统框图

投屏系统架构遵循OpenHarmony技术架构,从上到下依次为:应用层、框架层、系统服务层。投屏能力模块如图中蓝色标识。
1.2 DLNA投屏架构图

1.3 Miracast投屏架构图

二、技术架构总览
2.1 核心组成
| 组件 | 说明 |
|---|---|
| SystemUI 应用 | Miracast Source 入口,控制中心/状态栏无线投屏开关、设备列表与连接状态展示 |
| Settings 应用 | 系统配置入口,DLNA DMR 开关与设备名 persist.dlnadmr.*)、Miracast 相关设置 |
| Cast 应用(applications_cast) | Miracast Sink 端应用,负责 setDiscoverable、连接确认、镜像画面播放(MirrorPlayer) |
| DLNA 应用(applications_dlna) | DLNA Source 端示例,通过 AVSessionKit 发起设备发现、投屏与播控 |
| 投播管理框架(castengine_cast_framework) | CastEngine 中间层(SA 5526),统一管理会话与设备发现,对外提供 @ohos.cast NAPI;内部分发 DlnaManager / WifiDisplayManager |
| Wi-Fi Display(castengine_wifi_display) | Miracast 协议服务(SA 5527/5528),WfdSource/WfdSink,P2P 建链、RTSP/RTP 音视频传输 |
| DLNA 服务(castengine_dlna) | DLNA DMR 协议服务(SA 1603),SSDP 广播、SOAP 播控、媒体渲染 |
2.2 投屏模式
| 模式 | 说明 |
|---|---|
| Miracast Source 端 | 从本设备向大屏发起镜像投屏;模块中由 SystemUI( MiracastService )负责发现、addDevice 建链,底层自动完成屏幕采集与发流 |
| Miracast Sink 端 | 接收对端投屏请求;模块中由 applications_cast 负责可发现、连接确认与 MirrorPlayer 渲染 |
| DLNA DMC(Digital Media Controller) | 控制端,发现 DMR 并下发媒体 URL 与播控指令;模块 中由 applications_dlna + AVSessionKit 体现 |
| DLNA DMR(Digital Media Renderer) | 渲染端,接收并播放音视频;由 castengine_dlna 实现,Settings 负责开关与设备名配置 |
三、开发指南章节索引
3.1 基础概念与概述
| 章节 | 内容简介 |
|---|---|
| 富对富投屏简要介绍 | 核心能力、源码获取、仓库列表 |
| 富对富投屏 README | 文档总览与场景索引 |
3.2 投播管理服务模块(CastEngine Framework)
投播管理框架是 DLNA 与 Miracast 共用的中间层,对上暴露统一 NAPI,对下按协议调度不同底层引擎。
| 章节 | 内容简介 |
|---|---|
| 投播管理服务模块介绍 | SA 5526 架构、公共能力、DLNA/Miracast 分支、与各模块分工 |
3.3 DLNA 投屏开发
3.3.1 框架设计
| 章节 | 内容简介 |
|---|---|
| DLNA 投屏工作原理 | DLNA 协议架构、SSDP 发现、DMC/DMR 协作流程 |
| DLNA 框架设计 | 内容投屏总体架构、三层分层、DMC/DMR 双角色 |
3.3.2 Source 端开发
DLNA Source 通常通过 AVSessionKit 触发发现与投屏,经 framework 的 DlnaManager 完成 DMC 侧逻辑。
| 章节 | 内容简介 |
|---|---|
| DLNA 应用(Source 端) | 设备发现、startCasting、播控与 UI 交互 |
3.3.3 Sink 端开发
DLNA Sink 侧 DMR 开关与设备名在 Settings 配置,协议与播放在 castengine_dlna 完成。
| 章节 | 内容简介 |
|---|---|
| 系统设置应用(DLNA) | persist.dlnadmr.enable、friendlyname 等配置 |
| 投屏核心服务(DMR) | DmrManager、SSDP、SOAP 播控、播放器对接 |
3.3.4 接口设计
| 章节 | 内容简介 |
|---|---|
| DLNA Source 端接口说明 | AVSessionKit、CastSession、DlnaManager 关键接口 |
| DLNA Sink 端接口说明 | DMR 配置、dmrnapi、连接确认与播放 |
3.3.5 示例使用说明
| 章节 | 内容简介 |
|---|---|
| DLNA 示例使用说明 | 开发依赖、编译烧录、使用流程、调试方法 |
3.4 Miracast 投屏开发
3.4.1 框架设计
| 章节 | 内容简介 |
|---|---|
| Miracast 框架设计 | 镜像投屏总体架构、分层设计、与 CastEngine 协作 |
3.4.2 Source 端开发
Miracast Source 由 SystemUI 承担入口与流程调度;applications_cast(source).md 文档描述 Source 端关键 API 与调用链。
| 章节 | 内容简介 |
|---|---|
| SystemUI 应用(Miracast Source) | 控制中心开关、MiracastService、设备列表与连接 |
| Miracast Source 端开发说明 | startDiscovery、createCastSession、addDevice 等 Source 流程 |
3.4.3 Sink 端开发
| 章节 | 内容简介 |
|---|---|
| Miracast Sink 端应用 | setDiscoverable、deviceRequest、accept、createMirrorPlayer |
3.4.4 底层协议服务
| 章节 | 内容简介 |
|---|---|
| Wi-Fi Display 模块 | WfdSource/WfdSink、P2P 建链、RTSP/RTP、与 framework 桥接 |
3.4.5 接口设计
| 章节 | 内容简介 |
|---|---|
| Miracast Source 端接口说明 | CastSessionManager、WifiDisplayManager、Source 会话接口 |
| Miracast Sink 端接口说明 | Sink 可发现、连接确认、MirrorPlayer 接口 |
3.4.6 示例使用说明
| 章节 | 内容简介 |
|---|---|
| Miracast 示例使用说明 | 开发依赖、编译烧录、双端联调步骤 |
四、开发流程指引
4.1 源码获取
repo init -u https://gitee.com/ohos-oneconnect/manifest -b OpenHarmony-5.0.0-Release -m m_miracast.xml
repo sync -c
repo forall -c 'git lfs pull'
repo forall -c "git checkout OneConnect-v1.2.0-Release"
repo forall -c 'git lfs pull'
# 下载预编译包
bash build/prebuilts_download.sh
# 编译(以 rk3568 为例)
./build.sh --product-name rk3568 --ccache
4.2 DLNA Source 端开发流程
-
集成 AVSessionKit 投屏能力
- 获取 DLNA 应用源码:applications_dlna
- 参考 DLNA Source 端接口说明
- 实现 startCastDeviceDiscovery(TYPE_DLNA) 触发 framework 的 DlnaManager 发现
- 监听 deviceAvailable,用户选设备后调用 startCasting 建立投屏会话
-
媒体播控
- 通过 getAVCastController 获取控制器
- 调用 prepare / start 下发媒体 URL
- 使用 sendControlCommand 实现 play / pause / seek / volume 等
-
与 framework 的关系
- Source 应用层多经 AVSessionKit,不直接调用 @ohos.cast
- 设备发现与会话由 castengine_cast_framework(5526)内的 DlnaManager 调度
- 底层 DMR 协议在 castengine_dlna(1603)完成
4.3 DLNA Sink 端开发流程
-
Settings 集成 DMR 配置
- 获取设置应用源码:applications_settings
- 参考 系统设置应用(DLNA)
- 实现 DMR 开关:写入 persist.dlnadmr.enable
- 配置设备显示名:persist.dlnadmr.friendlyname
-
DMR 协议与播放
- 理解 castengine_dlna 中 DmrOpen、SSDP 广播、SOAP 指令处理
- Sink 播放经 @ohos.dmrnapi / dlnaplayer,不经 Cast NAPI 主路径
-
接受投屏
- Source 端选择设备后,Sink 建立 DLNA 会话并进入待播状态
- 接收 SetAVTransportURI 后开始渲染
4.4 Miracast Source 端开发流程
-
SystemUI 集成投屏入口
- 获取 SystemUI 源码:applications_systemui
- 参考 SystemUI 应用 与 Source 端开发说明
- 在控制中心实现投屏开关,调用 MiracastService.startDiscovery([8])
- 注册 deviceFound / deviceState 更新设备列表与连接状态
-
连接目标设备
- 用户选择设备后调用 connectToTarget()(内部 createCastSession(CAST_SOURCE) + addDevice)
- 注意: 无 connect(device) 伪接口;连接统一用 castSession.addDevice(device)
- 连接成功后屏幕捕获与发流由 castengine_wifi_display(WfdSource)自动完成,应用层无需再调 Mirror API
-
结束投屏
- 通过控制中心关闭投屏或 removeDevice / stopDiscovery 断开
4.5 Miracast Sink 端开发流程
-
开发 Cast Sink 应用
- 获取 Cast 应用源码:applications_cast
- 参考 Miracast Sink 端应用
- 调用 cast.setDiscoverable(true) 进入可发现状态
- 监听 deviceRequest,用户确认后调用 castSession.accept(deviceId, true)
-
镜像播放
- 连接成功后 createMirrorPlayer(),绑定 XComponent Surface
- 调用 mirrorPlayer.setSurface / play 开始渲染
-
Settings 可选集成
- 可在设置页提供 Miracast 相关开关,与 Cast 应用联动
4.6 联合调试
Miracast 双端联调
- 编译并烧录固件到两台设备(RK3568 或其他标准系统设备)
- Sink 端打开 Cast 应用或调用 setDiscoverable(true)
- Source 端从控制中心进入无线投屏,触发 startDiscovery
- Source 端在设备列表中选择 Sink 设备,等待 Sink 端 accept
- 观察镜像画面与音视频同步,验证断开与重连
DLNA 双端联调
- Sink 端在 Settings 中打开 DLNA 投屏(DMR)开关
- Source 端使用 HarmonyOS / OpenHarmony 第三方影音应用或 applications_dlna 模块
- 点击投屏按钮,在设备列表中选择 Sink 端 DMR
- 验证播放、暂停、进度拖动等播控同步
- 结束投屏后会话关闭,Sink 恢复待机或本地界面
五、代码仓库索引
| 仓库名称 | 仓库地址 | 用途说明 |
|---|---|---|
| SystemUI 应用 | https://gitcode.com/ohos-oneconnect/applications_systemui | Miracast Source 入口,控制中心/状态栏投屏 |
| 系统设置 | https://gitcode.com/ohos-oneconnect/applications_settings | DLNA DMR 开关与设备名、投屏相关设置 |
| Cast 应用 | https://gitcode.com/ohos-oneconnect/applications_cast | Miracast Sink 端,连接确认与镜像播放 |
| 投播管理框架 | https://gitcode.com/ohos-oneconnect/castengine_cast_framework | CastEngine 中间层(SA 5526),统一 NAPI 与会话管理 |
| Wi-Fi Display | https://gitcode.com/ohos-oneconnect/castengine_wifi_display | Miracast WFD 协议(SA 5527/5528) |
| DLNA 投屏核心 | https://gitcode.com/ohos-oneconnect/castengine_dlna | DLNA DMR 协议(SA 1603) |
| DLNA Source 应用 | https://gitcode.com/ohos-oneconnect/applications_dlna | DLNA Source 端示例(AVSessionKit) |
更多推荐



所有评论(0)