• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

    EEPW首頁 > 博客 > OpenHarmony新增兩個分布式能力!快來了解~

    OpenHarmony新增兩個分布式能力!快來了解~

    發布人:開發者頭條 時間:2022-04-28 來源:工程師 發布文章

    分布式能力作為OpenHarmony操作系統的關鍵能力,一直備受關注,同時它也是開源社區能力構建的重點。在3月底發布的OpenHarmony v3.1 Release版本中,媒體子系統新增了兩個分布式能力:分布式媒體庫分布式相機。本期就帶大家一起來了解這兩個新增的分布式能力~

    一、萬物互聯帶給多媒體框架的挑戰

    如今我們在生活中已經被越來越多的電子設備所包圍。這些設備有不同的功能(音箱、大屏、攝像頭、冰箱等)、不同的交互界面(語音、觸屏、紅外遙控等),給人們提供了足夠便利的同時,卻給開發者帶來了巨大的挑戰:

    1. 設備的硬件和功能差異巨大。

    這就導致了各產品應用間存在天然的隔離,要實現設備之間的多媒體互通互助也困難重重。如何屏蔽設備間的差異,提供相對一致的多媒體能力接口?

    2. 隨著各種外圍電子設備的增加,各設備間的連接網絡也變得更加復雜。

    試想一下:當你需要在藍牙音箱上播放電視的音頻時,你不得不用遙控器在電視的菜單中進行繁瑣的設置;當你想將聲音切換到藍牙耳機時,又不得不重新完成繁瑣的設置操作。這樣感覺是人在服務于這些設備,而不是設備服務于人。隨著更多的電子設備進入人們的生活,復雜的硬件環境帶給人們的復雜操作會越來越多。如何在人們需要的時候給出最佳的組網方式,并且能夠實現媒體數據傳輸的最佳路由?

    3. 在全屋智能化的今天,“豐富的應用場景”層出不窮。

    每個單一設備可能只有一個功能,比如:體脂秤、攝像頭、投影儀等,但是用戶的應用場景卻大多集合了多種功能。如何讓不同的設備組織起來,共同給用戶提供一個完整的媒體功能?

    如何解決上面這些問題呢?這就需要構建一個天然支持分布式的操作系統。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/interface_sdk-js/blob/master/api/@ohos.multimedia.mediaLibrary.d.ts

    下面我們從系統相冊應用的實現代碼中抽取幾個關鍵的代碼段,看看應用訪問分布式媒體庫的操作流程:

    系統相冊應用的完整代碼及開發說明,從碼云OpenHarmony項目中獲取。

    https://gitee.com/openharmony/applications_photos

    三、分布式相機

    下面從框架圖和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/interface_sdk-js/blob/master/api/@ohos.multimedia.camera.d.ts

    下面我們從系統相機應用的實現代碼中抽取幾個關鍵的代碼段,看看應用訪問分布式相機的操作流程:

    系統相機應用的完整代碼,請從從碼云OpenHarmony項目中獲取。

    https://gitee.com/openharmony/applications_camera

    四、結束語

    從開放的代碼可以看出,當前構建的多媒體分布式能力還比較基礎,部分分布式能力接口也還沒有向三方應用開放。我們會繼續努力,希望在下個版本上,分布式能力能擴展到音頻、播控等更多特性,為大家提供更加豐富的分布式多媒體體驗。

    OpenHarmony,加油吧!


    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



    關鍵詞: 分布式

    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 佛山市| 闽清县| 丰顺县| 黔西| 平乐县| 青田县| 筠连县| 涞源县| 望谟县| 中方县| 潍坊市| 碌曲县| 临清市| 丹江口市| 大宁县| 南华县| 柘荣县| 武汉市| 义马市| 新龙县| 开江县| 通海县| 宁阳县| 金华市| 云阳县| 青海省| 独山县| 安达市| 柳河县| 八宿县| 九江市| 五台县| 汕尾市| 盐津县| 新蔡县| 禹城市| 波密县| 上栗县| 曲沃县| 财经| 巫溪县|