OpenHarmony新音影片引擎——HiStreamer
OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)是由開放原子開源基金會(OpenAtom Foundation)孵化及運營的開源專案,目標是面向全場景、全連線、全智慧時代,基於開源的方式,搭建一個智慧終端裝置作業系統的框架和平臺,促進萬物互聯產業的繁榮發展。面對萬物互聯時代種類眾多、且差異巨大的終端裝置,我們為OpenHarmony打造了一款新的音影片引擎——HiStreamer。
一、 HiStreamer產生背景
數字多媒體技術在過去的數十年裡得到了飛速的發展,音樂、電話、電視、電影、視訊會議等等,伴隨著我們度過每一天。為了給使用者提供豐富的多媒體處理能力,業界已經有比較成熟的音影片引擎,比如開源的音影片引擎GStreamer。 為什麼我們還要打造一款新的音影片引擎呢?
隨著萬物互聯時代的到來,越來越多的智慧化裝置出現在我們的生活中。比如:智慧冰箱可以透過螢幕和聲音,告訴人們儲藏的菜品快要過期了;智慧閘機可以透過人臉識別,自動完成檢票工作;智慧門鎖可以透過語音和影片,提升開鎖的效率和安全性......
與PC、手機等標準(Standard)裝置不同,很多智慧化裝置的CPU處理能力比較弱、記憶體也比較小,傳統的音影片引擎無法支援此類裝置。 HiStreamer應運而生,既支援輕量級的Mini/Small裝置,也支援Standard裝置(目前支援部分功能)。HiStreamer在不斷髮展和完善中,未來將會支援Standard裝置的更多功能。
二、 “管道+外掛”,實現彈性部署
為了支援Mini/Small/Standard裝置,HiStreamer採用管道(Pipeline)和外掛(plugin)的軟體架構,從而可以根據裝置的硬體和需求差異進行彈性部署。HiStreamer把音影片處理的每個過程抽象成節點,上一個節點的輸出,作為下一個節點的輸入,把多個節點連線起來,整體形成一個管道(Pipeline),完成音影片的資料讀取、解封裝、解碼、輸出的完整流程。同時,外掛可以為Pipeline的節點提供豐富的擴充套件功能,讓HiSteamer的音影片處理能力更強大。
1. Pipeline框架介紹
為了讓大家理解HiStreamer的Pipeline框架,下面以MP3音訊播放為例講解:
輸入是一個MP3檔案,輸出是播放出的音樂,這中間經過了很多步驟。
先來看一下MP3檔案結構:
圖1 MP3檔案結構
MP3檔案由ID3 Metadata容器頭和若干MP3 Frame(MP3資料幀)構成。每個MP3 Frame又由MP3 Header(MP3頭資訊)和MP3 Data構成。這一系列的MP3 Frame稱為ES Data( Element Stream Data)。
● ID3 Metadata:容器頭,主要包括標題、藝術家、專輯、音軌數量等。
● MP3 Header:包含MP3 Sync word(標識MP3資料幀起始位置)和MPEG版本資訊等。
● MP3 Data:包含壓縮的音訊資訊。
播放MP3檔案,首先需要把MP3檔案資料讀進來,然後去掉ID3 Metadata容器頭(即解封裝),再把一系列MP3 Frame解壓縮成PCM(Pulse-Code Modulation)資料,最後驅動喇叭發聲。這個過程按順序可以抽象成如下四個節點:
圖2 MP3音訊播放的Pipeline
1. 輸入節點(MediaSourceFilter): 讀取MP3原始資料,傳給下一個節點。
2. 解封裝節點(DemuxerFilter): 解析ID3 Metadata容器頭資訊,作為後續節點的引數輸入,並且把一幀幀MP3 Frame(即ES Data)傳給後續的解碼節點。
3. 解碼節點(AudioDecoderFilter): 把ES Data解碼成PCM資料,傳給輸出節點。
4. 輸出節點(AudioSinkFilter): 輸出PCM資料,驅動喇叭發聲。
由以上示例可知,HiStreamer透過Pipeline框架把音影片處理的每個過程抽象成一個個節點。這些節點是解耦的,可以靈活拼裝,從而可以根據業務需要拼裝出不同的Pipeline。同時,為了使多個節點能更好地協同工作,HiStreamer還支援節點間的引數自動協商。
2. HiStreamer外掛介紹
瞭解了HiStreamer的Pipeline框架後,我們再來看看HiStreamer外掛。
HiStreamer的Pipeline框架的很多節點(比如輸入節點、解封裝節點、解碼節點、輸出節點等)都支援外掛擴充套件。透過外掛,節點的功能變得更加豐富、更加強大。
外掛的應用場景非常廣泛,比如:
● 媒體格式非常多,且以後還會有新的格式產生,可以透過外掛支援新的媒體格式。
● 不同OS平臺或裝置,處理方式存在差異,可以透過外掛支援不同的處理方式。
● 不同型別的裝置,需求不同,能提供的CPU/ROM/RAM資源多少也不同,也可以透過外掛來支援。
3. 彈性部署
HiStreamer基於管道(Pipeline)和外掛(plugin)的軟體架構,可以根據裝置的硬體和需求差異實現彈性部署。
圖3 HiStreamer彈性部署
如圖3所示,Mini裝置(比如音響),它的CPU處理能力很弱,ROM/RAM資源很少,需要的功能也比較少,只需要音訊播放功能。HiStreamer可以配置成只支援音訊播放,並且選擇輕量級的外掛,配置同步解碼模式,減少資源消耗。而Small裝置,CPU處理能力強一些,ROM/RAM空間大一些,需要音訊播放和影片播放功能。HiStreamer可以配置成支援音影片播放,並且選擇功能更強的外掛。
三、HiStreamer邏輯架構
經過上面的介紹,我們瞭解了HiStreamer的“管道+外掛”的軟體架構。下面我們再來看看HiStreamer的詳細的邏輯架構。
圖4 HiStreamer邏輯架構圖
HiStreamer主要由HiStreamer引擎和HiStreamer外掛構成。
其中,HiStreamer引擎又分為以下四層:
● 業務封裝層:基於Pipeline封裝實現播放器、錄音機功能,簡化上層應用使用。
● Pipeline框架層:提供Pipeline和若干個節點(輸入、解封裝、解碼和輸出)的實現,支援把多個節點連線在一起形成Pipeline。
● 外掛管理層:用於外掛生命週期管理,支援動態載入或靜態連結兩種方式使用外掛。
● 工具庫層:提供框架依賴的工具,隔離作業系統差異,提供調測功能。
HiStreamer外掛,則分為平臺軟體外掛和廠商硬外掛兩類:
● 平臺軟體外掛:由OpenHarmony平臺提供,可跨產品複用的軟體演算法外掛。
● 廠商硬外掛:由廠商提供的基於硬體加速的外掛,如硬體加速的編解碼外掛。
應用開發者可以直接使用現成的外掛來實現多媒體功能,節省大量的開發時間。外掛越豐富,HiStreamer的音影片處理能力會更強大。OpenHarmony歡迎廣大開發者參與HiStreamer外掛的開發,一起來豐富HiStreamer外掛!
四、HiStreamer外掛開發及例項
下面就為大家介紹HiStreamer外掛的開發過程及例項講解,感興趣的小夥伴們趕緊學起來,一起參與HiStreamer外掛開發吧~
1. 外掛的開發
HiStreamer外掛的開發主要分為 外掛定義和 功能實現兩個部分。
(1)外掛定義
HiStreamer外掛是透過PLUGIN_DEFINITION宏來定義的。以輸入外掛FileSource為例,定義程式碼如下:
使用PLUGIN_DEFINITION宏定義外掛(即上面最後一行程式碼)時,傳入了四個引數:
a) 外掛名稱:即示例中的“FileSource”。
b) License資訊:即示例中的“LicenseType::APACHE_V2”。
c) 外掛註冊函式:即示例中的“FileSourceRegister”,該函式描述了外掛基本資訊,包括外掛物件建立函式,並且還呼叫AddPlugin把外掛註冊到系統中。
d) 外掛反註冊函式:可以傳為空實現。
(2)功能實現
實現外掛功能時,需根據要實現的外掛型別,繼承對應外掛介面類,並實現相關介面。比如實現輸入外掛FileSource,需要繼承SourcePlugin,並實現SetSource、Read等介面,程式碼如下:
FileSource外掛的完整程式碼可參考碼雲平臺OpenHarmony專案:
2. 外掛的部署
使用PLUGIN_DEFINITION定義的HiStreamer外掛,可以是單一功能的外掛,也可以是有多個功能的外掛包。每個這樣的外掛或外掛包,可以獨立編譯成.a或者.so,分別對應以下兩種部署方式:
● 靜態部署:一般用在mini裝置上,外掛編譯成靜態庫.a,連結到系統中。
● 動態部署:一般用在small/standard裝置上,外掛編譯成動態庫.so,放到系統指定目錄下,動態載入執行。
3. 外掛的執行
外掛開發完成且部署到系統之後,HiStreamer啟動時就會自動完成外掛的註冊。下一步,就是執行外掛了。
執行新實現的外掛,需要先滿足該外掛的執行條件。比如:FileSource只會在播放本地檔案時執行;MP3解碼外掛只會在播放MP3檔案時執行......
開發者可以透過日誌資訊,檢視是否執行了自己的外掛。如果有別的外掛註冊到系統中,導致自己的外掛無法執行時,可以解除安裝引起干擾的外掛。解除安裝動態部署的外掛,刪除對應的.so即可;解除安裝靜態部署的外掛,需要修改編譯指令碼取消對應外掛的編譯。
五、結束語
OpenHarmony歡迎廣大開發者一起加入HiStreamer外掛開發,擴充套件自己想要的媒體功能,共同豐富HiStreamer媒體生態!
同時,預告大家: HiStreamer的下一個版本將為Standard裝置增強更多功能,敬請期待!
本期關於HiStreamer的介紹就到這裡了,想要了解更多HiStreamer的資訊,請參考碼雲平臺OpenHarmony專案:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997629/viewspace-2889483/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OpenHarmony 3.2 Beta多媒體系列——音影片播放框架框架
- OpenHarmony 3.2 Beta Audio——音訊渲染音訊
- 抖音新劍法:PC端成短影片新戰場?
- OpenHarmony 3.2 Beta多媒體系列——影片錄製
- 黃吉——如何適配OpenHarmony自有音訊框架ADM?音訊框架
- 音影片相關
- 音影片FAQ(一):影片直播卡頓
- 【音影片】攝像頭
- 帶你玩轉OpenHarmony AI:打造智慧語音子系統AI
- pygame播放影片並實現音影片同步GAM
- Flutter(十) 音訊+影片播放Flutter音訊
- Android 音影片開發 - VideoViewAndroidIDEView
- 抖音api介面分享:抖音爬蟲 抖音影片搜尋介面 抖音商品詳情資料介面 影片列表API爬蟲
- 音影片,時代的風口浪尖!Android 開發者的新機遇!Android
- 火山引擎 RTC 影片效能降級策略解析
- 音影片廠商核心功能對比:騰訊雲音影片/聲網/即構
- OpenHarmony 官網文件有哪些上新?下篇:裝置開發文件上新
- OpenHarmony 官網文件有哪些上新?上篇:應用開發文件上新
- 共建新技術,開拓新領域,OpenHarmony技術日成功舉辦
- OpenHarmony創新賽|賦能直播第四期
- OpenHarmony創新賽|賦能直播第三期
- AI+音影片雙引擎驅動,保司線上服務能力全面升級 | 愛分析報告AI
- 短影片團購新風口,商家怎麼入駐抖音本地團購?
- Python音影片編輯庫:moviepyPython
- markdown插入圖片、音訊影片音訊
- 想要影片裡的音樂,如何提取裡面的音訊?音訊
- BANG:B站影片影像分析與處理引擎
- 用python寫一段指令碼:將舊的影片檔案中的音訊替換成新的,並儲存成新的影片檔案Python指令碼音訊
- 音影片技術原理及應用
- Android音影片開發 - MediaMetadataRetriever 相關Android
- OpenHarmony創新賽 | 您有一份創新激勵獎待領取 請查收!
- AI賦能音樂創作,人人都是音影片創作者AI
- 抖音評論過的影片怎麼找?檢視抖音評論過的影片的方法
- 短影片程式,仿抖音短影片熱門頁面開發
- Final Cut Pro:Mac影片剪輯的創意引擎Mac
- Laravel 5.8 新特性和新變化 — 影片Laravel
- Qt/C++音影片開發79-採集websocket影片流/開啟ws開頭的地址/音影片同步/儲存到MP4檔案/影片回放QTC++Web
- 網易雲音樂音影片演算法的 Serverless 探索之路演算法Server