openharmony 富对富 WiFi投屏设计

embedded/2025/3/12 2:45:02/

castengine_wifi_display部件别名Sharing,媒体分享之意。拥有流媒体协议接入、媒体预览、媒体转分发能力,受投播管理服务管理和调用,是音视频投播子系统重要的流媒体能力部件。提供一套简单的Native C++的接口,主要业务是Miracast投屏,提供以下常用功能:

  • 主投端(WFD Source):主投端发送器,用于投屏Source端业务,可发送多路屏幕镜像流到不同设备。

  • 被投端(WFD Sink):被投端接收器,用于投屏Sink端业务,可接收多个设备的投屏流。

逻辑架构

模块职责

模块名称职责
Interaction框架层交互模块,负责与外部进程进行交互,基于IPC与RPC机制用于实现设备内和设备间的跨进程通信,支持与多个进程并发交互。
Scene交互模块的业务实现部分,和Interaction实例共同完成对外交互和对内框架调用。
ContextMgr框架层业务容器模块,负责将不同的业务Agent关联在一起,用于实现收流,转发,发流等业务;每个业务容器实例可包含多个Agent。
Agent业务在框架层的代理对象,负责信令层的交互。Agent分为Sink端Agent和Src端Agent。其中,Sink Agent负责收流(获取媒体数据)业务,Src Agent负责发流(输出媒体数据)业务。
Session业务控制层的具体实现,和Agent对象共同完成业务的信令交互。
Configuration配置管理模块,设置框架和业务的配置数据,服务启动时加载。
EventScheduler事件分发调度管理器,集中分发处理模块上报事件,采用异步线程池方式处理,不处理磁盘IO和网络IO等耗时操作。
MediachannelMgr框架层媒体通道模块,管理媒体通道,每个媒体通道实例可实现媒体数据的接入、预览和发送;具备编解码能力、混流能力、流媒体数据包透传能力;
Consumer获取媒体数据对象,可根据业务属性通过任何方式获取媒体数据,通常用于收流。
Producer输出媒体数据对象,可根据业务属性通过任何方式输出媒体数据,通常用于推流。
ServiceMgr框架层服务管理模块,服务监听的管理模块,每个service实例用于对指定的端口进行tcp或者udp监听,可与外部进程或设备进行数据交互。
InputBack反控模块,跨设备反控及坐标变化等处理。
WindowMgr框架层窗口管理模块,窗口实例用于自触发预览窗口时使用。
Protocol实现rtsp、rtp、wfd、dlna、uibc等协议封装,用于对外协议交互与对接。
Codec媒体数据的封装与解封装,编码与解码,硬解加速等。
Network网络协议封装,包括tcp/udp的服务端、客户端等。

目录结构

仓目录结构如下:

/foundation/CastEngine/castengine_wifi_display  # 投播部件业务代码
├── figures                               # 
├── interfaces                            # 外部接口层
│   ├── kits                              # 应用接口
│   └── innerkits                         # 系统内部件接口
├── frameworks                            # 部件无独立进程的实现
│   └── innerkitsimpl                     # native c++实现
├── sa_profile                            # 部件配置
├── services                              # 服务C/S实现
│   ├── interaction                       # 进程交互
│   ├── configure                         # 配置管理
│   ├── context                           # 业务容器
│   ├── agent                             # 业务代理
│   ├── mediachannel                      # 媒体通道
│   ├── mediaplayer                       # 播放渲染
│   ├── etc                               # 部件进程配置
│   ├── event                             # 事件中心
│   ├── impl                              # 业务实现
│   │   └── wfd                           # WFD业务实现
│   ├── inputback                         # 反控模块
│   ├── scheduler                         # 调度中心
│   ├── windowmgr                         # 窗口管理
│   ├── protocol                          # 协议库
│   ├── codec                             # 编解码库
│   ├── network                           # 网络库
│   ├── extend                            # 引入库
│   ├── common                            # 公共类
│   └── utils                             # 工具类
├── sa_profile                            # 服务配置                        
├── tests                                 # 测试代码
├── bundle.json                           # 部件描述文件
└── BUILD.gn                              # 编译入口

目录结构

WFD Sink作为被投端允许多个设备同时投屏。投播框架允许单独操控每路投屏的音频,因此在多路投屏时可自由选择音频的播放与静音;WFD Source 可投屏到多个Sink端。设备作为Sink端时不能再作为Source端,反之亦然。

投屏代码仓地址: castengine_wifi_display: castengine_wifi_display部件别名Sharing,媒体分享之意。基于投播框架开发,拥有流媒体协议接入、媒体预览、媒体转分发等通用能力,受投播管理服务框架管理和调用,提供Miracast镜像投屏能力,是音视频投播子系统重要的流媒体能力部件。https://gitee.com/openharmony/castengine_wifi_display

castengine_wifi_display: castengine_wifi_display部件别名Sharing,媒体分享之意。基于投播框架开发,拥有流媒体协议接入、媒体预览、媒体转分发等通用能力,受投播管理服务框架管理和调用,提供Miracast镜像投屏能力,是音视频投播子系统重要的流媒体能力部件。


http://www.ppmy.cn/embedded/171911.html

相关文章

QT系列教程(17) MVC结构之Model模型介绍

MVC简介 MVC 就是Model-View-Control模式的简称,包括模型层(Model), 视图层(View), 控制层(Controller). Model主要负责管理数据,View主要用来显示数据,Controller主要用来操作数据,控制View联动。 Qt也采用了这个模式&#xff0…

C 语言数据结构(二):顺序表和链表

目录 1. 线性表 2. 顺序表 2.1 概念及结构 2.1.1 静态顺序表(不常用) 2.1.2 动态顺序表(常用) ​编辑 2.2 练习 2.2.1 移除元素 2.2.2 删除有序数组中的重复项 2.2.3 合并两个有序数组 2.3 顺序表存在的问题 3. 链表 …

Redis-配置文件

在安装目录下找到解压文件中的redis.conf Redis配置文件位于Redis安装目录下,文件名为redis.conf 配置Redis 解压目录下的redis.conf配置文件复制到安装文件的目录下 redis.conf参数 1、Redis默认不是以守护进程的方式运行,可以通过该配置项修改&am…

量子算法:英译名、概念、历史、现状与展望?

李升伟 整理 #### 英译名 量子算法的英文为 **Quantum Algorithm**。 #### 概念 量子算法是利用量子力学原理(如叠加态、纠缠态和干涉)设计的算法,旨在通过量子计算机高效解决经典计算机难以处理的问题。其核心在于利用量子比特&#xff08…

docker和kubectl客户端安装Linux

在现代软件开发和运维领域,Docker和Kubernetes已成为不可或缺的工具。Docker是一个开源的应用容器引擎,允许开发者打包应用及其依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或者Windows机器上。Kubernetes(简称K8s&…

Spring Boot 整合 MyBatis 与 PostgreSQL 实战指南

Spring Boot 整合 MyBatis 与 PostgreSQL 实战指南 一、环境搭建与准备二、创建 Spring Boot 项目三、数据源与 MyBatis 配置四、实体类与 Mapper 接口定义五、编写 Mapper XML 文件六、业务层与控制层实现七、测试与验证 在当今的企业级 Java 开发场景中,Spring …

java中有了ArrayList为什么还有LinkedList

java中有了ArrayList为什么还有LinkedList 在Java中,尽管已经有了功能强大的ArrayList,但LinkedList的存在仍然有其独特的价值和适用场景。这两种集合类都属于Java集合框架的一部分,但它们在设计和实现上有显著的不同,这导致了它…

基于PyTorch的深度学习6——数据处理工具箱1

PyTorch涉及数据处理(数据装载、数据预处理、数据增强等)主要工具包及相互关系如图所示 torch.utils.data工具包,它包括以下4个类。 1)Dataset:是一个抽象类,其他数据集需要继承这个类,并且覆写其中的两个…