0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【技術(shù)視界】學(xué)習(xí)指南:如何快速上手媒體生態(tài)一致體驗(yàn)開發(fā)

HarmonyOS開發(fā)者 ? 來源:未知 ? 2023-11-16 21:15 ? 次閱讀
# 技術(shù)視界# 【技術(shù)視界】欄目為開發(fā)者提供華為研發(fā)專家對于HarmonyOS關(guān)鍵技術(shù)的專業(yè)解讀,從不同角度、不同方面幫助開發(fā)者更好更快地掌握HarmonyOS相關(guān)開發(fā)知識。本期文章為大家?guī)淼氖侨A為媒體技術(shù)工程師的分享,希望為您的開發(fā)之路帶來啟發(fā)~

作者:chengcheng,華為媒體技術(shù)工程師

過去開發(fā)者們在使用多媒體能力時(shí),往往會(huì)遇到這樣的問題,比如:為什么我開發(fā)的相機(jī)不如系統(tǒng)相機(jī)的效果好?為什么我的應(yīng)用和其他的音樂一起發(fā)聲了,我要怎么處理?以及我應(yīng)該怎么做才能在系統(tǒng)的播控中心里可以看到呢?對于開發(fā)者的這些疑問,HarmonyOS通過提供簡單易用體驗(yàn)一致的生態(tài)接口,使得開發(fā)者可以輕松解決上述問題。下面會(huì)按照不同模塊逐個(gè)進(jìn)行介紹。

相機(jī)

1.1問題背景

相機(jī)應(yīng)用在早期的版本開發(fā)時(shí),會(huì)發(fā)現(xiàn)三方相機(jī)和系統(tǒng)相機(jī)拍照的效果會(huì)有較明顯的不一致。如下圖對比,可以看到,在色彩/飽和度/紋理細(xì)節(jié)等方面有一些明顯的差異。

三方相機(jī):

wKgaomVhpIaAY1wQAANLaF0w8u0434.png

系統(tǒng)相機(jī):

wKgZomVhpKOAZjLfAAI4-Was4Fk585.png

1.2問題原因

那么這一問題是怎么產(chǎn)生的呢?主要有兩個(gè)原因:

1、系統(tǒng)相機(jī)采用了私有通路,從而獲取了更好的效果

wKgaomVWFwKAY8ZLAAC5SdN7a_M734.png

2、預(yù)覽流拍照效果差

wKgaomVWFwKALiDYAACYO7MdFQc478.png

1.3問題解決

針對以上問題,系統(tǒng)提出了如下的解決思路:

1、統(tǒng)一接口,統(tǒng)一流程,統(tǒng)一效果:通過統(tǒng)一開發(fā)接口和流程,從而使得三方相機(jī)和系統(tǒng)相機(jī)獲取一致的體驗(yàn)

wKgaomVWFwOAB75lAAEI_0QE8SM360.png

2、分離預(yù)覽、拍照、錄像,明確流定義,讓正確的流做正確的事

wKgaomVWFwOAe975AAFU7-WV1vI111.png

3、相機(jī)管道流水線模型

wKgaomVWFwOAAqT7AAD6H9VGGPc052.png

1.4代碼示例

1、相機(jī)基本控制流程如下:

wKgaomVWFwOAGdnpAACw7mwQejs802.png

2、示例參考:

使用PreviewOutput實(shí)現(xiàn)相機(jī)預(yù)覽:

//1.創(chuàng)建預(yù)覽視圖XComponent,獲取SurfaceId
surfaceId=xComponent.getXComponentSurfaceId();
//2.創(chuàng)建預(yù)覽數(shù)據(jù)流輸出PreviewOutput
previewOutput=createPreviewOutput(profile,surfaceId);
//3.添加預(yù)覽數(shù)據(jù)流輸出到相機(jī)會(huì)話
session.addOutput(previewOutput);

(左右滑動(dòng)查看更多)

使用PhotoOutput實(shí)現(xiàn)相機(jī)拍照:

//1.創(chuàng)建圖片接收器ImageReceiver,獲取SurfaceId
surfaceId=imageReceiver.getReceivingSurfaceId();
//2.創(chuàng)建拍照數(shù)據(jù)流輸出PhotoOutput
photoOutput=createPhotoOutput(profile,surfaceId);
//3.添加拍照數(shù)據(jù)流輸出到相機(jī)會(huì)話
session.addOutput(photoOutput);

(左右滑動(dòng)查看更多)

使用VideoOutput實(shí)現(xiàn)相機(jī)錄像:

//1.創(chuàng)建視頻編碼器AVRecorder,獲取SurfaceId
surfaceId=avRecorder.getInputSurface();
//2.創(chuàng)建錄像數(shù)據(jù)流輸出VideoOutput
videoOutput=createVideoOutput(profile,surfaceId);
//3.添加錄像數(shù)據(jù)流輸出到相機(jī)會(huì)話
session.addOutput(videoOutput);

(左右滑動(dòng)查看更多)

更多詳細(xì)的代碼參考:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/camera-overview.md

音視頻焦點(diǎn)

2.1問題背景

音視頻應(yīng)用開發(fā)中遇到的很常見的一個(gè)場景,就是并發(fā)播放,而并發(fā)播放的一般解決思路是各個(gè)應(yīng)用對焦點(diǎn)的申請和處理。

傳統(tǒng)的焦點(diǎn)管理方法,依賴應(yīng)用遵守約定好的策略,如果有的應(yīng)用不遵守,比如不響應(yīng)或者濫用焦點(diǎn),就可能會(huì)出現(xiàn)不發(fā)聲或者亂發(fā)聲的現(xiàn)象,影響了用戶的體驗(yàn)。

2.2 解決思路

針對以上的問題,鴻蒙系統(tǒng)改進(jìn)了焦點(diǎn)管理的設(shè)計(jì),提供了統(tǒng)一的焦點(diǎn)處理策略,來規(guī)范應(yīng)用對于焦點(diǎn)的使用,以達(dá)成統(tǒng)一的發(fā)聲體驗(yàn)。

系統(tǒng)中的焦點(diǎn)管理模塊會(huì)存儲一個(gè)焦點(diǎn)策略表,定義了不同的場景下,哪些應(yīng)用可以獲取焦點(diǎn)進(jìn)行播放,哪些應(yīng)用會(huì)失去焦點(diǎn)而停止播放,等等其他策略。

wKgaomVWFwOAWpGiAADRPWs0QLc305.png

2.3代碼示例

可以通過接口的使用來看一下實(shí)際處理策略。

首先,在A應(yīng)用創(chuàng)建并使用AudioRenderer播放的時(shí)候,系統(tǒng)會(huì)自動(dòng)為其申請焦點(diǎn),這個(gè)是系統(tǒ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è)事件后,就需要存儲并更新應(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ù)播放的操作,或者忽略,這個(gè)非強(qiáng)制行為。

// 1.AudioRenderer進(jìn)行播放時(shí),系統(tǒng)會(huì)申請焦點(diǎn)
audioRenderer.start((err) => {});
// 2.注冊音頻打斷事件的回調(diào)
audioRenderer.on('audioInterrupt', (event) => {
  if (event.forceType === audio.InterruptForceType.INTERRUPT_FORCE) {
      // 3.強(qiáng)制打斷類型:音頻相關(guān)處理已由系統(tǒng)執(zhí)行,應(yīng)用需更新自身狀態(tài)
  } else if (event.forceType === audio.InterruptForceType.INTERRUPT_SHARE) {
      // 4.共享打斷類型:應(yīng)用可自主選擇執(zhí)行相關(guān)操作或忽略打斷事件
}});

(左右滑動(dòng)查看更多)

更多詳細(xì)的代碼參考:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/audio-playback-concurrency.md

低時(shí)延播放

3.1問題背景

游戲、K歌、樂器等應(yīng)用,對于音頻的輸出時(shí)延要求很高,常規(guī)的播放通路一般只能達(dá)到60ms左右甚至更高的時(shí)延,無法滿足這些應(yīng)用的使用訴求。

3.2解決思路

鴻蒙系統(tǒng)提供了低時(shí)延通路的設(shè)計(jì)。如下圖所示,在系統(tǒng)中的普通通路之外,新增了一條垂直打通硬件的低時(shí)延通路,通過bypass 框架層直接在DSP進(jìn)行混音,可以達(dá)成最低20ms的音頻輸出時(shí)延。

同時(shí),為了簡化應(yīng)用的接入,通過在接口中提供不同的參數(shù)配置,使開發(fā)者可以用一套接口同時(shí)支持低時(shí)延和普通通路兩種播放模式。

wKgaomVWFwOALUhOAAEOGBo7olg541.png

3.3代碼示例

可以通過OH_AudioStreamXXX接口來進(jìn)行低時(shí)延通路的創(chuàng)建,通過傳入不同參數(shù)可以設(shè)置低時(shí)延模式,亦可以設(shè)置普通模式,從而使用一套接口來適配不同場景。

同時(shí),低時(shí)延模式一般采用來pull模式來獲取數(shù)據(jù),這里提供了一個(gè)callback,需要應(yīng)用創(chuàng)建并填入。

// 1.創(chuàng)建音頻流構(gòu)造器,設(shè)置參數(shù)
OH_AudioStreamBuilder_Create(&builder, AUDIOSTREAM_TYPE_RENDERER);
OH_AudioStreamBuilder_SetSamplingRate(builder, rate); // 其他參數(shù)設(shè)置…
// 2.設(shè)置低延時(shí)模式和數(shù)據(jù)回調(diào)
OH_AudioStreamBuilder_SetLatencyMode(builder, AUDIOSTREAM_LATENCY_MODE_FAST) ;
OH_AudioStreamBuilder_SetRendererCallback(builder, callback, nullptr);
// 3.構(gòu)造播放的音頻流并使用
OH_AudioStreamBuilder_GenerateRenderer(builder, &audioRenderer);
OH_AudioRenderer_Start(audioRenderer);?OH_AudioRenderer_Release(audioRenderer);

(左右滑動(dòng)查看更多)

更多詳細(xì)的代碼參考:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/using-ohaudio-for-playback.md

播控能力

4.1系統(tǒng)能力

通過前面所說的焦點(diǎn)管理策略,系統(tǒng)解決了音視頻應(yīng)用并發(fā)播放的問題;對于播放中的應(yīng)用的控制,系統(tǒng)也提供了規(guī)范支持。

系統(tǒng)提供了C/S模式的播控管理的框架,應(yīng)用作為客戶端,接入AVSession的會(huì)話端,設(shè)置必要的信息;系統(tǒng)的播控中心獲取與之對應(yīng)的會(huì)話控制器,獲取信息進(jìn)行展示,以及對應(yīng)用發(fā)送控制命令。

通過標(biāo)準(zhǔn)接口的接入,規(guī)范了應(yīng)用的播放行為;同時(shí)通過統(tǒng)一的播控中心的入口,使得用戶對于播放的控制做到一鍵直達(dá)。

wKgaomVWFwSAZpjcAAEL-L5GYnM102.png

4.2 代碼示例

import AVSessionManager from '@ohos.multimedia.avsession';
// 開始創(chuàng)建并激活媒體會(huì)話
// 創(chuàng)建session
let context: Context = getContext(this);
async function createSession() {
  let type: AVSessionManager.AVSessionType = 'audio';
  let session = await AVSessionManager.createAVSession(context, 'SESSION_NAME', type);
  await session.activate();
}
async function setSessionInfo() {
  // 播放器邏輯··· 引發(fā)媒體信息與播放狀態(tài)的變更
  // 設(shè)置必要的媒體信息
  let metadata: AVSessionManager.AVMetadata = {
    assetId: '0',
    title: 'TITLE',
    artist: 'ARTIST'
  };
  session.setAVMetadata(metadata).then(() => {
  }).catch((err: BusinessError) => {
  });
  // 簡單設(shè)置一個(gè)播放狀態(tài) - 暫停 未收藏
  let playbackState: AVSessionManager.AVPlaybackState = {
    state:AVSessionManager.PlaybackState.PLAYBACK_STATE_PAUSE,
    isFavorite:false
  };
  session.setAVPlaybackState(playbackState, (err) => {
  });
}
async function setListenerForMesFromController() {
  // 一般在監(jiān)聽器中會(huì)對播放器做相應(yīng)邏輯處理
  // 不要忘記處理完后需要通過set接口同步播放相關(guān)信息,參考上面的用例
  session.on('play', () => {
    // do some tasks ···
  });
  session.on('pause', () => {
    // do some tasks ···
  });
}

(左右滑動(dòng)查看更多)

更多詳細(xì)的代碼參考:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/media/avsession-overview.md

更多推薦


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1966

    瀏覽量

    29955

原文標(biāo)題:【技術(shù)視界】學(xué)習(xí)指南:如何快速上手媒體生態(tài)一致體驗(yàn)開發(fā)

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    一致性測試系統(tǒng)的技術(shù)原理和也應(yīng)用場景

    一致性測試系統(tǒng)是用來檢測零部件或系統(tǒng)實(shí)現(xiàn)是否符合相關(guān)標(biāo)準(zhǔn)或規(guī)范的測試流程,其技術(shù)原理和應(yīng)用場景具體如下:技術(shù)原理 基本框架:協(xié)議一致性測試的理論已經(jīng)相對成熟,主要代表是ISO制定的國際
    發(fā)表于 11-01 15:35

    級聯(lián)一致性和移相器校準(zhǔn)應(yīng)用手冊

    電子發(fā)燒友網(wǎng)站提供《級聯(lián)一致性和移相器校準(zhǔn)應(yīng)用手冊.pdf》資料免費(fèi)下載
    發(fā)表于 08-29 10:48 ?0次下載
    級聯(lián)<b class='flag-5'>一致</b>性和移相器校準(zhǔn)應(yīng)用手冊

    LIN一致性測試規(guī)范2.1

    電子發(fā)燒友網(wǎng)站提供《LIN一致性測試規(guī)范2.1.pdf》資料免費(fèi)下載
    發(fā)表于 08-15 17:14 ?3次下載

    鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)

    運(yùn)行鴻蒙4.1系統(tǒng),意味著你將擁有更加流暢、高效的開發(fā)體驗(yàn)。從硬件到軟件,從底層到應(yīng)用,切都變得觸手可及! 那么,如何快速上手呢?別擔(dān)心,我們已經(jīng)為你準(zhǔn)備好了詳盡的
    發(fā)表于 07-23 10:44

    銅線鍵合焊接一致性:如何突破技術(shù)瓶頸?

    在微電子封裝領(lǐng)域,銅線鍵合技術(shù)以其低成本、高效率和良好的電氣性能等優(yōu)勢,逐漸成為芯片與基板連接的主流方式。然而,銅線鍵合過程中的焊接一致性問題是制約其進(jìn)步發(fā)展和應(yīng)用的關(guān)鍵難題。焊接一致
    的頭像 發(fā)表于 07-04 10:12 ?1547次閱讀
    銅線鍵合焊接<b class='flag-5'>一致</b>性:如何突破<b class='flag-5'>技術(shù)</b>瓶頸?

    芯片封裝工程師必備知識和學(xué)習(xí)指南

    芯片封裝工程師是現(xiàn)代電子行業(yè)中不可或缺的專業(yè)人才,他們的工作涉及將設(shè)計(jì)好的芯片封裝到細(xì)小的封裝體中,以確保芯片能夠在各種環(huán)境下穩(wěn)定、可靠地工作。本文將詳細(xì)介紹芯片封裝工程師必備的專業(yè)知識,以及成為優(yōu)秀芯片封裝工程師的學(xué)習(xí)指南
    的頭像 發(fā)表于 04-26 10:50 ?1805次閱讀
    芯片封裝工程師必備知識和<b class='flag-5'>學(xué)習(xí)指南</b>

    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別

    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別 在數(shù)字化時(shí)代,數(shù)據(jù)備份成為了企業(yè)信息安全的核心環(huán)節(jié)。但在備份過程中,兩個(gè)關(guān)鍵概念——應(yīng)用一致性和崩潰一致性,常常被誤解或混淆。
    的頭像 發(fā)表于 03-11 11:29 ?807次閱讀
    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用<b class='flag-5'>一致</b>性與崩潰<b class='flag-5'>一致</b>性的區(qū)別

    openai sora如何使用?Sora 使用指南快速上手

    OpenAI Sora 使用指南快速上手 歡迎使用OpenAI Sora,款強(qiáng)大的人工智能視頻生成工具。無論您是視頻制作新手還是專業(yè)人士,本指南
    的頭像 發(fā)表于 02-20 11:19 ?4080次閱讀

    使用 Taro 開發(fā)鴻蒙原生應(yīng)用 —— 快速上手,鴻蒙應(yīng)用開發(fā)指南

    為鴻蒙原生應(yīng)用。 在 《使用 Taro 開發(fā)鴻蒙原生應(yīng)用》 系列文章中,我們已經(jīng)介紹了 鴻蒙的基本概念 和 Taro 適配鴻蒙的原理。本文作為該系列的第三篇,將正式為開發(fā)者提供份完整的鴻蒙應(yīng)用
    的頭像 發(fā)表于 02-02 16:09 ?797次閱讀
    使用 Taro <b class='flag-5'>開發(fā)</b>鴻蒙原生應(yīng)用 —— <b class='flag-5'>快速</b><b class='flag-5'>上手</b>,鴻蒙應(yīng)用<b class='flag-5'>開發(fā)指南</b>

    DDR一致性測試的操作步驟

    DDR一致性測試的操作步驟? DDR(雙數(shù)據(jù)率)一致性測試是對DDR內(nèi)存模塊進(jìn)行測試以確保其性能和可靠性。在進(jìn)行DDR一致性測試時(shí),需要遵循系列的操作步驟,以保證測試的準(zhǔn)確性和完整性
    的頭像 發(fā)表于 02-01 16:24 ?1274次閱讀

    鎖相環(huán)的輸入輸出相位一致嗎?

    鎖相環(huán)是保證相位一致,還是相位差一致?鎖相環(huán)的輸入輸出相位一致嗎? 鎖相環(huán)(PLL)是種回路控制系統(tǒng),用于保持輸出信號的相位與參考信號的相位之間的恒定關(guān)系。簡單來說,鎖相環(huán)的目的是保
    的頭像 發(fā)表于 01-31 15:45 ?936次閱讀

    HC6800-ES V2.0單片機(jī)開發(fā)學(xué)習(xí)指南

    電子發(fā)燒友網(wǎng)站提供《HC6800-ES V2.0單片機(jī)開發(fā)學(xué)習(xí)指南.doc》資料免費(fèi)下載
    發(fā)表于 01-07 09:48 ?11次下載

    HarmonyOS NEXT讓開發(fā)快速上手媒體生態(tài)一致體驗(yàn)開發(fā)

    系統(tǒng)相機(jī)的效果好?”,“為什么我的應(yīng)用和其他的音樂起發(fā)聲了,我要怎么處理” 以及“我應(yīng)該怎么做才能在系統(tǒng)的播控中心里可以看到?”等問題。對于開發(fā)者的這些疑問,HarmonyOS NEXT通過提供簡單易用體驗(yàn)一致
    的頭像 發(fā)表于 11-22 16:20 ?616次閱讀
    HarmonyOS NEXT讓<b class='flag-5'>開發(fā)</b>者<b class='flag-5'>快速</b><b class='flag-5'>上手</b><b class='flag-5'>媒體</b><b class='flag-5'>生態(tài)</b><b class='flag-5'>一致</b>體驗(yàn)<b class='flag-5'>開發(fā)</b>

    學(xué)習(xí)指南:如何快速上手媒體生態(tài)一致體驗(yàn)開發(fā)

    呢?對于開發(fā)者的這些疑問,HarmonyOS通過提供簡單易用體驗(yàn)一致生態(tài)接口,使得開發(fā)者可以輕松解決上述問題。下面會(huì)按照不同模塊逐個(gè)進(jìn)行介紹。
    發(fā)表于 11-17 11:09

    什么是鋰離子電池不一致性?如何提高鋰離子電池的一致性?

    什么是鋰離子電池不一致性?鋰離子電池不穩(wěn)定的原因?如何提高鋰離子電池的一致性? 鋰離子電池不一致性是指同批次或不同批次的鋰離子電池在性能上出現(xiàn)不
    的頭像 發(fā)表于 11-10 14:49 ?1642次閱讀