分布式能力作为OpenHarmony操作系统的要害能力,始终备受关注,同时它也是开源社区能力构建的重点。在3月底公布的OpenHarmony v3.1 Release版本中,媒体子系统新增了两个分布式能力:分布式媒体库和分布式相机。本期就带大家一起来理解这两个新增的分布式能力~
一、万物互联带给多媒体框架的挑战
现在咱们在生活中曾经被越来越多的电子设备所突围。这些设施有不同的性能(音箱、大屏、摄像头、冰箱等)、不同的交互界面(语音、触屏、红外遥控等),给人们提供了足够便当的同时,却给开发者带来了微小的挑战:
- 设施的硬件和性能差别微小。
这就导致了各产品利用间存在人造的隔离,要实现设施之间的多媒体互通互助也困难重重。如何屏蔽设施间的差别,提供绝对统一的多媒体能力接口?
- 随着各种外围电子设备的减少,各设施间的连贯网络也变得更加简单。
试想一下:当你须要在蓝牙音箱上播放电视的音频时,你不得不用遥控器在电视的菜单中进行繁琐的设置;当你想将声音切换到蓝牙耳机时,又不得不从新实现繁琐的设置操作。这样感觉是人在服务于这些设施,而不是设施服务于人。随着更多的电子设备进入人们的生存,简单的硬件环境带给人们的简单操作会越来越多。如何在人们须要的时候给出最佳的组网形式,并且可能实现媒体数据传输的最佳路由?
- 在全屋智能化的明天,“丰盛的利用场景”层出不穷。
每个繁多设施可能只有一个性能,比方:体脂秤、摄像头、投影仪等,然而用户的利用场景却大多汇合了多种性能。如何让不同的设施组织起来,独特给用户提供一个残缺的媒体性能?
如何解决下面这些问题呢?这就须要构建一个人造反对分布式的操作系统。OpenHarmony在初始设计阶段就将焦点放在如何实现分布式能力下面,这使它人造具备分布式个性,可能轻松实现设施间的硬件互助、数据共享、服务迁徙,同时使利用轻松接入分布式能力,给用户提供顺畅的跨设施交互体验。
上面咱们要介绍的两个分布式能力——分布式媒体库和分布式相机,别离用于撑持媒体库和相机的分布式场景,为用户提供跨设施的多媒体交互体验。
二、分布式媒体库
上面从框架图和API接口的应用两个方面,为大家介绍分布式媒体库。
1. 框架图
分布式媒体库的框架图如下:
图1 分布式媒体库框架图
分布式媒体库次要由以下两局部组成:
● MediaLibrary JS API:通过JS API接口向应用层提供媒体文件的治理和操作的能力。
● MediaLibraryDataAbility:通过SyncTable、RDB Utils、File Utils功能模块,与媒体子系统内部的分布式数据库和分布式文件系统交互,从而取得对分布式数据的增删改查能力。
2. API接口的应用
开发者次要通过JS API接口来应用分布式媒体库能力。上面通过两个典型操作来解说如何应用分布式媒体库的JS API接口:
(1)获取设施的networkId
通过getActivePeers()接口能够获取以后组网中所有可拜访的设施。获取到的PeerInfo信息中蕴含一个networkId参数,以此作为分布式数据库拜访的要害参数,来辨别要拜访的设施。
(2)应用networkId进行数据操作
MediaFetchOptions提供对媒体库进行拜访操作的参数汇合,其中的networkId参数会追随MediaFetchOptions一起通过getFileAssets()接口下发给媒体库服务接口,并且依此来拜访对应设施上的数据。
更多的接口详情,请从码云OpenHarmony我的项目的媒体库JS API申明文件中获取。
https://gitee.com/openharmony...
上面咱们从零碎相册利用的实现代码中抽取几个要害的代码段,看看利用拜访分布式媒体库的操作流程:
零碎相册利用的残缺代码及开发阐明,从码云OpenHarmony我的项目中获取。
https://gitee.com/openharmony...
三、分布式相机
上面从框架图和API接口的阐明两个方面,为大家介绍分布式相机。
1. 框架图
分布式相机的框架图如下:
图2 分布式相机框架图
从图2中能够看出,分布式相机框架(Distributed Hardware)分为主控端和被控端。设施B领有本地相机设施,分布式组网中的设施A能够分布式调用设施B的相机设施。这种场景下,设施A是主控端,设施B是被控端,两个设施通过软总线进行交互。VirtualCameraHAL作为硬件适配层(HAL)的一部分,负责和分布式相机框架中的主控端交互,将主控端CameraFramwork下发的指令传输给分布式相机框架的SourceMgr解决。SourceMgr则通过软总线将管制信息传递给被控端的CameraClient,CameraClient间接通过调用被控端CameraFramwork的接口来实现对设施B相机的管制。从设施B反馈的预览图像数据会通过分布式相机框架的ChannelSink回传到设施A的HAL层,进而反馈给利用。通过这种形式,设施A的利用就能够像应用本地设施一样应用设施B的相机。
2. API接口的应用
开发者次要通过JS API接口来应用分布式相机能力。上面通过两个典型操作来解说如何应用分布式相机的JS API接口:
(1)获取可用的相机设施
通过getCameras()接口能够取得以后组网中所有可用的相机设施(包含分布式相机设施)。在获取到的Camera信息中,有两个参数须要关注:
● cameraId:相机设施的惟一标识。
● connectionType:相机设施的连贯类型。当参数值为CAMERA_CONNECTION_REMOTE时,示意此相机设施为分布式相机设施。
(阐明:在分布式相机的 JS API中,所有的接口都是本地相机设施和分布式相机设施共用的,接口通过参数cameraId来指定执行操作的相机设施。)
(2)创立相机设施输出流
createCameraInput()接口为创立相机设施输出流的接口,其中cameraId参数用于辨别关上哪个相机设施。如果传入的是一个无效的分布式相机的cameraId,则主动会触发分布式相机个性。
更多的接口详情,请从码云OpenHarmony我的项目Camera JS API申明文件中获取。
https://gitee.com/openharmony...
上面咱们从零碎相机利用的实现代码中抽取几个要害的代码段,看看利用拜访分布式相机的操作流程:
零碎相机利用的残缺代码,请从从码云OpenHarmony我的项目中获取。
https://gitee.com/openharmony...
四、结束语
从凋谢的代码能够看出,以后构建的多媒体分布式能力还比拟根底,局部分布式能力接口也还没有向三方利用凋谢。咱们会持续致力,心愿在下个版本上,分布式能力能扩大到音频、播控等更多个性,为大家提供更加丰盛的分布式多媒体体验。
OpenHarmony,加油吧!