完整音頻播放器,后期持續(xù)更新

目錄介紹

  • 0.關(guān)于項目介紹
  • 0.1 本案例關(guān)聯(lián)博客[共14篇沙郭,系統(tǒng)性介紹佛呻,全面展開]
  • 0.2 本案例其他說明
  • 0.3 全面系統(tǒng)化學(xué)習(xí)音視頻播放器
  • 1.關(guān)于音頻播放器基本功能
  • 1.1 基本實現(xiàn)的功能
  • 1.2 音頻的緩存,下載病线,播放權(quán)限等功能
  • 1.3 音頻后臺播放功能
    • 1.3.1 音頻播放可以支持后臺播放
    • 1.3.2 Android系統(tǒng)有自動回收內(nèi)存機制
  • 1.4 需要注意的問題
    • 1.4.1 一般播放音頻APP具有的功能
    • 1.4.2 注意的問題有哪些呢吓著?[共11條,持續(xù)找問題中]
  • 1.5 待實現(xiàn)功能
  • 2.關(guān)于音頻播放器高級功能
  • 2.1 能夠自由掃描本地音頻[掌握]
    • 2.1.1 在activity中掃描還是在service掃描
    • 2.1.2 掃描音樂的邏輯
  • 2.2 鎖屏聯(lián)動媒體播放器[重點]
    • 2.2.1 什么是鎖屏聯(lián)動媒體播放器
    • 2.2.2 如何實現(xiàn)送挑,邏輯思路
    • 2.2.3 注意要點分析
  • 2.3 捕獲/丟棄音樂焦點處理[重點]
    • 2.3.1 發(fā)現(xiàn)有趣的焦點問題
    • 2.3.2 為什么要處理音頻焦點問題
    • 2.3.3 具體的代碼邏輯
    • 2.3.4 當(dāng)焦點變化時绑莺,我的處理邏輯
  • 2.4 耳機拔出時暫停播放[理解]
    • 2.4.1 拔出耳機自動暫停 , 插入耳機自動恢復(fù)播放
    • 2.4.2 實現(xiàn)的原理分析
    • 2.4.3 藍(lán)牙耳機又是如何實現(xiàn)[求賜教]
  • 2.5 耳機線控,耳機控制聲音[理解]
    • 2.5.1 耳機按鍵也可以控制音量調(diào)節(jié)
    • 2.5.2 5.0之前和5.0之后比較
    • 2.5.3 實現(xiàn)的邏輯分析
  • 2.6 滑動通知欄可以關(guān)閉程序[掌握]
  • 2.7 外放,耳機,聽筒之間的切換[掌握]
  • 3.關(guān)于項目架構(gòu)的技術(shù)堆棧
  • 3.1 該項目App整體架構(gòu)
  • 3.2 主要的技術(shù)要點
  • 3.3 日志打印,選擇數(shù)據(jù)庫
  • 3.4 主要的開源框架介紹
  • 3.5 項目代碼規(guī)范,UI說明
  • 3.6 技術(shù)難點
  • 4.關(guān)于音頻編碼解碼
  • 4.0 認(rèn)識音頻基礎(chǔ)屬性
  • 4.1 音頻編碼
  • 4.2 音頻解碼
  • 5.關(guān)于音頻其他知識點
  • 5.1 如何給音頻加密
  • 5.2 Android提供3套音頻播放的API坡脐,如何選擇
  • 5.3 如何設(shè)置音視頻播放速率
  • 5.4 關(guān)于通知欄控制音頻播放邏輯處理
  • 6.參考案例和博客鏈接
  • 6.1 參考的項目
  • 6.2 參考的博客
  • 6.3 參考的市面上App
  • 7.關(guān)于此項目更新日志
  • 8.關(guān)于其他介紹

好消息

  • 博客筆記大匯總【16年3月到至今】,包括Java基礎(chǔ)及深入知識點欺缘,Android技術(shù)博客,Python學(xué)習(xí)筆記等等挤安,還包括平時開發(fā)中遇到的bug匯總谚殊,當(dāng)然也在工作之余收集了大量的面試題,長期更新維護并且修正蛤铜,持續(xù)完善……開源的文件是markdown格式的嫩絮!同時也開源了生活博客丛肢,從12年起,積累共計47篇[近20萬字]絮记,轉(zhuǎn)載請注明出處,謝謝虐先!
  • 鏈接地址:https://github.com/yangchong211/YCBlogs
  • 如果覺得好怨愤,可以star一下,謝謝蛹批!當(dāng)然也歡迎提出建議撰洗,萬事起于忽微,量變引起質(zhì)變腐芍!

0.關(guān)于項目介紹

0.1 本案例關(guān)聯(lián)博客[共13篇]

1.關(guān)于音頻基礎(chǔ)博客

0.2 本案例其他說明

  • 持續(xù)更新中,看了網(wǎng)上許多博客泣刹,許多寫的很好助析,但是沒有對應(yīng)的案例感覺有時難以下手。于是拿來主義椅您,一邊寫案例外冀,一邊寫筆記,也算是相結(jié)合吧掀泳⊙┧恚可能會存在一些問題,歡迎指出员舵,謝謝脑沿!
  • 該項目對應(yīng)的地址鏈接:https://github.com/yangchong211/YCAudioPlayer
  • 直接看該案例中音樂模塊,其他部分還沒有完善马僻,音頻播放這塊大都完成捅伤。
  • 感謝大神前輩們的開源項目,尤其是remusic巫玻,StylishMusicPlayer丛忆,Music-Player,ListenerMusicPlayer仍秤,PonyMusic等案例熄诡。
  • 對于remusic等項目,大神之作诗力,但是代碼文檔少凰浮,注釋少我抠,要向入門感覺有些困難。但是對于我這個播放器袜茧,注釋詳細(xì)菜拓,還有配套文檔博客,方便初期看笛厦,要向更上一層樓纳鼎,還是看大神之作。結(jié)合實際情況閱讀代碼很重要I淹埂<伞!
  • 如果可以姨谷,歡迎star6耗!

0.3 全面系統(tǒng)化學(xué)習(xí)音視頻播放器

1.全面介紹的好處

  • 0.3.1 構(gòu)建自己的知識框架
  • 0.3.2 案例與博客相互結(jié)合梦湘,以解決問題為目的地學(xué)習(xí)或者閱讀更加有利于提高自己的實戰(zhàn)技能

1.關(guān)于音頻播放器基本功能

1.1 基本實現(xiàn)的功能

A基礎(chǔ)功能

  • 1.1.1 基礎(chǔ)的音頻播放功能有:播放瞎颗,暫停,下一首捌议,上一首
  • 1.1.2 播放監(jiān)聽言缤,播放完了自動下一首;滑動監(jiān)聽禁灼,拖動SeekBar可以控制播放進度管挟,進度條顯示播放進度功能
  • 1.1.3 設(shè)置音量控制監(jiān)聽,手機上音量滑動監(jiān)聽弄捕,手機按鍵控制音量僻孝,還有耳機控制音量。注意要同步守谓!
  • 1.1.4 播放類型:順序循環(huán)播放穿铆,隨機循環(huán)播放,單曲循環(huán)播放等等
  • 1.1.5 播放進度快慢設(shè)置:參考混沌大學(xué)斋荞,播放速度可以設(shè)置為1.0x,1.5x,2.0x
  • 1.1.6 播放快進快退荞雏,參考混沌大學(xué),間隔時間是15秒
  • 1.1.7 可通過媒體按鈕和 Notification 通知欄來控制媒體播放
  • 1.1.8 停止播放后平酿,可通過滑動移除 Notification 來關(guān)閉應(yīng)用凤优,這個是參考喜馬拉雅APP,因為平時玩的比較多蜈彼,所以個人感覺這個功能還是不錯的筑辨。我的喜馬拉雅:http://www.ximalaya.com/71989305/profile/

1.2 音頻的緩存,下載幸逆,播放權(quán)限等功能

B其他功能

  • 1.2.1 音頻可以邊播放變緩存
  • 1.2.2 支持下載到本地棍辕,如果有付費音頻暮现,還需要轉(zhuǎn)碼加密
  • 1.2.3 支持設(shè)置播放權(quán)限

1.3 音頻后臺播放功能

C其他功能

  • 1.3.1 音頻播放可以支持后臺播放
  • 當(dāng)切換到后臺時,顯示通知欄楚昭,可以通過通知欄來控制上一首栖袋,下一首,播放暫停功能抚太,主要需要保證播放進度和音頻屬性數(shù)據(jù)信息同步
  • 1.3.2 Android系統(tǒng)有自動回收內(nèi)存機制
  • 如果系統(tǒng)內(nèi)存緊張塘幅,就會觸發(fā)該機制,應(yīng)用就有可能被回收凭舶,不過Android提供了前臺機制晌块,比如當(dāng)音頻播放器切換到后臺時爱沟,這個時候可以通過通知欄中按鈕帅霜,點擊切換音樂,那么當(dāng)播放時啟動前臺機制呼伸,而暫停時取消前臺機制身冀。保證內(nèi)存不足時也不會回收該應(yīng)用

1.4 需要注意的問題

D注意問題

  • 1.4.1 一般播放音頻APP具有的功能:
  • 播放括享、暫停搂根、切換歌曲、進度調(diào)節(jié)铃辖、切換播放模式剩愧、專輯封面顯示、音頻列表娇斩、音頻管理仁卷,添加收藏,下載等功能犬第。(由于國產(chǎn)手機大多都是修改過的Android系統(tǒng)锦积,因此系統(tǒng)自帶播放器功能也不一樣,這里以Android原生播放器為參考歉嗓,同時結(jié)合了喜馬拉雅丰介,混沌大學(xué),得到等音頻付費APP)
  • 1.4.2 注意的問題有哪些呢鉴分?
  • a.如手機來電時哮幢,音頻需要自動暫停播放
  • b.耳機拔出時,同樣需要暫停
  • c.Android有些手機耳機有音控鍵志珍,有些沒有家浇,但還是要支持耳機線控
  • d.當(dāng)在播放音頻的時候,又去打開別的視頻軟件碴裙,這個時候音頻聲音會變小钢悲,有的是暫停点额。等到關(guān)閉其他音視頻軟件時,點擊播放莺琳,聲音如何調(diào)整
  • e.對于付費的音頻还棱,如何加密播放了?兩種情況:1惭等,如果沒有下載則可以通過返回接口字段控制權(quán)限珍手;2.如果下載了,那么如何才能實現(xiàn)只有自己的播放器才能播放音頻辞做,而其他的不能呢琳要?
  • f.參考了混沌大學(xué),對于音頻列表秤茅,有的顯示是下載完成稚补,有的是未下載,有的是下載中框喳,要區(qū)分好狀態(tài)课幕。
  • g.參考了喜馬拉雅,不管是否有網(wǎng)絡(luò)五垮,都可以直接掃描本地喜馬拉雅音頻文件乍惊。那么對于音頻,有十幾種格式放仗,如何區(qū)別咱們APP音頻與其他音頻润绎。
  • h.我看到比如喜馬拉雅下載的音頻中還有排序的功能,比如根據(jù)文件大小诞挨,或者根據(jù)文件名首字母排序莉撇。該如何實現(xiàn)呢?
  • 還在探索中
  • 詳細(xì)更多內(nèi)容可以看我的筆記:關(guān)于博客筆記大匯總

1.5 待實現(xiàn)功能

  • 1.5.1 在應(yīng)用被銷毀后亭姥,可以通過耳機線控來重新啟動
  • 1.5.2 如何自定義均衡器配置稼钩,部分有該功能,可參考喜馬拉雅
  • 1.5.3 參考混沌大學(xué)达罗,將視頻內(nèi)容分離成視頻和音頻兩個部分坝撑,當(dāng)播放音頻時可以切換成播放視頻,當(dāng)播放視頻時可以切換成音頻粮揉,還能夠記錄播放位置巡李。這個如何實現(xiàn)了?思考扶认?侨拦??歡迎同行給出建議辐宾,注意接口返回的音頻和視頻是不同的接口狱从,只是內(nèi)容一樣而已膨蛮。
  • 1.5.4 外放,耳機,聽筒之間的切換。關(guān)于這塊內(nèi)容可以直接看本篇博客:

2.關(guān)于音頻播放器高級功能

2.1 能夠自由掃描本地音頻

  • 2.1.1在activity中掃描還是在service掃描
  • 寫音頻案例之前季研,我也參考了部分小的音頻播放器案例敞葛,我發(fā)現(xiàn)有些直接寫在activity中,當(dāng)然這個最后結(jié)果是也能正常展示掃描的音頻与涡。如果音頻少惹谐,那么沒什么影響;如果音頻多驼卖,幾百首氨肌,那么activity中直接處理有點不妥當(dāng)了,會卡頓酌畜。所以我最后還是想在service中處理掃描邏輯
  • 2.1.2 掃描音樂的邏輯
  • 一般音頻APP中會有我的下載或緩沖頁面怎囚,那么掃描本地音頻。而掃描一般通過ContentProvider配合Media相關(guān)類查詢系統(tǒng)數(shù)據(jù)庫檩奠,獲得媒體庫中的歌曲信息桩了。
  • 通過閱讀掃描音樂代碼可知附帽,是在服務(wù)中掃描音樂埠戳。但是有個問題,如果是又下載了新的音頻蕉扮,怎樣才能做到及時更新呢整胃?還是直接重新掃描?
  • 這個可以直接參考我的案例代碼:util包--musicUtils--FileScanManager中的代碼
  • 關(guān)于掃描本地音樂的邏輯喳钟,可以看這篇博客:如何掃描本地音頻或者視頻

2.2 聯(lián)動系統(tǒng)媒體播放器

  • 2.2.1 什么是鎖屏聯(lián)動媒體播放器
  • 播放器除了播放了音樂之外什么都沒做屁使,就可以分別在任務(wù)管理、鎖屏奔则、負(fù)一屏控制播放器蛮寂。
  • 也可以這樣通俗的解釋,這個舉例子說一個應(yīng)用場景易茬,我使用混沌大學(xué)聽音頻酬蹋,然后我關(guān)閉了屏幕(屏幕滅了),當(dāng)我再次打開的時候抽莱,屏幕的鎖屏頁面或者頂層頁面便會出現(xiàn)一層音頻播放器控制的頁面范抓,那么即使我不用解鎖屏幕,也照樣可以控制音頻播放器的基本播放操作食铐。如果你細(xì)心觀察一下匕垫,也會發(fā)現(xiàn)有些APP正式這樣操作的。目前我發(fā)現(xiàn)QQ音樂虐呻,混沌大學(xué)等是這樣的
  • 2.2.2 如何實現(xiàn)象泵,邏輯思路
  • 第一步:在服務(wù)中注冊屏幕熄滅廣播
  • 第二步:處理邏輯寞秃,發(fā)現(xiàn)屏幕熄滅就開啟鎖屏頁面,再次點亮屏幕時就可以看到鎖屏頁面
  • 第三步:點擊鎖屏頁面上的按鈕偶惠,比如上一首蜕该,下一首,播放暫椭摒可以與主程序同步信息堂淡。
  • 第四步:滑動鎖屏頁面,鎖屏頁面被銷毀扒腕,進入程序主界面绢淀。

2.3 捕獲/丟棄音頻焦點處理

  • 2.3.1 這個問題細(xì)心點就會發(fā)現(xiàn),很有趣瘾腰。
  • 如果手機上安裝了兩個音頻播放器皆的,當(dāng)一個正在播放的時候,打開第二個播放歌曲蹋盆,有沒有發(fā)現(xiàn)第一個自動暫停了……
  • 如果你在聽音頻的同時费薄,又去打開了其它視頻APP,你會發(fā)現(xiàn)音頻APP暫停播放了……
  • 如果你正在聽音頻或者看視頻時栖雾,來電話了楞抡,那么音視頻便會暫停。掛了電話后音樂又繼續(xù)播放析藕,視頻則需要點擊按鈕播放召廷,是不是很奇怪
  • 當(dāng)你收到消息,比如微信消息账胧,并且有消息聲音的時候竞慢,那么聽音頻的那一瞬間,音頻的聲音會變小了治泥,然后過會兒又恢復(fù)了筹煮。是不是很有意思。
  • 別蒙圈居夹,這個就叫做音頻捕獲和丟棄焦點败潦。
  • 至于如何處理,可以看我的源碼案例: https://github.com/yangchong211/YCAudioPlayer
  • 還可以看我的博客吮播,瀟湘劍雨变屁,博客大匯總: http://www.reibang.com/p/53017c3fc75d
  • 2.3.2 為什么要處理音頻焦點問題
  • 如果不處理捕獲與丟棄音頻焦點的話,那么同時開幾個音視頻播放器意狠,就會出現(xiàn)多個聲音粟关。那樣會很嘈雜,一般線上的APP都會做這個處理,不過一些GitHub案例demo中一般沒處理闷板。
  • 2.3.3 具體的代碼邏輯可以直接參考代碼案例
  • 簡單來說澎灸,就是這三步邏輯方法
  • 2.3.3.1 在service的oncreate方法中調(diào)用初始化方法
  • 2.3.3.2 在播放音頻的時候開始請求捕獲音頻焦點
  • 2.3.3.3 在音頻銷毀的時候開始丟棄音頻焦點
  • 2.3.4 當(dāng)焦點變化時,我的處理邏輯
  • 2.3.4.1 當(dāng)重新獲得焦點的時候遮晚,如果通話結(jié)束性昭,恢復(fù)播放;獲取音量并且恢復(fù)音量县遣。這個情景應(yīng)該經(jīng)常遇到糜颠。
  • 2.3.4.2 當(dāng)永久丟失焦點,比如同時打開播放器萧求,則停止或者暫停播放其兴,否則出現(xiàn)兩個聲音
  • 2.3.4.3 當(dāng)短暫丟失焦點,比如比如來了電話或者微信視頻音頻聊天等等夸政,則暫驮或者停止播放
  • 2.3.4.4 當(dāng)瞬間丟失焦點,比如手機來了通知守问。前提是你的通知是震動或者聲音時匀归,會短暫地將音量減小一半。當(dāng)然你也可以減小三分之一耗帕,哈哈穆端!

2.4 耳機拔出時暫停播放

  • 2.4.1 拔出耳機自動暫停 , 插入耳機自動恢復(fù)播放
  • 在使用音頻APP時,細(xì)心的你有沒有發(fā)現(xiàn)兴垦,拔出耳機徙赢,暫停播放了字柠;插上耳機又恢復(fù)播放了探越。是不是很神奇……
  • 如何實現(xiàn)這個功能了,這個我也是通過百度才知道了窑业,但是代碼還是不太懂钦幔,IntentFilter作用?后來明白常柄,其實不用深入底層原理也沒有多大關(guān)系……
  • 2.4.2 實現(xiàn)的原理分析
  • 其原理還是通過發(fā)廣播接收者控制播放與暫停功能鲤氢。首先創(chuàng)建一個廣播接收者,然后在播放時注冊西潘,在暫停時取消卷玉,就可以實現(xiàn)這個功能。
  • 具體的邏輯可以直接參考代碼……其實這個也是百度查的喷市!

2.5 耳機線控相种,耳機控制聲音

  • 2.5.1 耳機按鍵也可以控制音量調(diào)節(jié)
  • 不得不說Android手機需要考慮不同情況,就拿耳機來說品姓,有的有音控寝并,有的沒有音控箫措,有的手機支持,有的手機不支持衬潦,雖然說不太重要斤蔓,但還是可以思考一下。目前參考大量的案例镀岛,只能解決大部分的正诚夷担控制聲音功能。
  • 剛開始看到這個真是蒙圈了漂羊,不過有Google喇伯,不擔(dān)心。對于程序員來說沒有實現(xiàn)不了的功能拨与,只有自己的技術(shù)過不過關(guān)稻据,哈哈,同事說的……找到了答案
  • 2.5.2 5.0之前和5.0之后比較
  • 對于5.0以上系統(tǒng)的手機买喧,激活了MediaSession捻悯,就可以不用關(guān)心耳機聲控了,會自己實現(xiàn)淤毛。
  • 對于5.0以前系統(tǒng)的手機今缚,還是需要自己手動設(shè)置相關(guān)屬性的,需要自己手動實現(xiàn)
  • 2.5.3 實現(xiàn)的邏輯分析
  • 這里暫且只是討論5.0以前的處理方法低淡,需要自己監(jiān)聽耳機按鍵
  • 通過代碼KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);獲取到KeyEvent的對象姓言,然后獲取對應(yīng)點擊事件的code,然后再做播放暫停蔗蹋,上一首何荚,下一首處理。具體代碼可以參考EarphoneControlReceiver類

2.7 外放,耳機,聽筒之間的切換[掌握]

3.關(guān)于項目架構(gòu)的技術(shù)堆棧

3.1 該項目App介紹

  • 3.1.1 bug管理
  • 可以使用騰訊免費的bugly管理平臺餐塘,便于跟蹤處理bug,有數(shù)據(jù)分析
  • 3.1.2 測試部分
  • 自己測試皂吮,一般來說自己不容易發(fā)現(xiàn)自己的問題戒傻,哪怕有些問題指出來后很簡單。就像以前讀書考試蜂筹,自己檢查試卷需纳,也沒檢查出什么問題,但就是錯了許多……
  • 基本的monkey測試艺挪,可以測試app在快速點擊下崩潰問題
  • 運用平臺測試不翩,基于經(jīng)費,還是選擇免費的平臺,一般應(yīng)用市場也會有測試分析慌盯,比如華為測試周霉,騰訊測試就很不錯。

3.2 主要的技術(shù)要點

  • 3.2.1 音頻播放的基礎(chǔ)功能亚皂,播放暫停俱箱,上一首下一首,快進快退灭必,播放狀態(tài)切換狞谱,音量調(diào)節(jié)等等。
  • 3.2.2 音頻播放前后臺切換時禁漓,避免內(nèi)存不足而回收資源問題
  • 3.2.3 支持音頻下載跟衅,收藏,刪除播歼,緩存等功能伶跷。后期添加。
  • 3.2.4 支持耳機線控播放秘狞,耳機拔出自動暫停叭莫,支持耳機按鈕控制音頻播放音量
  • 3.2.5 支持播放詳情頁面,Notification通知烁试,還有底部播放控制部分音頻數(shù)據(jù)同步雇初。本項目中采用是接口監(jiān)聽實現(xiàn)activity,fragment减响,service之間的通信
  • 3.2.6 支持添加類似酷狗音樂那種的鎖屏頁面
  • 3.2.7 支持來電或者拔出耳機時暫停播放的邏輯

3.3 日志打印靖诗,選擇數(shù)據(jù)庫

  • 3.3.1 日志打印,對于線上項目要規(guī)范支示,分為測試和正式打包日志刊橘。上線后要關(guān)掉部分打印日志
  • 3.3.2 關(guān)于數(shù)據(jù)庫存儲,這個看具體情況悼院,使用原生SQLite或者Realm數(shù)據(jù)庫
  • 3.3.3 由于之前開發(fā)都是使用Realm數(shù)據(jù)庫伤为,所以暫且使用它吧

3.4 主要的開源框架介紹

  • 注明:對于開源框架的選擇,能夠滿足自己需求下据途,選擇體量小的,并且相對成熟的的開源庫
  • 3.4.1 網(wǎng)絡(luò)請求框架
  • 3.4.2 gson解析框架
  • 3.4.3 H5網(wǎng)頁可以用騰訊X5瀏覽器框架
  • 3.4.4 圖片加載框架叙甸,谷歌glide颖医,或者square/picasso
  • 3.4.5 音視頻播放器底層框架ijkplayer
  • 3.4.6 下載框架FileDownloader
  • 3.4.7 自定義開源庫:參考自己的GitHub項目
  • 3.5.8 自定義支持上拉加載更多,下拉刷新裆蒸,可以自定義頭部和底部熔萧,可以添加多個headAdapter,使用一個原生recyclerView就可以搞定復(fù)雜界面。地址:https://github.com/yangchong211/YCRefreshView
  • 3.5.9 其他庫可以直接看GitHub

3.5 項目代碼規(guī)范佛致,UI說明

  • 3.5.1 項目的包名規(guī)范贮缕,分包說明,都要有文檔
  • 3.5.2 關(guān)于注釋俺榆,類注釋感昼,方法注釋,還有常量注釋可以參考阿里出版的java規(guī)范文檔罐脊,通過插件可以自動檢測注釋規(guī)范定嗓。要求有輸出文檔∑甲溃可以參考第三方sdk文檔規(guī)范宵溅,清晰,簡單而又能夠讓人快速看懂
  • 3.5.3 類名上炎,方法名恃逻,常量或者變量等名稱,還有布局文件xml中的各種空間id藕施,都要采用統(tǒng)一的命名方式辛块。要求見者知意……
  • 3.5.4 關(guān)于color顏色,string字符串铅碍,需要統(tǒng)一規(guī)范
  • 3.5.5 添加了捕獲/丟棄音頻焦點處理邏輯润绵,可以監(jiān)聽兩個以上音頻播放時,暫停與播放邏輯
  • 3.5.6 關(guān)于代碼規(guī)范胞谈,可以看這篇博客:Android編碼規(guī)范
  • 3.5.7 或者直接看阿里出的java手冊也行……寫代碼尘盼,不僅方便自己看懂,也要讓別人看懂烦绳!

3.6 技術(shù)難點

  • 當(dāng)屏幕從滅了到亮了卿捎,會出現(xiàn)鎖屏頁面,那么鎖屏頁面如何做到和播放器其他音樂信息同步径密?
  • 耳機聲控午阵,以及搶占焦點處理邏輯
  • 進度條沒有正確監(jiān)聽,滑動到某一位置享扔,歌曲會從頭播放
  • 通知欄底桂,音頻播放詳情頁,主頁面底部音頻控制欄惧眠,還有鎖屏頁面音頻信息同步籽懦。保持進度同步。
  • 項目中氛魁,視頻播放和音頻播放來回切換暮顺,不同步厅篓。
  • 其他待整理。

4.關(guān)于音頻編碼解碼

  • 4.0 認(rèn)識音頻基礎(chǔ)屬性
  • 采樣頻率(Sample Rate):每秒采集聲音的數(shù)量捶码,它用赫茲(Hz)來表示羽氮。(采樣率越高越靠近原聲音的波形)
  • 采樣精度(Bit Depth):指記錄聲音的動態(tài)范圍,它以位(Bit)為單位惫恼。(聲音的幅度差)
  • 聲音通道(Channel):聲道數(shù)档押。比如左聲道右聲道。
  • 4.1 音頻編碼與解碼
  • 可以直接看這篇博客:音視頻編碼解碼深入分析總結(jié)

5.關(guān)于音頻其他知識點

5.1 如何給音頻加密解密

  • 還在探索中
  • 業(yè)務(wù)場景分析:當(dāng)用戶下載了我們的視頻尤筐,或者音頻汇荐,那么在下載完成后需要對下載的文件進行加密。以避免使用其它播放器軟件直接可以觀看或者聽下載的音視頻……
  • 僅僅改變音視頻的格式盆繁,或者不用后綴名的辦法不可取掀淘。目前從咱們APP下載的視頻,雖然沒有后綴名油昂,但是使用同類型的視頻播放器照樣可以打開革娄。

5.2 Android提供3套音頻播放的API,如何選擇

  • Android提供3套音頻播放的API冕碟,分別是:MediaPlayer拦惋,SoundPool,AudioTrack
  • MediaPlayer 更加適合在后臺長時間播放本地音樂文件或者在線的流式資源;
  • SoundPool 則適合播放比較短的音頻片段安寺,比如游戲聲音厕妖、按鍵聲、鈴聲片段等等挑庶,并且文件的大小限制在1M左右言秸,可支持多個文件同時播放。SoundPool提供了pause和stop方法迎捺,但這些方法建議最好不要輕易使用举畸,因為有些時候它們可能會使你的程序莫名其妙的終止。調(diào)用pause并不會立即停止凳枝,而是把緩沖區(qū)里的數(shù)據(jù)播放完才會停下來抄沮,也許會多播放一秒鐘。
  • AudioTrack 則更接近底層岖瑰,提供了非常強大的控制能力叛买,支持低延遲播放,適合流媒體和VoIP語音電話等場景锭环。
  • 所以MediaPlayer是更加適合于第三方的播放器的聪全,但是如果某些播放器用的并不是MediaPlayer那我也沒有辦法了,不在考慮的范圍內(nèi)辅辩。而本項目也是使用MediaPlayer的……

5.4 關(guān)于通知欄控制音頻播放邏輯處理

  • 我們可以發(fā)現(xiàn)許多音頻類的APP都會有通知欄控制播放邏輯這個功能难礼,那么本案例也有該功能。具體可以看代碼玫锋!
  • 關(guān)于這塊更詳細(xì)的內(nèi)容蛾茉,可以直接看這篇博客: Notification通知控制播放

6.參考案例和博客鏈接

6.1 參考的項目

6.2 參考的博客

6.3 參考的市面上App

  • 喜馬拉雅,得到甫贯,QQ音樂吼鳞,混沌大學(xué),等等叫搁。這些都是十分牛的項目赔桌,當(dāng)然許多功能都在模仿與不斷修正中
  • 關(guān)于主要頁面的示意圖
  • image

    image

    image

    image

7.關(guān)于此項目更新日志

  • 7.1 v1.0.0 更新于2017年11月5日
  • 7.2 v1.1.0 更新于2018年1月29日
  • 7.3 v1.1.1 更新于2018年1月30日
  • 7.4 v1.2.0 更新于2018年3月5日

8.關(guān)于其他介紹

8.1 個人博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渴逻,隨后出現(xiàn)的幾起案子疾党,更是在濱河造成了極大的恐慌,老刑警劉巖惨奕,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雪位,死亡現(xiàn)場離奇詭異,居然都是意外死亡梨撞,警方通過查閱死者的電腦和手機雹洗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聋袋,“玉大人队伟,你說我怎么就攤上這事∮睦眨” “怎么了嗜侮?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長啥容。 經(jīng)常有香客問我锈颗,道長,這世上最難降的妖魔是什么咪惠? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任击吱,我火速辦了婚禮,結(jié)果婚禮上遥昧,老公的妹妹穿的比我還像新娘覆醇。我一直安慰自己朵纷,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布永脓。 她就那樣靜靜地躺著袍辞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪常摧。 梳的紋絲不亂的頭發(fā)上搅吁,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音落午,去河邊找鬼谎懦。 笑死,一個胖子當(dāng)著我的面吹牛溃斋,可吹牛的內(nèi)容都是我干的界拦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盐类,長吁一口氣:“原來是場噩夢啊……” “哼寞奸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起在跳,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤枪萄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后猫妙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓷翻,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年割坠,在試婚紗的時候發(fā)現(xiàn)自己被綠了齐帚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡彼哼,死狀恐怖对妄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情敢朱,我是刑警寧澤剪菱,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站拴签,受9級特大地震影響孝常,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚓哩,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一构灸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岸梨,春花似錦喜颁、人聲如沸稠氮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽括袒。三九已至次兆,卻和暖如春稿茉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芥炭。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工漓库, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人园蝠。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓渺蒿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彪薛。 傳聞我的和親對象是個殘疾皇子茂装,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354