而如今音视频的知识纷繁复杂,自己学习非常困难,既需要非常扎实的基础知识,又需要有很多的工程经验;

而音视频从业者基本上有两个层面:一个层面是搞音视频算法,这类人非常少,需要有深的数学能力和算法背景,这类人一般都会选择去大公司,薪水百万是最low 的。

另一个层面是搞工程,这类人相对较多,他们有扎实的理论基础,很强的技术功底,对音频、视频都非常熟悉。这些人工资要比一般开发者高20%左右;随着5G时代的到来,音视频慢慢变成人们日常生活中的必须品。所以,现在有大量的公司开始寻找音视频人才,一个稍好点的音视频人才现在可能会有3-4家公司抢着要。因此,对音视频人才的需求也从小众变成了大众,这更多的是大家对未来市场的预期导致的结果。

可在目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,在此小编花费大量时间收集和整理,终于将音视频方面的知识点整理成了一个专题,今天借此文章分享给对音视频感兴趣的小伙伴。

我们先来看看一个方向性的学习指南:

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. ImageView 绘制图片

2. SurfaceView 绘制图片

3. 自定义 View 绘制图片

android studio 真机投屏开发 安卓视频投屏开发_Android

二、AudioRecord API详解

android studio 真机投屏开发 安卓视频投屏开发_移动开发_02

三、使用 AudioRecord 实现录音,并生成wav

  • 创建一个AudioRecord对象
  • 初始化一个buffer
  • 开始录音
  • 创建一个数据流,一边从AudioRecord中读取声音数据到初始化的buffer,一边将buffer中数据导入数据流。
  • 关闭数据流
  • 停止录音

android studio 真机投屏开发 安卓视频投屏开发_android_03

四、用 AudioTrack 播放PCM音频

1.AudioTrack 基本使用

  • MODE_STATIC模式
  • MODE_STREAM模式

2.AudioTrack 详解

  • 音频流的类型
  • Buffer分配和Frame的概念
  • AudioTrack构造过程

3. AudioTrack 与 MediaPlayer 的对比

  • 区别
  • 联系
  • SoundPool

android studio 真机投屏开发 安卓视频投屏开发_android_04

五、使用 Camera API 采集视频数据

1.预览 Camera 数据

2.取到 NV21 的数据回调

六、使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件

1.MediaExtractor API介绍

2.MediaMuxer API介绍

3.使用情境

android studio 真机投屏开发 安卓视频投屏开发_音视频_05

七. MediaCodec API 详解

1.MediaCodec 介绍

2.MediaCodec API 说明

3.MediaCodec 流控

  • 流控基本概念
  • Android 硬编码流控
  • Android 流控策略选

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

开源分享完整内容戳这里

android studio 真机投屏开发 安卓视频投屏开发_移动开发_06

由于文章篇幅受限,剩余内容过多,文中插图有限,下文只能截图目录展示:

二,中级进阶篇:

===================================================================

  • 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与着色器交互
  • 使用 OpenGL 显示一张图片
  • GLSurfaceviw 绘制 Camera 预览画面及实现拍照
  • 使用OpenGL ES 完成视频的录制,并实现视频水印效果

android studio 真机投屏开发 安卓视频投屏开发_Android_07

高级探究篇:

=================================================================

  • 深入学习音视频编码,如H.264,AAC,研究使用开源编解码库,如x.264,JM 等
  • 深入研究音视频相关的网络协议,如 rtmp,hls,以及封包格式,如:flv,mp4
  • 深入学习一些音视频领域的开源项目,如 webrtc,ffmpeg,ijkplayer,librtmp 等等
  • 将 ffmpeg 库移植到 Android 平台,结合上面积累的经验,编写一款简易的音视频播放器
  • 将 x264 库移植到 Android 平台,结合上面积累的经验,完成视频数据 H264 软编功能
  • 将 librtmp 库移植到 Android 平台,结合上面积累的经验,完成 Android RTMP 推流功能

音视频编解码技术

  • 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准
  • 音视频编解码技术(二):AAC 音频编码技术

流媒体协议

  • 流媒体协议(一):HLS 协议
  • 流媒体协议(二):RTMP协议

多媒体文件格式

  • 多媒体文件格式(一):MP4 格式
  • 多媒体文件格式(二):FLV 格式
  • 多媒体文件格式(三):M3U8 格式
  • 多媒体文件格式(四):TS 格式
  • 多媒体文件格式(五):PCM / WAV 格式

android studio 真机投屏开发 安卓视频投屏开发_android_08

android studio 真机投屏开发 安卓视频投屏开发_面试_09