Android系統(tǒng)WMA文件播放功能的設(shè)計(jì)與實(shí)現(xiàn)
WMA音頻解碼主要是在WMADecoder的read函數(shù)中完成的:首先,先會判斷是否是音樂定點(diǎn)播放,如果不是,WMADecoder會調(diào)用WMAExtrac-tor的read函數(shù)讀取一個(gè)未解碼的數(shù)據(jù)包;然后,對該數(shù)據(jù)進(jìn)行解碼,將解碼后的音頻數(shù)據(jù)存放在MediaBuffer的Data()中,再設(shè)置MediaBu-ffer的mRangeOffset和mRangeLength,在讀取數(shù)據(jù)包時(shí)會從包中獲取該數(shù)據(jù)包中的時(shí)間戳,把該時(shí)間戳存放在MediaBuffer的Meta_ data()中的kKeyTime里;最后,WMAdecoder把該MediaBuffer傳回給AudioPlayer。如果是音樂定點(diǎn)播放,首先,WMADecoder會從AudioPtayer傳過來的ReadOption中獲取播放時(shí)間(option->getSeekTo(seekTimeUs,mode)),在調(diào)用WMASource的read函數(shù)來讀取未解碼音頻數(shù)據(jù)時(shí)會把該時(shí)間(seekTimeUs)傳給WMASource。WMASource的read函數(shù)獲取到該時(shí)間后,通過計(jì)算得出該時(shí)間要播放的音頻數(shù)據(jù)包的起始位置,然后讀取該數(shù)據(jù)包并傳給WMADecoder對其進(jìn)行解碼,最后將該解碼后的音頻數(shù)據(jù)傳給AudioPlayer。
3 實(shí)驗(yàn)結(jié)果
基于Android平臺的多媒體系統(tǒng)進(jìn)行設(shè)計(jì)的WMA音頻播放,在Android多媒體框架的本地實(shí)現(xiàn)核心Stagefright框架里,添加WMA音頻格式。實(shí)現(xiàn)Android對WMA音頻格式的支持,使Android手機(jī)可以播放WMA音頻格式的文件。經(jīng)過實(shí)際測試,播放效果達(dá)到了預(yù)期的要求,聲音清晰、音質(zhì)好。圖4為增加WMA音頻播放模塊后Android源碼編譯結(jié)果的截圖。圖5為播放WMA格式文件時(shí)對播放界面的截圖。圖6為拉動滾動條后正常運(yùn)行的截圖。本文引用地址:http://butianyuan.cn/article/194616.htm
4 結(jié)束語
基于Android多媒體模塊中的Stagefright框架,在智能手機(jī)上實(shí)現(xiàn)了對WMA音頻格式的支持,使Android智能手機(jī)可以播放WMA音頻格式的媒體文件或流媒體。該設(shè)計(jì)在現(xiàn)有基礎(chǔ)上實(shí)現(xiàn)了對Android操作系統(tǒng)中多媒體系統(tǒng)功能的增強(qiáng)。目前Android平臺手機(jī)仍然不支持RMVB、WAV等視頻格式,所以Android多媒體系統(tǒng)的功能還需繼續(xù)增強(qiáng)和擴(kuò)展。
c++相關(guān)文章:c++教程
評論