• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法技術(shù)

    技術(shù)編號(hào):33071736 閱讀:22 留言:0更新日期:2022-04-15 10:06
    本發(fā)明專利技術(shù)公開了一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法,通過獲取Linux系統(tǒng)中安卓兼容環(huán)境中安卓應(yīng)用所采用的音頻播放器的類型確定音頻的輸出方式,且不同的輸出方式均有效減少了安卓應(yīng)用在音頻播放過程所涉及的進(jìn)程,縮減了進(jìn)程間的數(shù)據(jù)交互,有效提高了安卓應(yīng)用的音頻輸出效率,降低了輸出延時(shí),改善了用戶體驗(yàn)。用戶體驗(yàn)。用戶體驗(yàn)。

    【技術(shù)實(shí)現(xiàn)步驟摘要】
    一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法


    [0001]本專利技術(shù)屬于桌面操作系統(tǒng)上運(yùn)行移動(dòng)應(yīng)用的開發(fā)
    ,具體涉及一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法。

    技術(shù)介紹

    [0002]音頻數(shù)據(jù)處理是安卓系統(tǒng)非常重要的組成部分,負(fù)責(zé)音頻數(shù)據(jù)的采集和輸出、音頻流的控制、音頻設(shè)備的管理及音量調(diào)節(jié)等,主要包括音頻應(yīng)用框架(Audio Application Framework)、音頻本地框架(Audio Native Framework)、音頻服務(wù)(Audio Services)和音頻硬件抽象層(Audio HAL)。此外,與音頻數(shù)據(jù)處理強(qiáng)相關(guān)的有 MultiMedia,MultiMedia 負(fù)責(zé)音視頻的編解碼,MultiMedia 將解碼后的數(shù)據(jù)通過 AudioTrack 輸出,而 AudioRecord 采集的錄音數(shù)據(jù)交由 MultiMedia 進(jìn)行編碼。
    [0003]一般情況下,安卓系統(tǒng)中安卓應(yīng)用播放音頻可采用MediaPlayer 和 AudioTrack。其中,MediaPlayer支持播放多種格式的音源,如:mp3、flac、wma、ogg、wav等,MediaPlayer的實(shí)現(xiàn)過程中先在 Native 層創(chuàng)建對(duì)應(yīng)的音頻解碼器和AudioTrack,并將由音頻解碼器解碼后的數(shù)據(jù)交由AudioTrack進(jìn)行輸出,由此可見,MediaPlayer的應(yīng)用場(chǎng)景更廣使用也更方便。AudioTrack僅支持播放解碼后的 PCM 數(shù)據(jù)流,通常在對(duì)聲音時(shí)延要求非常苛刻的應(yīng)用場(chǎng)景才需要用到AudioTrack。
    [0004]安卓系統(tǒng)中安卓應(yīng)用播放音頻的過程為:MediaPlayer解析音頻文件格式,然后調(diào)用解碼器生成PCM格式音頻數(shù)據(jù),再將PCM音頻數(shù)據(jù)傳輸給AudioTrack;AudioTrack將音頻數(shù)據(jù)傳輸給AudioFlinger;AudioFlinger混音后調(diào)用音頻設(shè)備的HAL接口,由音頻設(shè)備的HAL接口操作音頻設(shè)備輸出音頻。
    [0005]綜上所述,由于安卓系統(tǒng)中安卓應(yīng)用輸出音頻的操作過程所涉及的中間層、進(jìn)程較多,音頻數(shù)據(jù)處理流程較為復(fù)雜,數(shù)據(jù)傳輸過程的開銷較大,因此導(dǎo)致安卓應(yīng)用的音頻輸出效率較低,輸出延時(shí)較大,很大程度上影響用戶體驗(yàn),現(xiàn)有運(yùn)行于Linux平臺(tái)上的安卓兼容環(huán)境內(nèi)一般是基于安卓系統(tǒng)的音頻輸出機(jī)制實(shí)現(xiàn)的安卓應(yīng)用的音頻輸出,因此仍存在上述問題。

    技術(shù)實(shí)現(xiàn)思路

    [0006]有鑒于此,本專利技術(shù)提供了一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法,能夠針對(duì)不同的音頻播放器及不同的音頻文件輸出標(biāo)識(shí)動(dòng)態(tài)確定音頻輸出方式從而實(shí)現(xiàn)低延遲的音頻輸出。
    [0007]本專利技術(shù)提供的一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法,包括以下步驟:步驟1、安卓應(yīng)用需要輸出音頻時(shí),若當(dāng)前安卓兼容環(huán)境中不存在其他安卓應(yīng)用正在輸出音頻,則安卓應(yīng)用獲取音頻焦點(diǎn)執(zhí)行步驟2;否則執(zhí)行步驟6;步驟2、若安卓應(yīng)用采用MediaPlayer輸出音頻則執(zhí)行步驟3,若安卓應(yīng)用采用AudioTrack輸出音頻則執(zhí)行步驟4;
    步驟3、讀取待輸出音頻后,采用解碼器逐幀解碼待輸出音頻得到解碼音頻文件,再基于PulseAudio接口逐幀將解碼音頻文件輸出到Linux音頻設(shè)備,在安卓應(yīng)用完成音頻輸出后執(zhí)行步驟5;步驟4、讀取待輸出音頻獲取其輸出標(biāo)識(shí),根據(jù)輸出標(biāo)識(shí)輸出待輸出音頻,在安卓應(yīng)用完成音頻輸出后執(zhí)行步驟5;步驟5、安卓應(yīng)用釋放音頻焦點(diǎn),并檢測(cè)安卓兼容環(huán)境內(nèi)的暫停音頻流隊(duì)列,如果暫停音頻流隊(duì)列中存在被暫停的音頻流,則選取暫停音頻流隊(duì)列中最早暫停的音頻流繼續(xù)播放,結(jié)束本流程;如果沒有,則結(jié)束本流程;步驟6、安卓應(yīng)用請(qǐng)求獲取音頻焦點(diǎn),若安卓應(yīng)用未能獲取音頻焦點(diǎn),則等待設(shè)定時(shí)間間隔后執(zhí)行步驟6;若安卓應(yīng)用獲取了音頻焦點(diǎn),則暫停當(dāng)前音頻的輸出,并等待當(dāng)前音頻解碼完畢后,將當(dāng)前音頻作為暫停音頻流追加到安卓兼容環(huán)境的暫停音頻流隊(duì)列中,執(zhí)行步驟2。
    [0008]進(jìn)一步地,所述步驟3中基于解碼器逐幀解碼待輸出音頻得到解碼音頻文件,再基于PulseAudio接口逐幀將解碼音頻文件輸出到Linux音頻設(shè)備包括:將待輸出音頻讀入內(nèi)存緩沖區(qū);采用解碼單元從內(nèi)存緩沖區(qū)逐幀讀取待輸出音頻并解碼得到解碼音頻文件,將解碼音頻文件寫入解碼內(nèi)存緩沖區(qū)后;再使用輸出單元從解碼內(nèi)存緩沖區(qū)中讀取解碼音頻文件,并根據(jù)碼率確定輸出間隔,按照輸出間隔采用PulseAudio接口逐幀輸出到Linux音頻設(shè)備。
    [0009]進(jìn)一步地,所述解碼單元及輸出單元均為以Native函數(shù)的方式實(shí)現(xiàn)。
    [0010]進(jìn)一步地,在所述將待輸出音頻讀入內(nèi)存緩沖區(qū)之前,根據(jù)待輸出音頻的數(shù)據(jù)源確定待輸出音頻的類型,若待輸出音頻的類型為本地音頻文件,則將本地音頻文件一次性讀入內(nèi)存緩沖區(qū),再根據(jù)音頻文件的編碼格式、壓縮比及編碼文件大小確定音頻文件解碼后的解碼音頻文件大小,根據(jù)解碼音頻文件大小分配用于存放解碼音頻文件的解碼內(nèi)存緩沖區(qū);若待輸出音頻為網(wǎng)絡(luò)音頻流,則將待輸出音頻逐幀讀入內(nèi)存緩沖區(qū)。
    [0011]進(jìn)一步地,所述按照輸出間隔采用PulseAudio接口逐幀輸出到Linux音頻設(shè)備時(shí)采用Linux系統(tǒng)的計(jì)時(shí)器接口進(jìn)行計(jì)時(shí)。
    [0012]進(jìn)一步地,所述步驟4中根據(jù)輸出標(biāo)識(shí)輸出待輸出音頻包括:當(dāng)輸出標(biāo)識(shí)為AUDIO_OUTPUT_FLAG_DIRECT時(shí),采用ALSA接口將待輸出音頻輸出至Linux音頻設(shè)備;當(dāng)輸出標(biāo)識(shí)為AUDIO_OUTPUT_FLAG_PRIMARY時(shí),將待輸出音頻發(fā)送至AudioFlinger;當(dāng)輸出標(biāo)識(shí)為AUDIO_OUTPUT_FLAG_FAST時(shí),若安卓應(yīng)用以獨(dú)占方式使用ALSA接口則采用ALSA接口將待輸出音頻輸出至Linux音頻設(shè)備;否則采用PulseAudio將待輸出音頻輸出至Linux音頻設(shè)備;當(dāng)輸出標(biāo)識(shí)為AUDIO_OUTPUT_FLAG_DEEP_BUFFER時(shí),采用PulseAudio將待輸出音頻輸出至Linux音頻設(shè)備;當(dāng)輸出標(biāo)識(shí)為AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD時(shí),采用解碼器解碼待輸出音頻得到解碼音頻文件,若安卓應(yīng)用以獨(dú)占方式使用ALSA接口則采用ALSA接口將待輸出音頻輸出至Linux音頻設(shè)備;否則采用PulseAudio將待輸出音頻輸出至Linux音頻設(shè)備。
    [0013]有益效果:本專利技術(shù)通過獲取Linux系統(tǒng)中安卓兼容環(huán)境中安卓應(yīng)用所采用的音頻播放器的類型確定音頻的輸出方式,且不同的輸出方式均有效減少了安卓應(yīng)用在音頻播放過程所涉及的進(jìn)程,縮減了進(jìn)程間的數(shù)據(jù)交互,有效提高了安卓應(yīng)用的音頻輸出效率,降低了輸出延時(shí),改善了用戶體驗(yàn)。
    附圖說明
    [0014]圖1為本專利技術(shù)提供的一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法的流程圖。
    具體實(shí)施方式
    [0015]下面結(jié)合附圖并舉實(shí)施例,對(duì)本專利技術(shù)進(jìn)行詳細(xì)描述。
    [0016]本專利技術(shù)提供了一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法,其核心思想是:根據(jù)Linux系統(tǒng)內(nèi)安卓兼容環(huán)境中輸出音頻的情況,確定當(dāng)前待本文檔來自技高網(wǎng)
    ...

    【技術(shù)保護(hù)點(diǎn)】

    【技術(shù)特征摘要】
    1.一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法,其特征在于,包括以下步驟:步驟1、安卓應(yīng)用需要輸出音頻時(shí),若當(dāng)前安卓兼容環(huán)境中不存在其他安卓應(yīng)用正在輸出音頻,則安卓應(yīng)用獲取音頻焦點(diǎn)執(zhí)行步驟2;否則執(zhí)行步驟6;步驟2、若安卓應(yīng)用采用MediaPlayer輸出音頻則執(zhí)行步驟3,若安卓應(yīng)用采用AudioTrack輸出音頻則執(zhí)行步驟4;步驟3、讀取待輸出音頻后,采用解碼器逐幀解碼待輸出音頻得到解碼音頻文件,再基于PulseAudio接口逐幀將解碼音頻文件輸出到Linux音頻設(shè)備,在安卓應(yīng)用完成音頻輸出后執(zhí)行步驟5;步驟4、讀取待輸出音頻獲取其輸出標(biāo)識(shí),根據(jù)輸出標(biāo)識(shí)輸出待輸出音頻,在安卓應(yīng)用完成音頻輸出后執(zhí)行步驟5;步驟5、安卓應(yīng)用釋放音頻焦點(diǎn),并檢測(cè)安卓兼容環(huán)境內(nèi)的暫停音頻流隊(duì)列,如果暫停音頻流隊(duì)列中存在被暫停的音頻流,則選取暫停音頻流隊(duì)列中最早暫停的音頻流繼續(xù)播放,結(jié)束本流程;如果沒有,則結(jié)束本流程;步驟6、安卓應(yīng)用請(qǐng)求獲取音頻焦點(diǎn),若安卓應(yīng)用未能獲取音頻焦點(diǎn),則等待設(shè)定時(shí)間間隔后執(zhí)行步驟6;若安卓應(yīng)用獲取了音頻焦點(diǎn),則暫停當(dāng)前音頻的輸出,并等待當(dāng)前音頻解碼完畢后,將當(dāng)前音頻作為暫停音頻流追加到安卓兼容環(huán)境的暫停音頻流隊(duì)列中,執(zhí)行步驟2。2.根據(jù)權(quán)利要求1所述的一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法,其特征在于,所述步驟3中基于解碼器逐幀解碼待輸出音頻得到解碼音頻文件,再基于PulseAudio接口逐幀將解碼音頻文件輸出到Linux音頻設(shè)備包括:將待輸出音頻讀入內(nèi)存緩沖區(qū);采用解碼單元從內(nèi)存緩沖區(qū)逐幀讀取待輸出音頻并解碼得到解碼音頻文件,將解碼音頻文件寫入解碼內(nèi)存緩沖區(qū)后;再使用輸出單元從解碼內(nèi)存緩沖區(qū)中讀取解碼音頻文件,并根據(jù)碼率確定輸出間隔,按照輸出間隔采用PulseAudio接口逐幀輸出到Linux音頻設(shè)備。3.根據(jù)權(quán)利要求2所述的一種Linux平臺(tái)上安卓應(yīng)用低延遲音頻輸出方法,其特征在于,所述解碼單元及輸出單元均為以Native函數(shù)...

    【專利技術(shù)屬性】
    技術(shù)研發(fā)人員:溫研
    申請(qǐng)(專利權(quán))人:北京麟卓信息科技有限公司
    類型:發(fā)明
    國(guó)別省市:

    網(wǎng)友詢問留言 已有0條評(píng)論
    • 還沒有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。

    1
    主站蜘蛛池模板: 亚洲av无码专区首页| 国产精品一级毛片无码视频| 亚洲日韩精品一区二区三区无码 | 久久久久亚洲av无码专区导航| 无码AV中文字幕久久专区| 亚洲成av人无码亚洲成av人| 亚洲日产无码中文字幕| 亚洲AⅤ无码一区二区三区在线| 无码国内精品人妻少妇| 国产精品无码一区二区在线观一 | 精品人妻无码专区中文字幕| 四虎成人精品无码| 夜夜添无码一区二区三区| 无码人妻精品一区二区蜜桃百度 | 无码人妻精品一二三区免费| 久久午夜无码免费| 亚洲人成无码久久电影网站| 亚洲AV成人无码网站| 精品无码成人片一区二区98| 亚洲AV永久无码精品成人| AV无码精品一区二区三区宅噜噜| 免费看国产成年无码AV片| 亚洲av无码一区二区三区四区 | 黄色成人网站免费无码av| 精品人妻无码区在线视频| 亚洲AV日韩AV高潮无码专区| 一本一道AV无码中文字幕| AV无码精品一区二区三区宅噜噜| 狠狠躁狠狠爱免费视频无码| 亚洲中文字幕无码爆乳av中文 | 无码一区二区波多野结衣播放搜索| 无码人妻少妇久久中文字幕蜜桃| 永久免费AV无码网站国产| 国产免费无码一区二区| 国产乱人伦Av在线无码| 午夜人性色福利无码视频在线观看 | 亚洲Av无码乱码在线znlu| 国产AV无码专区亚洲AV麻豆丫| 久久久无码精品午夜| 一区二区三区无码高清视频| 狠狠躁狠狠爱免费视频无码 |