一、背景
在當(dāng)前全民直播時代,我們每天刷著五花八門的抖音短視頻,看著各式各樣電視劇、電影以及隨時映入眼簾的各類視頻廣告等等,每天有無數(shù)的視頻文件被生成、播放。我們的眼球被花里胡哨的視頻瘋狂的沖擊,或無腦搞笑、或夸張諷刺、或雞湯淋頭、或無效科普等等,與此同時我們是否也可以想一想這些個撩人的視頻是怎么在我們眼前設(shè)備播放出來的??播放一個視頻文件對于OpenHarmony 3.1(以下簡稱OH)來說自然不在話下,這篇文章將告訴你一個視頻文件(本文以MP4封裝格式、H264壓縮格式的的視頻文件為例)是怎么在OH的設(shè)備上播放出來的。
二、OpenHarmony3.1媒體能力全景
OH技術(shù)架構(gòu)如下圖所示,完成視頻文件播放功能的是多媒體子系統(tǒng)。
多媒體子系統(tǒng)框架如下圖所示:
OH拉起了一個叫mediaserver的服務(wù)來處理媒體事務(wù),并且封裝了接口層包括JS接口、native接口提供給APP調(diào)用,mediaserver的核心則是引入了gstreamer(以下簡稱gst)框架來完成媒體功能。gstreamer是一套功能強(qiáng)大、兼容性好、結(jié)構(gòu)清晰的開源媒體框架,這里不做贅述,后面有專文解析。OH也在gst的基礎(chǔ)上開發(fā)了player engine來實(shí)現(xiàn)播放,同時也利用的gst豐富的插件資源實(shí)現(xiàn)幾乎所有的媒體功能,當(dāng)前已移植進(jìn)來的開源插件包括file source、demuxer、video decoder、libav插件等等,當(dāng)然也包括OH自研的video sink、memsink、Codec hdi插件等等。
三、H264視頻播放道路
大象裝進(jìn)冰箱分幾步,我們來看視頻播放流程:
播放一個視頻大致分為4步:
解協(xié)議->解封裝->解壓縮->送顯
播放pipeline
根據(jù)視頻播放的步驟,我們在OH上每一個環(huán)節(jié)都能找到對應(yīng)的插件來完成:
1、對于一個本地視頻文件(比如uri=file:///data/h264-640x480.mp4),對應(yīng)的filesrc插件來完成文件的解析,拿到MP4文件流;
2、拿到MP4文件流后,對應(yīng)的qtdemux插件來解封裝,完成音視頻分流,輸出H264裸碼流和音頻流;
3、拿到H264碼流后,h264parse插件開始切片,輸出H264幀數(shù)據(jù);
4、處理H264幀數(shù)據(jù),就由avdec_h264插件來完成,一般情況會輸出NV12的像素?cái)?shù)據(jù),當(dāng)然這個解碼器是基于ffmpeg的軟解插件,相信不久各個芯片廠商的硬件加速解碼器都會加進(jìn)來;
5、至此解碼的工作已經(jīng)完成,后面就要根據(jù)顯示的像素格式、size來對解碼輸出數(shù)據(jù)進(jìn)行后處理(轉(zhuǎn)換、縮放、裁剪等),會有Converter、Scaler、Clip插件來完成;
6、滿足顯示要求后就會使用suRFacesink插件完成送顯。
再加上audio的插件解碼出音頻數(shù)據(jù),OH的player會完成音視頻同步,至此一個視頻文件就會播放顯示在屏幕上。
在OH為了更好的用戶體驗(yàn),同時也引入了一些解決性能問題的插件,比如multiqueue插件來實(shí)現(xiàn)buffer隊(duì)列,也使用decodebin高級插件來完成解碼element的選擇。
最終我們可以梳理出來一條播放的pipeline:
通過播放OH自帶的圖庫播放本地H264視頻,抓取log,搜索OnElementSetuPCB關(guān)鍵字也可以得到播放的pipeline,也進(jìn)一步驗(yàn)證了本文的分析。
我們也可以使用gst-launch手動創(chuàng)建pipeline來驗(yàn)證:
gst-launch --gst-plugin-path=/system/lib/media/plugins filesrc location=/data/media/h264.mp4 ! qtdemux ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=640,height=480 ! surfacememsink
審核編輯 :李倩
-
視頻
+關(guān)注
關(guān)注
6文章
1930瀏覽量
72778 -
開源
+關(guān)注
關(guān)注
3文章
3231瀏覽量
42346 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3648瀏覽量
16076 -
潤和軟件
+關(guān)注
關(guān)注
1文章
247瀏覽量
848
原文標(biāo)題:OpenHarmony 3.1 H264 視頻播放之路
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論