一、概述

统一互联是鸿蒙生态中实现设备间互联互通的核心技术体系,旨在打破平台壁垒、消除设备隔阂、贯通数据流与控制流,构建可互操作、可协同、可信任的全域数字网络。通过统一互联技术,能够打通 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 系统框图

img


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

1.2 DLNA投屏架构图

img

1.3 Miracast投屏架构图

img


二、技术架构总览

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 端开发流程

  1. 集成 AVSessionKit 投屏能力

    • 获取 DLNA 应用源码:applications_dlna
    • 参考 DLNA Source 端接口说明
    • 实现 startCastDeviceDiscovery(TYPE_DLNA) 触发 framework 的 DlnaManager 发现
    • 监听 deviceAvailable,用户选设备后调用 startCasting 建立投屏会话
  2. 媒体播控

    • 通过 getAVCastController 获取控制器
    • 调用 prepare / start 下发媒体 URL
    • 使用 sendControlCommand 实现 play / pause / seek / volume 等
  3. 与 framework 的关系

    • Source 应用层多经 AVSessionKit,不直接调用 @ohos.cast
    • 设备发现与会话由 castengine_cast_framework(5526)内的 DlnaManager 调度
    • 底层 DMR 协议在 castengine_dlna(1603)完成

4.3 DLNA Sink 端开发流程

  1. Settings 集成 DMR 配置

  2. DMR 协议与播放

  3. 接受投屏

    • Source 端选择设备后,Sink 建立 DLNA 会话并进入待播状态
    • 接收 SetAVTransportURI 后开始渲染

4.4 Miracast Source 端开发流程

  1. SystemUI 集成投屏入口

  2. 连接目标设备

    • 用户选择设备后调用 connectToTarget()(内部 createCastSession(CAST_SOURCE) + addDevice)
    • 注意: 无 connect(device) 伪接口;连接统一用 castSession.addDevice(device)
    • 连接成功后屏幕捕获与发流由 castengine_wifi_display(WfdSource)自动完成,应用层无需再调 Mirror API
  3. 结束投屏

    • 通过控制中心关闭投屏或 removeDevice / stopDiscovery 断开

4.5 Miracast Sink 端开发流程

  1. 开发 Cast Sink 应用

    • 获取 Cast 应用源码:applications_cast
    • 参考 Miracast Sink 端应用
    • 调用 cast.setDiscoverable(true) 进入可发现状态
    • 监听 deviceRequest,用户确认后调用 castSession.accept(deviceId, true)
  2. 镜像播放

    • 连接成功后 createMirrorPlayer(),绑定 XComponent Surface
    • 调用 mirrorPlayer.setSurface / play 开始渲染
  3. Settings 可选集成

    • 可在设置页提供 Miracast 相关开关,与 Cast 应用联动

4.6 联合调试

Miracast 双端联调

  1. 编译并烧录固件到两台设备(RK3568 或其他标准系统设备)
  2. Sink 端打开 Cast 应用或调用 setDiscoverable(true)
  3. Source 端从控制中心进入无线投屏,触发 startDiscovery
  4. Source 端在设备列表中选择 Sink 设备,等待 Sink 端 accept
  5. 观察镜像画面与音视频同步,验证断开与重连

DLNA 双端联调

  1. Sink 端在 Settings 中打开 DLNA 投屏(DMR)开关
  2. Source 端使用 HarmonyOS / OpenHarmony 第三方影音应用或 applications_dlna 模块
  3. 点击投屏按钮,在设备列表中选择 Sink 端 DMR
  4. 验证播放、暂停、进度拖动等播控同步
  5. 结束投屏后会话关闭,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)
Logo

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

更多推荐