隨著技術(shù)的不斷發(fā)展和多媒體的不斷演進(jìn),越來(lái)越多的傳統(tǒng)場(chǎng)景將有可能被顛覆,開(kāi)發(fā)者們也需要不斷的學(xué)習(xí)和更新自己的技能,以適應(yīng)新的需求和挑戰(zhàn)。然而在開(kāi)發(fā)過(guò)程中,很多開(kāi)發(fā)者都會(huì)遇到“為什么我開(kāi)發(fā)的相機(jī)不如系統(tǒng)相機(jī)的效果好?”,“為什么我的應(yīng)用和其他的音樂(lè)一起發(fā)聲了,我要怎么處理” 以及“我應(yīng)該怎么做才能在系統(tǒng)的播控中心里可以看到?”等問(wèn)題。對(duì)于開(kāi)發(fā)者的這些疑問(wèn),HarmonyOS NEXT通過(guò)提供簡(jiǎn)單易用體驗(yàn)一致的生態(tài)借口,就能幫助開(kāi)發(fā)者輕松解決上述問(wèn)題。
三個(gè)統(tǒng)一,讓三方相機(jī)與系統(tǒng)相機(jī)獲取一致體驗(yàn)
相機(jī)應(yīng)用在早期的版本開(kāi)發(fā)中,開(kāi)發(fā)者們能夠發(fā)現(xiàn)三方相機(jī)和系統(tǒng)相機(jī)拍照的效果會(huì)有較明顯的不一致,色彩/飽和度/紋理細(xì)節(jié)等方面會(huì)出現(xiàn)一些明顯的差異。
(三方相機(jī))
(系統(tǒng)相機(jī))
出現(xiàn)這樣的情況主要有兩個(gè)原因,一個(gè)是因?yàn)橄到y(tǒng)相機(jī)采用了私有同路,從而獲取了更好的拍照效果,另一個(gè)原因就是三方相機(jī)預(yù)覽流拍照效果相對(duì)較差。
針對(duì)上述問(wèn)題,HarmonyOS NEXT三個(gè)步驟即可解決相關(guān)問(wèn)題。
第一步:統(tǒng)一接口,統(tǒng)一流程,統(tǒng)一效果:通過(guò)統(tǒng)一開(kāi)發(fā)接口和流程,從而使得三方相機(jī)和系統(tǒng)相機(jī)獲取一致的體驗(yàn)
第二步:分離預(yù)覽、拍照、錄像,明確流定義,讓正確的流做正確的事
第三步:相機(jī)管道流水線模型
開(kāi)發(fā)者可參考下方示例代碼:
相機(jī)基本控制流程:
使用PreviewOutput實(shí)現(xiàn)相機(jī)預(yù)覽:
使用PhotoOutput實(shí)現(xiàn)相機(jī)拍照:
使用VideoOutput實(shí)現(xiàn)相機(jī)錄像:
統(tǒng)一焦點(diǎn)處理,并發(fā)播放更有序
開(kāi)發(fā)者在音視頻應(yīng)用開(kāi)發(fā)中最常遇到的場(chǎng)景,就是并發(fā)播放,而并發(fā)播放一般解決思路是各個(gè)應(yīng)用對(duì)焦點(diǎn)的申請(qǐng)和處理。傳統(tǒng)的焦點(diǎn)管理方法更依賴(lài)應(yīng)用遵守約定好的策略,如果有的應(yīng)用不遵守,比如不響應(yīng)或者濫用焦點(diǎn),就可能會(huì)出現(xiàn)不發(fā)聲或者亂發(fā)聲的現(xiàn)象,影響了用戶(hù)的體驗(yàn)。
針對(duì)上述問(wèn)題,HarmonyOS NEXT進(jìn)一步改進(jìn)了焦點(diǎn)管理的設(shè)計(jì),提供統(tǒng)一的焦點(diǎn)處理策略,用以規(guī)范應(yīng)用對(duì)于焦點(diǎn)的使用,以達(dá)成統(tǒng)一的發(fā)聲體驗(yàn),HarmonyOS NEXT系統(tǒng)中的焦點(diǎn)管理模塊兒會(huì)存儲(chǔ)一個(gè)焦點(diǎn)策略表,定義了不同的場(chǎng)景下,哪些應(yīng)用可以獲取焦點(diǎn)進(jìn)行播放,哪些應(yīng)用會(huì)失去焦點(diǎn)而停止播放等策略。
各位開(kāi)發(fā)者可通過(guò)接口的使用來(lái)感受實(shí)際處理策略。
首先,在A應(yīng)用創(chuàng)建并使用AudioRenderer播放的時(shí)候,系統(tǒng)會(huì)自動(dòng)為其申請(qǐng)焦點(diǎn),此行為屬于系統(tǒng)的行為。
當(dāng)A應(yīng)用播放后,系統(tǒng)的焦點(diǎn)策略會(huì)進(jìn)行判斷,如果A應(yīng)用可以搶到焦點(diǎn),那就會(huì)使得失去焦點(diǎn)的應(yīng)用暫停播放;同時(shí)被暫停的應(yīng)用也會(huì)在INTERRUPT_FORCE的回調(diào)事件中,得到暫停的狀態(tài),應(yīng)用在收到這個(gè)事件后,就需要存儲(chǔ)并更新應(yīng)用內(nèi)的狀態(tài)。
當(dāng)A應(yīng)用停止播放后,之前被暫停的應(yīng)用也會(huì)收到一個(gè)恢復(fù)播放的事件,這個(gè)事件會(huì)在INTERRUPT_SHARE中,應(yīng)用可以進(jìn)行恢復(fù)播放的操作,或者忽略,屬于非強(qiáng)制行為。
開(kāi)發(fā)者可參考下方示例代碼:
打通低時(shí)延通路,一套接口適配不同場(chǎng)景
很多開(kāi)發(fā)者都知道,游戲、K歌、樂(lè)器等應(yīng)用對(duì)于音頻的輸出時(shí)延要求很高,常規(guī)的播放通路一般只能達(dá)到60ms左右,甚至更高的時(shí)延,并不能滿足這些應(yīng)用的使用訴求。而HarmonyOS NEXT則為此提供了低時(shí)延通路的設(shè)計(jì)方案。
首先在系統(tǒng)中的普通通路之外新增一條垂直打通硬件的低時(shí)延通路,通過(guò)bypass 框架層直接在DSP進(jìn)行混音,達(dá)成最低20ms的音頻輸出時(shí)延。
其次為了簡(jiǎn)化應(yīng)用的接入,通過(guò)在接口中提供不同的參數(shù)配置,就能使開(kāi)發(fā)者可以用一套接口同時(shí)支持低時(shí)延和普通通路兩種播放模式。
開(kāi)發(fā)者們可以通過(guò)OH_AudioStreamXXX接口來(lái)進(jìn)行低時(shí)延通路的創(chuàng)建,通過(guò)傳入不同參數(shù)就可以設(shè)置低時(shí)延模式,亦可以設(shè)置普通模式,從而使用一套接口來(lái)適配不同場(chǎng)景。
同時(shí),低時(shí)延模式一般采用來(lái)pull模式來(lái)獲取數(shù)據(jù),在這里提供一個(gè)callback,需要應(yīng)用創(chuàng)建并填入。
開(kāi)發(fā)者可參考下方示例代碼:
播控應(yīng)用控制一鍵直達(dá)
基于上方所述焦點(diǎn)管理策略,HarmonyOS NEXT解決了音視頻應(yīng)用并發(fā)播放的問(wèn)題;而對(duì)于播放中的應(yīng)用控制,系統(tǒng)也提供了規(guī)范支持。
首先在系統(tǒng)提供的C/S模式的播控管理的框架中,應(yīng)用作為客戶(hù)端,接入AVSession的會(huì)話端,設(shè)置必要的信息;
其次系統(tǒng)的播控中心獲取與之對(duì)應(yīng)的會(huì)話控制器,獲取信息進(jìn)行展示,以及對(duì)應(yīng)用發(fā)送控制命令。
最后通過(guò)標(biāo)準(zhǔn)接口的接入,規(guī)范應(yīng)用的播放行為;同時(shí)通過(guò)統(tǒng)一的播控中心的入口,就能讓用戶(hù)對(duì)于播放的控制做到一鍵直達(dá)。
開(kāi)發(fā)者可參考下方示例代碼:
想要跟上技術(shù)發(fā)展的步伐,開(kāi)發(fā)者學(xué)習(xí)新技術(shù)的同時(shí),能夠擁有開(kāi)發(fā)便捷高效的工具則能達(dá)到事半功倍的效果。除了多媒體技術(shù)的開(kāi)發(fā)管理,HarmonyOS NEXT也在積極為各位開(kāi)發(fā)者提供其他更多技術(shù)開(kāi)發(fā)解決方案,讓開(kāi)發(fā)者在高效開(kāi)發(fā)之余也能持續(xù)拓寬視野,提高自己的創(chuàng)新能力。
關(guān)鍵詞: