目錄介紹
- 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.0.1 如何掃描本地音頻或者視頻
- 0.0.2 深入學(xué)習(xí)酷狗差导,混沌大學(xué)那種鎖屏頁面原理
- 0.0.3 為什么要捕獲/丟棄音頻焦點詳細(xì)講解
- 0.0.4 耳機聲控,以及耳機拔出或者插入控制播放暫停
- 0.0.5 音視頻編碼解碼深入分析總結(jié)
- 0.0.6 實現(xiàn)音視頻1.5倍猪勇,2倍播放速率
- 0.0.7 音頻的加密與解密案例實踐深入總結(jié)
- 0.0.8 音頻基礎(chǔ)知識和概念的介紹
- 0.0.9 [音視頻混合案例介紹]后期更新
- 0.1.0 如何構(gòu)建知識圖譜设褐,重點
- 0.1.1 完整視頻播放器案例總結(jié)與分析
- 0.1.2 關(guān)于博客筆記大匯總
- 0.1.3 Android編碼規(guī)范
- 0.1.4 Notification通知控制播放
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 參考的項目
- 注意:如果是帶著問題去看項目,去直接瞄準(zhǔn)某個功能撩鹿,感覺學(xué)習(xí)效率更高一些谦炬。先實現(xiàn)功能,后再思考原理或技巧节沦。
- https://github.com/ocwvar/DarkPurple
- https://github.com/andremion/Music-Player
- https://github.com/googlesamples/android-UniversalMusicPlayer
- https://github.com/DuanJiaNing/Musicoco
- https://github.com/ryanhoo/StylishMusicPlayer
- https://github.com/hefuyicoder/ListenerMusicPlayer
- https://github.com/cpacm/MoeMusic
6.2 參考的博客
- 博客鏈接如下所示:
- FFmpeg的庫函數(shù)源代碼分析文章列表:http://blog.csdn.net/leixiaohua1020/article/details/12677129
- 多媒體編解碼基礎(chǔ)知識:http://zzqhost.github.io/hostwiki/%E5%A4%9A%E5%AA%92%E4%BD%93%E7%9B%B8%E5%85%B3_%E5%A4%9A%E5%AA%92%E4%BD%93%E7%BC%96%E8%A7%A3%E7%A0%81%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.html#toc_1.1.2
- Android 注冊媒體按鍵監(jiān)聽:http://www.reibang.com/p/b52754c50f89
- Android 多媒體控制 來電監(jiān)聽-耳機插拔監(jiān)聽-耳機按鈕監(jiān)聽:http://blog.csdn.net/ocwvar/article/details/53107005
- Android音頻焦點詳解:http://www.reibang.com/p/e5785dcba952
- Android 音頻技術(shù)開發(fā)總結(jié):https://yq.aliyun.com/articles/8637
- [譯]Android音頻: 如何使用AudioTrack播放一個WAV格式文件?:http://blog.csdn.net/langwang2/article/details/50189977
- 利用MediaExtractor和MediaCodec實現(xiàn)音頻編解碼和混音:http://yedaxia.me/Android-MediaExtractor-And-MediaCodec/
- Android中播放音頻的幾種方式:http://blog.csdn.net/u013366008/article/details/76577372/
- 6.2.3 關(guān)于鎖屏頁面的博客
- 直接參考鎖屏頁面這篇博客:深入學(xué)習(xí)酷狗键思,混沌大學(xué)那種鎖屏頁面原理
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 個人博客
- github: https://github.com/yangchong211
- 知乎: https://www.zhihu.com/people/yang-chong-69-24/pins/posts
- 簡書: http://www.reibang.com/u/b7b2c6ed9284
- csdn: http://my.csdn.net/m0_37700275
- 喜馬拉雅聽書: http://www.ximalaya.com/zhubo/71989305/
- 泡在網(wǎng)上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1
- 郵箱:yangchong211@163.com
- 阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100239.headeruserinfo.3.dT4bcV