欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android音頻開(kāi)發(fā)(5):音頻數(shù)據(jù)的編解碼-創(chuàng)新互聯(lián)

前面四篇文章分別介紹了音頻開(kāi)發(fā)必備的基礎(chǔ)知識(shí)、如何采集一幀音頻、如何播放一幀音頻、如何存儲(chǔ)和解析wav格式的文件,建議有興趣的小伙伴們先讀一讀,本文則重點(diǎn)關(guān)注如何對(duì)一幀音頻數(shù)據(jù)進(jìn)行編碼和解碼。

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)泗洪免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

1. Android 官方的 MediaCodec API

首先,我們了解一下 Android 官方提供的音頻編解碼的 API,即 MediaCodec 類(lèi),該 API 是在 Andorid 4.1 (API 16) 版本引入的,因此只能工作于 Android 4.1 以上的手機(jī)上。

1.1 MediaCodec 基本介紹

(1)提供了一套訪問(wèn) Android 底層多媒體模塊的接口,主要是音視頻的編解碼接口

(2)Android 底層多媒體模塊采用的是 OpenMax 框架,任何 Android 底層編解碼模塊的實(shí)現(xiàn),都必須遵循 OpenMax 標(biāo)準(zhǔn)。Google 官方默認(rèn)提供了一系列的軟件編×××:包括:OMX.google.h364.encoder,OMX.google.h364.encoder, OMX.google.aac.encoder, OMX.google.aac.decoder 等等,而硬件編解碼功能,則需要由芯片廠商依照 OpenMax 框架標(biāo)準(zhǔn)來(lái)完成,所以,一般采用不同芯片型號(hào)的手機(jī),硬件編解碼的實(shí)現(xiàn)和性能是不同的

(3)Android 應(yīng)用層統(tǒng)一由 MediaCodec API 來(lái)提供各種音視頻編解碼功能,由參數(shù)配置來(lái)決定采用何種編解碼算法、是否采用硬件編解碼加速等等

1.2 MediaCodec 核心原理

我不準(zhǔn)備詳細(xì)介紹 MediaCodec API 的每個(gè)函數(shù)是怎么用,示例代碼大家可以在后面給出的資源鏈接中查看和學(xué)習(xí)。

這里我準(zhǔn)備重點(diǎn)介紹一下 MediaCodec 的核心工作原理,因?yàn)橹挥懈闱宄诉@一點(diǎn),你才會(huì)明白為什么 MediaCodec API 提供的接口是這個(gè)樣子的。

MediaCodec 使用的基本流程是:

- createEncoderByType/createDecoderByType
- configure
- start
- while(1) {
    - dequeueInputBuffer
    - queueInputBuffer
    - dequeueOutputBuffer
    - releaseOutputBuffer
}
- stop
- release

由此可以看到,Buffer 隊(duì)列的操作是其最核心的部分之一,關(guān)于 MediaCodec 的 Buffer 隊(duì)列 ,示意圖如下:

Android音頻開(kāi)發(fā)(5):音頻數(shù)據(jù)的編解碼

MediaCodec 架構(gòu)上采用了2個(gè)緩沖區(qū)隊(duì)列,異步處理數(shù)據(jù),下面描述的 Client 和 MediaCodec 模塊是并行工作的(注:這里的 Client 就是指 “開(kāi)發(fā)者,API 的使用者”):

(1)Client 從 input 緩沖區(qū)隊(duì)列申請(qǐng) empty buffer [dequeueInputBuffer]

(2)Client 把需要編解碼的數(shù)據(jù)拷貝到 empty buffer,然后放入 input 緩沖區(qū)隊(duì)列 [queueInputBuffer]

(3)MediaCodec 模塊從 input 緩沖區(qū)隊(duì)列取一幀數(shù)據(jù)進(jìn)行編解碼處理

(4)編解碼處理結(jié)束后,MediaCodec 將原始數(shù)據(jù) buffer 置為 empty 后放回 input 緩沖區(qū)隊(duì)列,將編解碼后的數(shù)據(jù)放入到 output 緩沖區(qū)隊(duì)列

(5)Client 從 output 緩沖區(qū)隊(duì)列申請(qǐng)編解碼后的 buffer [dequeueOutputBuffer]

(6)Client 對(duì)編解碼后的 buffer 進(jìn)行渲染/播放

(7)渲染/播放完成后,Client 再將該 buffer 放回 output 緩沖區(qū)隊(duì)列 [releaseOutputBuffer]

MediaCodec 在架構(gòu)上,其實(shí)是采用了一種基于“環(huán)形緩沖區(qū)”的“生產(chǎn)者-消費(fèi)者”模式,它設(shè)計(jì)了 2 個(gè)基于 idx 序號(hào)的“環(huán)形緩沖區(qū)”,注意,是 2 個(gè),一個(gè)在 input 端, 一個(gè)在 output 端。

我曾經(jīng)在 Github 上分享過(guò)一段 Linux C 代碼,名叫:“rw_queue”,就是這種環(huán)形緩沖區(qū)的簡(jiǎn)化版,大家有興趣可以看看,地址:https://github.com/Jhuster/clib/tree/master/rw_queue

基于 idx 的環(huán)形緩沖區(qū)的總體示意圖如下,圖中,wp 代表 “寫(xiě)指針”,指向的是 “empty buffer”, 而 rp 代表 “讀指針”,指向的是 “filled buffer”:

Android音頻開(kāi)發(fā)(5):音頻數(shù)據(jù)的編解碼

“生產(chǎn)者”和“消費(fèi)者”其實(shí)是共用這一個(gè)緩沖區(qū)隊(duì)列,“生產(chǎn)者”負(fù)責(zé)從隊(duì)列中取出未使用的 Buffer,填入數(shù)據(jù),然后放回隊(duì)列,“消費(fèi)者”則負(fù)責(zé)取出填入數(shù)據(jù)后的 Buffer,進(jìn)行處理,處理結(jié)束后,再把 Buffer 標(biāo)記為“空”,退回到隊(duì)列中去以供“生產(chǎn)者”繼續(xù)填充數(shù)據(jù)。

在 input 端,“Client”是這個(gè)環(huán)形緩沖區(qū)“生產(chǎn)者”,“MediaoCodec 模塊”是“消費(fèi)者”。

在 output 端,“MediaoCodec 模塊”是這個(gè)環(huán)形緩沖區(qū)“生產(chǎn)者”,而“Client”則變成了“消費(fèi)者”。

這就是其核心的工作原理,其實(shí)并不復(fù)雜,大家靜下心來(lái),很快就能理解其中的奧妙。

1.3  參考資源

關(guān)于 MediaCodec 的示例代碼,網(wǎng)上其實(shí)也很多了,我就直接給出一些個(gè)人覺(jué)得不錯(cuò)的鏈接,有興趣的小伙伴們可以去研究一下。

(1)Android 官方文檔: 《MediaCodec》

(2)《Android MediaCodec stuff》

(3)《HWEncoderExperiments》

(4)一些開(kāi)源的播放器 Android 源碼,如 VLC、ijkplayer

2. 第三方音頻編解碼的庫(kù)

官方的 MediaCodec API 雖然支持硬件編解碼加速,但是問(wèn)題和局限還是很多的,一方面是只能在 Android 4.1 以上機(jī)型上才能使用,另一方面,由于 Android 手機(jī)種類(lèi)繁多,廠商對(duì)底層源碼的修改各不相同,導(dǎo)致 MediaCodec API 在實(shí)際使用中,會(huì)遇到很多坑,有很多兼容性的問(wèn)題,因此,我們也可以考慮采用第三方的編解碼庫(kù)。

這里,我簡(jiǎn)單推薦幾款第三方音頻編解碼庫(kù)(可以移植到 Android 平臺(tái)的),大家可以直接去官網(wǎng)或者項(xiàng)目主頁(yè)了解其詳細(xì)信息。

(1) opus 編解碼庫(kù)

很喜歡 opus,低碼率下 opus 完勝曾經(jīng)優(yōu)勢(shì)明顯的 HE AAC,我曾經(jīng)用它實(shí)現(xiàn)了一款 Android 局域網(wǎng)的VoIP網(wǎng)絡(luò)電話應(yīng)用:“飛鴿電話”,效果很不錯(cuò)。

opus 官網(wǎng)地址:https://www.opus-codec.org

注:如今 Android 5.0 已經(jīng)官方支持 opus 格式了,關(guān)于 Android 支持的多媒體格式列表可以查看 Android developer guide:《Supported Media Formats》

(2) Speex 編解碼庫(kù)

老牌的音頻處理庫(kù),不僅是編解碼,還提供了包括音頻去噪、回聲消除、靜音檢測(cè)等功能,官網(wǎng)地址:http://www.speex.org

(3) ffmpeg

大名鼎鼎的 ffmpeg 肯定不能錯(cuò)過(guò),官網(wǎng):https://www.ffmpeg.org

(4)Android AAC Encoder

一款輕量級(jí)的 Android aac 編碼庫(kù):https://github.com/timsu/android-aac-enc

(5)opencore-amr-android

從 opencore 抽取出來(lái)的 amr 編解碼庫(kù),地址:https://github.com/kevinho/opencore-amr-android

(6)iLBC-Android

iLBC 是著名的 WebRTC 項(xiàng)目的音頻編解碼模塊,iLBC-Android 是從中抽取 iLBC 模塊移植到 Android 平臺(tái)的個(gè)人項(xiàng)目,地址:https://github.com/lukeweber/iLBC-Android

關(guān)于第三方編解碼庫(kù)就簡(jiǎn)單介紹到這里了,最后三個(gè)是個(gè)人項(xiàng)目,我沒(méi)有使用過(guò),真心感謝這些作者的無(wú)私奉獻(xiàn),另外,更多的第三方庫(kù)歡迎大家留言或者來(lái)信補(bǔ)充。

3. 小結(jié)

關(guān)于如何在 Android 平臺(tái)編解碼音頻數(shù)據(jù)就簡(jiǎn)單介紹到這里了,文章中有不清楚的地方歡迎留言或者來(lái)信 lujun.hust@gmail.com 交流,或者關(guān)注我的新浪微博 @盧_俊 或者 微信公眾號(hào) @Jhuster 獲取最新的文章和資訊。

Android音頻開(kāi)發(fā)(5):音頻數(shù)據(jù)的編解碼

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:Android音頻開(kāi)發(fā)(5):音頻數(shù)據(jù)的編解碼-創(chuàng)新互聯(lián)
瀏覽路徑:http://aaarwkj.com/article28/dihcjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、關(guān)鍵詞優(yōu)化、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷(xiāo)、App開(kāi)發(fā)虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
日本国内一区二区三区四区视频| 免费黄片视频大全在线播放| 欧美黄色成人免费网站| 成人黄片在线免费播放| 国产超码片内射在线| 亚洲精品偷拍在线观看| 国产视频一区二区麻豆| 国产姐弟操大率悠荡笕| 精品国产欧美亚洲91| 亚洲乱码一区二区三区人妇| 国产原创av剧情愿望成真| 人妖系列中文字幕欧美系列| 国产成人大片中文字幕在线| 日本少妇人妻一区二区| 美女爽到高潮久久久| av岛国不卡一区二区在线观看| 国产在线精品不卡一区| 伊人蕉影院久亚洲高清| 免费人成视频在线观看不卡| 天天干夜夜操操操操| 日韩一级黄色片在线播放| 最近更新中文字幕不卡在线| 成人性生活黄色三级视频| 国产日韩欧美高清免费视频| 有码精品视频在线观看| 色桃子av一区二区三区| 欧美日韩黄色的三级视频| 国产91精品激烈高潮白浆| 就去吻色综合一二三四| 放荡精品少妇一区二区三区| 亚洲精品一区二区三区高清| 亚洲精品一级二级三级| 亚洲男女尻逼片视频网站| 欧美日韩亚洲人人夜夜澡| 18禁黄网站免费观看在线| 日韩一区精品视频一区二区| 亚洲成人爱情动作片在线观看| 日韩女同一区二区三区在线观看 | 美女午夜福利精品视频| 亚洲欧美日韩精品成人| 亚欧乱色熟女一区二区三区|