1. 程式人生 > 其它 >OpenHarmony 3.1 Beta版本關鍵特性解析——HiStreamer框架大揭祕

OpenHarmony 3.1 Beta版本關鍵特性解析——HiStreamer框架大揭祕

​(以下內容來自開發者分享,不代表 OpenHarmony 專案群工作委員會觀點)​

 

 

 

陳國棟

數字多媒體技術在過去的數十年裡得到了飛速的發展,多媒體終端裝置如智慧音箱、智慧門鎖、智慧手錶廣泛應用於人們生活中。如此小的裝置卻能承載如此多功能是如何實現的呢?HiStreamer 輕量級可定製的媒體管線框架為你解答!

接下來,咱們一起探祕 HiStreamer 輕量級可定製的媒體管線框架。

​一、媒體管線框架是什麼?​

在講 HiStreamer 之前,咱們先來了解下媒體管線框架是什麼?

媒體框架是處理數字媒體資訊(如編解碼音視訊資料)的軟體框架。為了更容易擴充套件媒體框架支援更多媒體格式或支援更多功能,出現了 Pipeline 架構的媒體框架,如開源 GStreamer 等。​採用 Pipeline 架構的媒體框架,稱為媒體管線框架。它通常的做法是將基礎媒體處理,例如資料讀取、編解碼等封裝成一個個處理單元,然後用管道將這些處理單元串起來,從而實現媒體檔案播放等各種功能。

​二、HiStreamer是什麼? ​

隨著 AI 技術的發展,語音識別、人臉識別、場景理解等技術的進步支撐了智慧音箱等新裝置和新應用的出現,對媒體框架提出了新的要求。因此 HiStreamer 應運而生了。

HiStreamer 是基於 Pipeline 架構,用來處理媒體資料的軟體框架。​它具有輕量級、可定製、可擴充套件、可跨不同晶片和 OS 平臺部署的特點。

從邏輯架構上講,HiStreamer 主要由 HiStreamer 引擎和外掛構成。HiStreamer 引擎又由業務封裝層、Pipeline 框架層、外掛管理層和工具庫組成。外掛主要由平臺軟體外掛和廠商擴充套件外掛兩部分組成。如圖 1 所示。

 

 

 

 

圖1  HiStreamer邏輯架構

HiStreamer 引擎功能可裁剪(如裁剪視訊),處理流程可靈活拼裝。它主要包括以下幾部分內容:

  • 業務封裝層:​基於 Pipeline 封裝實現播放器、錄音機功能,簡化上層應用使用。
  • Pipeline 框架層:​提供 Pipeline 和若干個節點(輸入、解封裝、解碼和輸出)的實現,支援把多個節點連線在一起形成 Pipeline。
  • 外掛管理層:​用於管理外掛生命週期,支援動態載入或靜態連結兩種方式使用外掛。
  • 工具庫:​提供框架依賴的工具,隔離作業系統差異,提供調測功能。

外掛可彈性部署、動態伸縮,主要包括以下幾部分內容:

  • 平臺軟體外掛:
    ​可跨產品複用的軟體演算法外掛。
  • 廠商擴充套件外掛:​廠商提供的基於硬體加速的外掛,如硬體加速的編解碼外掛。

以上是對 HiStreamer 的特點和整體邏輯結構的一個總的概述,接下來咱們詳細剖析它的關鍵特性。

​三、HiStreamer的關鍵特性​

HiStreamer 之所以能成為業界首個輕量級裝置上可用、可定製的媒體管線框架,是因為它有以下的關鍵特性。

​​1、輕量級,可彈性部署到物聯網裝置​​

HiStreamer 的輕量級特點主要體現在精簡的核心框架、外掛彈性部署。

如圖 1 所示,HiStreamer 的 Pipeline 框架由抽象管道(Pipeline)和節點構成,負責根據業務編排關係連線各個節點,形成資料流處理管道。它只實現系統排程必要的功能,具體業務處理由外掛實現,比如檔案資料讀取由 File 外掛實現,網路流媒體資料讀取由 http 外掛實現,MP3 解封裝由 MP3 Demuxer 外掛實現,MP3 解碼由 MP3 Decoder 外掛實現,音訊輸出由 Sinker 外掛實現。外掛管理層主要負責外掛的載入/解除安裝/查詢和呼叫。

外掛採用彈性部署方式,輕量級裝置根據業務需求部署需要的外掛,從而大大減少資源佔用。

​2、可定製,支援節點靈活拼裝和引數自動協商 ​

HiStreamer 採用 Pipeline 架構模式,各個節點解耦,支援節點靈活拼裝,可以根據業務需要拼裝出不同的 Pipeline。為了多個節點能更好地協同工作,支援引數自動協商。接下來咱們分別介紹 HiStreamer 如何支援節點靈活拼裝和引數自動協商的?

  • 節點靈活拼裝

HiStreamer 可以用來支援音視訊解碼播放,或音視訊編碼錄製等。以音視訊檔案播放為例,音視訊解碼播放本質上是通過媒體框架將資料(音訊資料、視訊資料)按順序經過 Source(輸入)、Demuxer(解封裝)、Decoder(解碼)和 Sink(輸出)四個環節處理的過程。

這四個環節和下面四個節點一一對應:

1. 輸入節點:​讀取音訊檔案,獲取檔案資料流。

2. 解封裝節點:​對檔案資料流進行解封裝,獲得檔案頭資訊和 ES 資料(即 Element Streams,編碼過的資料流)。

3. 解碼節點:​解碼器對 ES 資料進行解碼,獲得 PCM(Pulse-code modulation)碼流。

4. 輸出節點:​PCM 碼流送到音訊輸出模組,播放出聲音。

這四個節點按順序連線形成管道(Pipeline),如圖2所示。

 

 

 

圖2 音訊播放管道

由於節點是支援靈活拼裝的,你可以根據自己的需要,選擇不同的節點,拼裝出不同的管道。比如可以拼裝出音視訊錄製的管道(如圖 3),當然也可以是完成其它功能的管道。

 

 

 

圖3 音訊錄製管道

  • 引數自動協商

為了讓管道中的各個節點互相配合,形成高效的資料處理通道,HiStreamer 支援引數自動協商。下面以解封裝節點和解碼節點的引數自動協商為例進行介紹,如圖 4 所示。

 

 

 

圖4 節點引數協商示意圖

如上圖所示,經過解封裝節點後確定當前資料流是 AAC-HE 格式,在協商過程中,解碼節點從備選外掛列表中選擇最匹配的外掛(外掛 2),形成最終的業務處理通道,使得它們可以高效的協同工作。

​3、可擴充套件,支援外掛按需擴充套件​

上文已提到 HiStreamer 的主要業務功能在外掛中實現,Pipeline 框架的每個節點,都有對應的外掛。如播放場景有輸入節點、解封裝節點、解碼節點和輸出節點,它們對應的外掛是:輸入外掛、解封裝外掛、解碼外掛和輸出外掛。

採用這種設計方式,公共的業務邏輯和上下游節點的連線在節點中完成,外掛只需要實現業務功能差異化的部分,這使得外掛實現更簡單。已有的媒體解封裝/解碼演算法,也可以封裝成 HiStreamer 外掛。同時 HiStreamer 已經適配了 FFMPEG(跨平臺的媒體演算法庫),可以比較方便支援 FFMPEG 已經支援的媒體格式(如 mp3、aac 等)。

​四、結束語​

瞭解完 HiStreamer 的特性,你是否也對它產生了濃厚的興趣呢?

目前多媒體行業存在大量的潛在的業務創新需求,歡迎廣大開發者一起加入,使用 HiStreamer 共同豐富多媒體生態,共同創造萬物互聯的新世界!

掃碼新增開發者小助手微信


獲取更多OpenHarmony開發資源和開發者活動資訊