前言
最近公司有需求要做一个视频编辑的功能,陆陆续续查了很多资料,因为之前没有接触过这一领域,开始是想用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/
结语
这一篇记录是学习音视频的开始,希望能督促自己不断的去进步,从下一篇文章开始记录学习音视频的每一步。不积跬步无以至千里,小步伐走起来。