前言
最近公司有需求要做一個視頻編輯的功能,陸陸續續查了很多資料,因爲之前沒有接觸過這一領域,開始是想用Android自帶的API來實現,但是過了一個星期後,通過參考別人的範例寫了一個視頻裁剪的demo,各種問題,這一週基本就用來查找怎麼去解決這些問題了,但是結果很現實,仍然不知道怎麼去解決這些問題。突然發現如果還是這樣繼續下去的話,就算功能勉強實現了,當出現另一個問題後還是不知道怎麼去快速解決。也意識到如果只用Android API 的話可能無法實現需求。查找入門資料的時候偶然發現了一篇文章《Android音視頻開發入門指南》,發現需要學習的地方還有很多…很多…很多…多…,就打算把音視頻作爲2019年的一個任務目標來學習,希望能通過這個指南一步步的進階。
任務目標
爲了防止鏈接失效,把任務目標轉移到這兒一份
- 在 Android 平臺繪製一張圖片,使用至少 3 種不同的 API,ImageView,SurfaceView,自定義 View
- 在 Android 平臺使用 AudioRecord 和 AudioTrack API 完成音頻 PCM 數據的採集和播放,並實現讀寫音頻 wav 文件
- 在 Android 平臺使用 Camera API 進行視頻的採集,分別使用 SurfaceView、TextureView 來預覽 Camera 數據,取到 NV21 的數據回調
- 學習 Android 平臺的 MediaExtractor 和 MediaMuxer API,知道如何解析和封裝 mp4 文件
- 學習 Android 平臺 OpenGL ES API,瞭解 OpenGL 開發的基本流程,使用 OpenGL 繪製一個三角形
- 學習 Android 平臺 OpenGL ES API,學習紋理繪製,能夠使用 OpenGL 顯示一張圖片
- 學習 MediaCodec API,完成音頻 AAC 硬編、硬解
- 學習 MediaCodec API,完成視頻 H.264 的硬編、硬解
- 串聯整個音視頻錄製流程,完成音視頻的採集、編碼、封包成 mp4 輸出
- 串聯整個音視頻播放流程,完成 mp4 的解析、音視頻的解碼、播放和渲染
- 進一步學習 OpenGL,瞭解如何實現視頻的剪裁、旋轉、水印、濾鏡,並學習 OpenGL 高級特性,如:VBO,VAO,FBO 等等
- 學習 Android 圖形圖像架構,能夠使用 GLSurfaceviw 繪製 Camera 預覽畫面
- 深入研究音視頻相關的網絡協議,如 rtmp,hls,以及封包格式,如:flv,mp4
- 深入學習一些音視頻領域的開源項目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
- 將 ffmpeg 庫移植到 Android 平臺,結合上面積累的經驗,編寫一款簡易的音視頻播放器
- 將 x264 庫移植到 Android 平臺,結合上面積累的經驗,完成視頻數據 H264 軟編功能
- 將 librtmp 庫移植到 Android 平臺,結合上面積累的經驗,完成 Android RTMP 推流功能
- 上面積累的經驗,做一款短視頻 APP,完成如:斷點拍攝、添加水印、本地轉碼、視頻剪輯、視頻拼接、MV 特效等功能
並且把作者推薦的參考資料也列一份
-
《雷霄驊的專欄》:http://blog.csdn.net/leixiaohua1020
-
《Android音頻開發》:http://ticktick.blog.51cto.com/823160/d-15
-
《FFMPEG Tips》:http://ticktick.blog.51cto.com/823160/d-17
-
《Learn OpenGL 中文》:https://learnopengl-cn.readthedocs.io/zh/latest/
-
《Android Graphic 架構》:https://source.android.com/devices/graphics/
結語
這一篇記錄是學習音視頻的開始,希望能督促自己不斷的去進步,從下一篇文章開始記錄學習音視頻的每一步。不積跬步無以至千里,小步伐走起來。