前言
近两年内音视频发展十分迅速,以抖音、快手、视频号为代表的短视频平台风靡全球,直播带货、音视频互动教育等新兴业务模式飞速发展。
据艾瑞咨询的数据显示,短视频应用的用户渗透率已经超过 70%。人们获取信息的主要途径, 已经开始从文字阅读,向更丰富立体的音视频形式迁移。
音视频技术介绍
什么是音视频技术?
音视频技术其实就是音频技术和视频技术的一个统称,在技术处理上,其实音频和视频是要分开处理的。
而且要注意一点,音视频从开始收集数据到最后展示都是离不开硬件设备的,所以在以后的开发过程中,要做好与硬件打交道的心理准备了。
音视频的主要处理过程:
-
采集 比如从客户端的摄像头、麦克风和本地原始文件等,获得基础的音视频数据;
-
预处理 在这个阶段其实就是对音视频进行修剪操作,毕竟收集到的原始数据,不一定是想要在最后呈现的效果,因此在这里可能会进行美颜、裁剪、AI识别处理、声音A3处理等;
-
编码 在经过预处理或者没处理过的原始文件,一般都会比较大,不适合进行传输,这个时候就需要进行压缩、转码之类的操作,减少文件提交,然后再进行传输,执行编码的工具叫编码器,压缩数据的算法叫做编码格式;
-
解码 压缩数据传输完之后,就需要解码成原始文件一样的数据才能使用,用来解码的工具就是解码器了,不过通常编码器和解码器是一块的,统称为编解码器codec;
-
渲染与展示 接收到原始数据文件之后,就可以通过硬件或者软件进行渲染与展示了,硬件例如显示器、音响等,软件有SurfaceView;
-
文件封装/解封装 其实从采集,音频和视频都是分开进行处理的,但是在进行传输的时候,我们需要同一套音频文件是在一块的,所以需要进行一次文件封装。存放音视频的容器叫封装容器,文件类型叫封装格式;
-
网络协议打包 音视频文件在网络中传输的时候,一般都会有一个特定的协议,也就是流媒体协议。 网络协议会将音视频数据文件打包成协议包,通过网络协议端口发送出去,接收方接收到网络包之后,要通过网络协议解开协议包,才能获得音视频数据文件。
音视频开发相关知识点:
音视频学习资料
第 1章 三种方式绘制图片
- SurfaceView和View的优劣对比以及使用场景
- android10+存储权限的获取
第 2章 AudioRecord录制PCM音频
- 音频采集API AudioRecord和MediaRecorder
- PCM的介绍
- AudioRecord的使用(构造、开始录制写入pcm文件,状态机)
- ffplay播放pcm
- pcm转为wav
第 3章 AudioTrack播放PCM音频
- MediaPlayer和AudioTrack
- AudioTrack的介绍
- 具体实现
- 遇到的问题
第 4章 Camera视频采集
- Camera基础知识
- 视频采集的流程
- 遇到的问题 (页面卡住、黑屏、倒立等)
第 5章 MediaExtractor MediaMuxer 实现视频的解封装与合成
- 有什么实际应用
- 视频解封装和合成的API以及流程介绍
- 实践(以及ffmpeg的实现)
- 遇到的问题
第 6章 MediaCodec硬编解流程与实践
- 工作原理和基本流程
- 数据格式
- 生命周期
- 同步异步模式
- MediaCodec 流控
- 实践:AAC解码为PCM同步和异步的两种实现 (音频解码)
- 遇到的问题
第 7章 OpenGL ES 基本概念
- 管线
- 顶点
- 纹理
- 顶点着色器(VertexShader)
- 图元装配
- 光栅化
- 片段着色器(FragmentShader)
- 逐片段操作
第 8章 GLSL及Shader的渲染流程
- GLSL是什么?
- GLSL的特有语法
- Shader的渲染流程
- EGL环境
第 9章 OpenGL ES 绘制平面图形
- GLSL着色器的编写
- 实践:用GLSurfaceView加载GLSL绘制屏幕图形
- 遇到的问题
第 10章 GLSurfaceView源码解析&EGL环境
- GLSurfaceView源码解析
- TextureView +EGL+ GLThread绘制图形
第 11章 OpenGL ES矩阵变换与坐标系统
- 矩阵与矩阵变换
- 坐标系统
- OpenGL的矩阵变换
- 实践
第 12章 OpenGL ES之纹理
- 基本概念
- 纹理绘制流程和关键方法
- 实践 :加载纹理 (纹理加载、二分屏、三分屏、八分屏、镜像、纹理和颜色混合)
第 13章 OpenGL ES 滤镜 (篇一)
- 颜色和滤镜的基本知识
- 实践:ColorFilter对View进行换色
- 实践:OpenGL ES实现图片滤镜
- 遇到的问题
第 14章 OpenGL ES 实时滤镜
- 基本知识介绍
- 流程
- 实践:Camera预览添加实时滤镜(原图、黑白、冷暖色)
- 遇到的问题
第 15章 OpenGL ES粒子系统 - 喷泉
- 什么是粒子和粒子系统
- 实践:喷泉效果
- 问题1. 重叠覆盖
- 问题2. 把点修改为纹理图片
第 16章 OpenGL ES粒子效果-烟花爆炸
- 烟花爆竹场景和属性
- 实践:烟花效果
- 问题:目前的烟花都是红色的,如何实现多彩的烟花?
第 17章 JNI与NDK的学习和使用
- 什么是JNI、NDK?
- Java和Native交互流程
- 通过AS创建Native CPP简单的项目
- JNI基本知识
- Java和Native的相互调用
第 18章 JNI - 引用类型、异常处理、函数注册
- 引用
- JNI 调用时的异常处理
- 函数注册
第 19章 NDK构建方式 ndk-build与cmake
- Makefile文件解析
- Cmake构建
第 20章 指针、内存模型、引用
- 指针
- 内存模型和四区使用
- 引用
第 21章 运算符重载、继承、多态、模版
- 类和对象的重要知识点
- 运算符重载
- 继承
- 多态
- 模版
第 22章 STL 之 容器
- STL的六大部件介绍
- 容器分类
- 序列式容器介绍(vector、list、deque)
- 关联式容器
第 23章 算法系列 - 冒泡排序
- 主流排序算法
- stl中sort的实现
- 冒泡排序
- 冒泡排序的优化
第 24章 算法系列-快速排序
- 递归
- 快速排序
第 25章 算法系列-堆排序
- 基本数据结构
- 堆排序
第 26章 算法序列 - 散列表
- 基本概念
- 散列表的构造
- 散列表的碰撞处理
- 代码实现
第 27章 音视频基础知识
- 视频播放器原理
- 音频编码基础知识
- 视频编码基础知识
第 28章 FFMPEG常用命令
- 播放器ffplay常用命令
- 多媒体分析器ffprobe常用命令
- 编解码工具ffmpeg常用命令
第 29章 交叉编译android使用的FFmpeg(3.x和4.x)
- 配置安装android交叉编译工具链
- 手写FFmpeg编译脚本 进行编译(针对ffmpeg3.x和ffmpeg4.x版本)
- androidStudio中引用使用ffmpeg
第 30章 基于FFmpeg实现简单的视频解码器
- FFmpeg解码过程流程图和关键的数据结构
- mp4通过FFmpeg解码YUV裸视频数据
- 遇到的问题
第 31章 FFmpeg + AudioTrack 实现音频解码和播放
- 音频解码流程
- 解码音频为pcm
- 使用AudioTrack播放音频
第 32章 FFmpeg +OpenSL ES实现音频解码和播放
- OpenSL ES基本介绍
- OpenSL ES播放音频流程
- 代码实现
- 遇到的问题
第 33章 FFmpeg + OpenGLES 边解码边播放视频
- 基础知识
- 使用GLSurfaceView播放边解码边播放视频
- 遇到的问题