• 
    <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
    主站蜘蛛池模板: 少妇人妻无码精品视频| 无码精品国产VA在线观看| 无码人妻丰满熟妇区毛片| 亚洲日韩精品无码专区网站| 国产精品无码无在线观看| 人妻精品久久无码区| 国产精品免费无遮挡无码永久视频| 亚洲午夜无码久久久久软件| 亚洲av永久无码精品古装片| 无码 免费 国产在线观看91| 亚洲中文字幕久久无码| 无码少妇一区二区性色AV | 日韩丰满少妇无码内射| 亚洲AV无码男人的天堂| 日韩爆乳一区二区无码| 国产精品亚洲а∨无码播放| 黑人无码精品又粗又大又长 | 97人妻无码一区二区精品免费| 国产羞羞的视频在线观看 国产一级无码视频在线 | 国产亚洲精久久久久久无码| 亚洲av麻豆aⅴ无码电影| 亚洲人成人无码.www石榴| 日韩国产精品无码一区二区三区 | 无码中文人妻视频2019| 国产亚洲情侣一区二区无码AV | 亚洲AV无码男人的天堂| 孕妇特级毛片WW无码内射 | 久久精品无码专区免费青青| 亚洲精品无码久久一线| 永久免费av无码入口国语片| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 日韩亚洲AV无码一区二区不卡| 国产亚洲?V无码?V男人的天堂 | 国产亚洲精久久久久久无码AV| 久久久久亚洲AV无码专区桃色| 五十路熟妇高熟无码视频| 亚洲av无码不卡私人影院| 黄桃AV无码免费一区二区三区| 国产成人无码一区二区在线观看| 亚洲中文字幕无码久久2017| 亚洲∧v久久久无码精品|