前言
大家都知道,2019年是5g元年,随着5g的崛起,音视频将会运用的更加的广阔(比如远程教学,在线教学,在线会议,远程互动,安防监控…),将不再单单局限与目前的泛娱乐平台,将会更加的完善,从而更好的服务于我们的生活。
本人是非常爱好音视频开发的,奈何音视频的开发是有一定难度的,因为他涉及的层面比较广,要想深入学习,是需要有一定的学习体系,然后一步一个脚印的深入的。
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 音视频开发的认知。
中级晋级篇:
了解了系统基本的API,我们基本算是步入了音视频开发的大门,但是,到了这一步也仅仅是入门而已。需要我们进一步深入学习,做好晋级的准备。下面是晋级所必须要走过的每一步。
- 在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View
- 了解并搭建OpenGL ES 环境
- OpenGL ES 定义形状。
- OpenGL ES 定义形状
- OpenGL ES 绘制形状
- OpenGL ES 使用投影和相机视图
- OpenGL ES 添加运动效果
- OpenGL ES 响应触摸事件
- OpenGL ES 着色器语言GLSL
- OpenGL ES 纹理贴图
- 通过GLES20与着色器交互
到了这个阶段,OpenGL ES的API我想应该有了一定的了解,下面就是要学以致用,根据这些API做一些简单的实战。
- 使用 OpenGL 绘制一个三角形
- 学习纹理绘制,能够使用 OpenGL 显示一张图片
终极晋级篇:
如果,你已经掌握了前面的3个阶段的相关技术,接下来,就要步入终极技术的实战,终极篇是学会了,那么你就是一个真正意义上的音视频大牛,这也是从事音视频技术开发的分水岭,更是拿高工资的杀手锏。它主要包括了一下东西:
1.编码和解码:
- 学习 MediaCodec API,完成音频 AAC 硬编、硬解
- 学习 MediaCodec API,完成视频( H.264 , H.2645)的硬编、硬解
2.音视频录制流程:
- 串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出
- 串联整个音视频播放流程,完成 mp4 的解析、音视频的解码、播放和渲染
3.深入学习OpenGL:
- 进一步学习 OpenGL,了解如何实现视频的剪裁、旋转、水印、滤镜,并学习 OpenGL 高级特性,如:VBO,VAO,FBO…
- 学习 Android 图形图像架构,能够使用 GLSurfaceviw 绘制 Camera 预览画面
- 使用 OpenSL 播放 PCM 数据
- Android OpenSL 录制 PCM 音频数据
- OpenSL ES利用SoundTouch实现PCM音频的变速和变调
4.深入图像处理算法的研究:
大家都知道,视频其实就是一张一张的图片合成的,现在很多应用都是需要对视频做一些美颜特效,或者后期视频特效的处理,因此,必须要掌握先关的图像处理算法,图像处理基本算法操作从处理对象的多少可以有如下划分:
- 点运算:处理点单元信息的运算
- 群运算:处理群单元 (若干个相邻点的集合)的运算
进一步分类如下列表所示:
操作类型 | 具体的操作 |
---|---|
点运算 | 二值化操作、直方图处理、亮度映射、加法运算、翻转运 算 、尺度运算 、对数运算 、指数运算等 |
群运算 | 模板卷积运算、滤波运算(均值滤波、最大值滤波 、最小值滤波,以及常见的高斯滤波器)、各项异性扩散、形态学操作(膨胀和腐蚀)、力场变换等 |
5.相关网络协议:
- 深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4
- 深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
6.多媒体文件格式:
- 多媒体文件格式之MP4 格式
- 多媒体文件格式之FLV 格式
- 多媒体文件格式之M3U8 格式
- 多媒体文件格式之TS 格式
- 多媒体文件格式之PCM / WAV 格式
7.相关开源库文件的移植:
- 将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器
- 将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能
- 将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能
关于ffmpeg 库文件的学习是比较枯燥,也是至关重要的,因此一定要耐着性子认认真真,抽丝剥茧的去学,不懂的可以百度查阅资料,看相关的技术的博客,下面推荐几个比较好的博主,后期,我也会进一步深入研究ffmpeg,这里,就不误导大家了。
8.常用的视频播放开源库:
9.终极实战:
- 如果你掌握了上述所有的功能,那么,你可以尝试做一款短视频 APP,完成如:断点拍摄、添加水印、本地转码、视频剪辑、视频拼接、MV 特效,视频美颜,实时推流(类似抖音)互动等功能。
总结:
“路漫漫其修远兮,吾将上下而求索”。如果,你掌握了这些技能,我相信你将是音视频开发领域的大亨,香饽饽。从此走上人生巅峰,成功迎娶白富美。在以后的日子里,我也会围绕这个大纲,站在以前巨人的肩膀上,一步步深入音视频,一步步完善这些博客。
推荐
下面是我在做音视频开发以及图像处理算法时经常参考的资料以及膜拜的大神。