推薦幾個(gè)堪稱教科書級(jí)別的 Android 音視頻入門項(xiàng)目
目前,市面上關(guān)于音視頻學(xué)習(xí)的相關(guān)書籍并不多,而且即使看了書籍學(xué)了理論,最終還是要回歸到代碼上來。
畢竟 IT 行業(yè)實(shí)踐性要求高,強(qiáng)調(diào)動(dòng)手能力,音視頻這方面就更得多操作和探索了。
推薦下面幾個(gè)項(xiàng)目會(huì)各有側(cè)重,分別涵蓋了 Android 音視頻錄制 API 、OpenGL 渲染和綜合運(yùn)用的例子。
GPUImage
Github 地址:
https://github.com/cats-oss/android-gpuimage
GPUImage 毫無疑問是音視頻項(xiàng)目里面必讀工程了,它的側(cè)重點(diǎn)在于渲染方面。
有些公司的招聘要求上可能都會(huì)寫明熟悉GPUImage ,重要性可見一斑。
通過閱讀 GPUImage 的源碼,能夠讓你掌握 OpenGL 的渲染以及渲染鏈的搭建,同時(shí)工程里面很多特效 Shader 代碼,通過閱讀和實(shí)踐這些 Shader 代碼,能夠讓你掌握初步的 Shader 編寫能力。
比如常見的濾鏡效果,在 GPUImage 就有現(xiàn)成的代碼例子,這一點(diǎn)在我的直播中也有講到。有興趣的可以翻閱視頻,掌握常見濾鏡效果的代碼編寫。
如果需要 GPUImage 相關(guān)的源碼分析文檔,也可以參考我之前寫過的一篇文章:
AudioVideoRecordingSample
Github 地址
https://github.com/saki4510t/AudioVideoRecordingSample
此項(xiàng)目的側(cè)重點(diǎn)在于 Android 音視頻相關(guān) API 的使用,尤其是在 錄制和編碼方面的。
該項(xiàng)目運(yùn)行后能夠?qū)?Camera 采集的視頻和音頻內(nèi)容編碼成一個(gè) MP4 文件。
這其中用到了 MediaCodec 做編碼,用到了 MediaMuxer 將音頻和視頻混合。
這樣的一個(gè)完整示例對(duì)于掌握 Android 上音視頻相關(guān) API 幫忙非常大,因?yàn)樗軌虺晒φ_運(yùn)行,而且可以通過去修改其源碼來做自己的實(shí)驗(yàn),驗(yàn)證自己對(duì)于 API 的理解和掌握。
當(dāng)你能夠熟練掌握其內(nèi)容,或者你就可以試著更進(jìn)一步,嘗試用 FFmpeg 做音視頻的編碼和混合,實(shí)現(xiàn)和 Android 音視頻 API 一樣的功能。
Grafika
Github 地址
https://github.com/google/grafika
此項(xiàng)目是 Google 提供的一個(gè)非官方的項(xiàng)目,它的側(cè)重點(diǎn)在于將 OpenGL 與 Android 音視頻 API 綜合運(yùn)用。
它包含了很多個(gè)完整小示例,比如如何使用 TextureView 顯示 OpenGL 內(nèi)容、使用三種方式進(jìn)行 OpenGL 內(nèi)容的錄制、如何進(jìn)行硬編碼操作等。
通過閱讀這些例子,能夠讓你掌握更多的技巧,把前面學(xué)會(huì)的 OpenGL 和 Android 音視頻 API 更靈活運(yùn)用了,進(jìn)一步加深理解。
甚至有些例子都可以用到項(xiàng)目早期需求中去的,比如如何進(jìn)行 EGL 的封裝、渲染線程與主線程的分離。
另外,以上三個(gè)例子都會(huì)包含 Camera 相關(guān)的操作,比如如何將 Camera 內(nèi)容展示到 SurfaceView 、TextureView 上,如何進(jìn)行 Camera 拍攝等。
最后
之前這三個(gè)項(xiàng)目堪稱教科學(xué)書級(jí)別的,不是沒有理由的。至少我都源碼閱讀了兩邊以上。
第一次閱讀的時(shí)候會(huì)覺得 " 嗯,明白怎么回事了 ",等到項(xiàng)目實(shí)踐了,需要自己從頭搞一遍,這時(shí)再回頭看,會(huì)有新的感悟 "哦,原來要這樣設(shè)計(jì)呀" ,等到更熟練的時(shí)候,在來看,可能就會(huì)覺得 "咦,這塊能優(yōu)化一波了"。
以上,希望對(duì)于想從事音視頻開發(fā)的你,也能夠看看上面幾個(gè)項(xiàng)目源碼,學(xué)習(xí)到更多技巧,共同進(jìn)步。

技術(shù)交流,歡迎加我微信:ezglumes ,拉你入技術(shù)交流群。
掃碼關(guān)注公眾號(hào)【音視頻開發(fā)進(jìn)階】,一起學(xué)習(xí)多媒體音視頻開發(fā)~~~
