Android音視頻開發入門(一)

前言

最近公司有需求要做一個視頻編輯的功能,陸陸續續查了很多資料,因爲之前沒有接觸過這一領域,開始是想用Android自帶的API來實現,但是過了一個星期後,通過參考別人的範例寫了一個視頻裁剪的demo,各種問題,這一週基本就用來查找怎麼去解決這些問題了,但是結果很現實,仍然不知道怎麼去解決這些問題。突然發現如果還是這樣繼續下去的話,就算功能勉強實現了,當出現另一個問題後還是不知道怎麼去快速解決。也意識到如果只用Android API 的話可能無法實現需求。查找入門資料的時候偶然發現了一篇文章《Android音視頻開發入門指南》,發現需要學習的地方還有很多…很多…很多…多…,就打算把音視頻作爲2019年的一個任務目標來學習,希望能通過這個指南一步步的進階。

任務目標

爲了防止鏈接失效,把任務目標轉移到這兒一份

  1. 在 Android 平臺繪製一張圖片,使用至少 3 種不同的 API,ImageView,SurfaceView,自定義 View
  2. 在 Android 平臺使用 AudioRecord 和 AudioTrack API 完成音頻 PCM 數據的採集和播放,並實現讀寫音頻 wav 文件
  3. 在 Android 平臺使用 Camera API 進行視頻的採集,分別使用 SurfaceView、TextureView 來預覽 Camera 數據,取到 NV21 的數據回調
  4. 學習 Android 平臺的 MediaExtractor 和 MediaMuxer API,知道如何解析和封裝 mp4 文件
  5. 學習 Android 平臺 OpenGL ES API,瞭解 OpenGL 開發的基本流程,使用 OpenGL 繪製一個三角形
  6. 學習 Android 平臺 OpenGL ES API,學習紋理繪製,能夠使用 OpenGL 顯示一張圖片
  7. 學習 MediaCodec API,完成音頻 AAC 硬編、硬解
  8. 學習 MediaCodec API,完成視頻 H.264 的硬編、硬解
  9. 串聯整個音視頻錄製流程,完成音視頻的採集、編碼、封包成 mp4 輸出
  10. 串聯整個音視頻播放流程,完成 mp4 的解析、音視頻的解碼、播放和渲染
  11. 進一步學習 OpenGL,瞭解如何實現視頻的剪裁、旋轉、水印、濾鏡,並學習 OpenGL 高級特性,如:VBO,VAO,FBO 等等
  12. 學習 Android 圖形圖像架構,能夠使用 GLSurfaceviw 繪製 Camera 預覽畫面
  13. 深入研究音視頻相關的網絡協議,如 rtmp,hls,以及封包格式,如:flv,mp4
  14. 深入學習一些音視頻領域的開源項目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
  15. 將 ffmpeg 庫移植到 Android 平臺,結合上面積累的經驗,編寫一款簡易的音視頻播放器
  16. 將 x264 庫移植到 Android 平臺,結合上面積累的經驗,完成視頻數據 H264 軟編功能
  17. 將 librtmp 庫移植到 Android 平臺,結合上面積累的經驗,完成 Android RTMP 推流功能
  18. 上面積累的經驗,做一款短視頻 APP,完成如:斷點拍攝、添加水印、本地轉碼、視頻剪輯、視頻拼接、MV 特效等功能

並且把作者推薦的參考資料也列一份

  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.readthedocs.io/zh/latest/

  5. 《Android Graphic 架構》:https://source.android.com/devices/graphics/

結語

這一篇記錄是學習音視頻的開始,希望能督促自己不斷的去進步,從下一篇文章開始記錄學習音視頻的每一步。不積跬步無以至千里,小步伐走起來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章