Android 音視頻開發這塊目前的確沒有比較系統的教程或者書籍,網上的博客文章也都是比較零散的。只能通過一點點的學習和積累把這塊的知識串聯積累起來。
初級入門篇:
- Android 音視頻開發(一) : 通過三種方式繪制圖片
- Android 音視頻開發(二):使用 AudioRecord 采集音頻PCM並保存到文件
- Android 音視頻開發(三):使用 AudioTrack 播放PCM音頻
- Android 音視頻開發(四):使用 Camera API 采集視頻數據
- Android 音視頻開發(五):使用 MediaExtractor 和 MediaMuxer API 解析和封裝 mp4 文件
- Android 音視頻開發(六): MediaCodec API 詳解
- Android 音視頻開發(七): 音視頻錄制流程總結
初級入門篇主要是接觸Android多媒體展示相關的API,通過單獨的列舉和使用這些API,對Android音視頻處理有一個基本的輪廓,雖然知識點相對來說是比較散的,但是點成線,線稱面,基本的基礎掌握了,通過學習Android音視頻核心的API將音視頻的流程串聯起來,這樣對於音視頻的了解和控制就不僅僅局限於最外層的API了,而是能夠通過相對底層的方式來加深對Android 音視頻開發的認知。
中級進階篇:
OpenGL ES 學習記錄
學習 Android 平台 OpenGL ES API,了解 OpenGL 開發的基本流程,使用 OpenGL 繪制基本圖形,並了解相關的API的簡單使用
- Android OpenGL ES 開發(一): OpenGL ES 介紹
- Android OpenGL ES 開發(二): OpenGL ES 環境搭建
- Android OpenGL ES 開發(三): OpenGL ES 定義形狀
- Android OpenGL ES 開發(四): OpenGL ES 繪制形狀
- Android OpenGL ES 開發(五): OpenGL ES 使用投影和相機視圖
- Android OpenGL ES 開發(六): OpenGL ES 添加運動效果
- Android OpenGL ES 開發(七): OpenGL ES 響應觸摸事件
- Android OpenGL ES 開發(八): OpenGL ES 着色器語言GLSL
- Android OpenGL ES 開發(九): OpenGL ES 紋理貼圖
- Android OpenGL ES 開發(十): 通過GLES20與着色器交互
動手實踐,積累實戰經驗:
個人學習成果展示:
- 音視頻錄制流程總結: https://github.com/renhui/AndroidRecorder
- OpenGL ES 學習筆記:https://github.com/renhui/OpenGLES20Study
- OpenGL音視頻錄制項目:https://github.com/renhui/OpenGLVideoRecord
OpenSL ES 學習記錄
學習 Android 平台 OpenSL ES API,了解 OpenSL 開發的基本流程,使用OpenSL播放PCM數據,並了解相關API的簡單使用
- Android OpenSL ES 開發:Android OpenSL 介紹和開發流程說明
- Android OpenSL ES 開發:使用 OpenSL 播放 PCM 數據
- Android OpenSL ES 開發:Android OpenSL 錄制 PCM 音頻數據
- Android OpenSL ES 開發:OpenSL ES利用SoundTouch實現PCM音頻的變速和變調
高級探究篇:
- 深入學習音視頻編碼,如H.264,AAC,研究使用開源編解碼庫,如x.264,JM 等
- 深入研究音視頻相關的網絡協議,如 rtmp,hls,以及封包格式,如:flv,mp4
- 深入學習一些音視頻領域的開源項目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
- 將 ffmpeg 庫移植到 Android 平台,結合上面積累的經驗,編寫一款簡易的音視頻播放器
- 將 x264 庫移植到 Android 平台,結合上面積累的經驗,完成視頻數據 H264 軟編功能
- 將 librtmp 庫移植到 Android 平台,結合上面積累的經驗,完成 Android RTMP 推流功能
音視頻編解碼技術
流媒體協議
多媒體文件格式
FFmpeg 學習記錄
- FFmpeg命令行工具學習(一):查看媒體文件頭信息工具ffprobe
- FFmpeg命令行工具學習(二):播放媒體文件的工具ffplay
- FFmpeg命令行工具學習(三):媒體文件轉換工具ffmpeg
- FFmpeg命令行工具學習(四):FFmpeg 采集設備
- FFmpeg命令行工具學習(五):FFmpeg 調整音視頻播放速度
- FFmpeg 學習(一):FFmpeg 簡介
- FFmpeg 學習(二):Mac下安裝FFmpeg
- FFmpeg 學習(三):將 FFmpeg 移植到 Android平台
- FFmpeg 學習(四):FFmpeg API 介紹與通用 API 分析
- FFmpeg 學習(五):FFmpeg 編解碼 API 分析
- FFmpeg 學習(六):FFmpeg 核心模塊 libavformat 與 libavcodec 分析
- FFmpeg 結構體學習(一): AVFormatContext 分析
- FFmpeg 結構體學習(二): AVStream 分析
- FFmpeg 結構體學習(三): AVPacket 分析
- FFmpeg 結構體學習(四): AVFrame 分析
- FFmpeg 結構體學習(五): AVCodec 分析
- FFmpeg 結構體學習(六): AVCodecContext 分析
- FFmpeg 結構體學習(七): AVIOContext 分析
- FFmpeg 結構體學習(八):FFMPEG中重要結構體之間的關系
音視頻開發開源庫
GPUImage、IjkPlayer、librestreaming、RTMPDump、SoundTouch
學習展望
完成上面的學習后,可以嘗試做一款音視頻相關的APP,這個APP盡可能多的用上你學習的知識,看看能做到什么程度。如果你能很好的做出來,並認真的把上面列舉的所有的點都完成和整理了,相信你在Android音視頻領域會越走越好。
推薦的學習資料:
1. 《雷霄驊的專欄》:http://blog.csdn.net/leixiaohua1020
2. 《Android音頻開發》:http://ticktick.blog.51cto.com/823160/d-15
3. 《FFMPEG Tips》:http://ticktick.blog.51cto.com/823160/d-17
4. 《Learn OpenGL 中文》:https://learnopengl-cn.github.io/
5. 《Android Graphic 架構》:https://source.android.com/devices/graphics/
6. 《Jhuster的專欄》:http://blog.51cto.com/ticktick
7. 《ywl5320的專欄》:https://blog.csdn.net/ywl5320