导图社区 音视频高级开发课程-20221009
这是一篇关于音视频高级开发课程-20221009的思维导图,内容有1.1C语言入门专题、1.2C语言提高专题篇、1.3C++语言高级专题等。
编辑于2022-10-09 22:03:23 湖南腾讯课堂 零声教育 Android音视频流媒体高级开发课程V5.1
C/C++基础
1.1 C语言入门专题
01. C语言简介及开发环境配置
02. C语言基础语法及程序结构
03. C语言数据类型及输入输出函数
04. C语言常量与变量
05. 运算符及存储类型
06. if语句及switch语句
07. while循环与for循环
08. 数组
09. 函数
1.2 C语言提高专题篇
01. 指针入门到精通
02. 结构体类型
03. 常用字符串函数
04. 枚举_共用体_位运算
05. typedef与预处理
06. 文件操作知识
07. 顺序读写数据文件
08. 随机读写数据文件
1.3 C++语言高级专题
01. C++语言基础概述
02. C++指针与引用
03. C++类与对象
04. 类的基它特性
05. 构造函数_析构函数_拷贝构造函数
06. C++友元与动态内存
07. 函数重载与运算符重载
08. 单继承
09. 多继承
10. 虚继承及其它特性
11. 命名空间与模板
12. C++IO流类库
13. STL(vector_deque_stack)
14. STL(queue_set_map)
15. C++异常处理
1.4 C++语言新特性11/14/17专题
01. 类型推导:auto/decltype
02. 序列for循环
03. lambda表达式
04. 构造函数:委托构造和继承构造
05. 容器:array/forward_list/tuple
06. 垃圾回收机制
07. 正则表达式基础
08. 智能指针:shared_ptr/unique_ptr/weak_ptr
09. 关键字:nullptr/constexpr
10.共享内存/互斥量mutex
1.C++11:STL hashmap
2.关联容器:unordered_map
3.function函数对象
4.atomic_flag/atomic应用
5.条件变量:condition_variable
6.异常处理:exception
7.错误类别:error_category
08. 数据结构算法专题
1.单向链表与项目实战
2.双向链表与项目实战
3.循环链表与项目实战
4.栈与队列
5.树与二叉树遍历算法
5.折半查找算法
6.散列表(Hash)算法
7.插入排序与快速排序
8.希尔排序与选择排序
9.冒泡排序与并归排序
10.堆排序算法
10.C++常用设计模式专题
1.单例模式
2.代理模式
3.简单工厂模式
4.观察者模式
5.原型模式
6.策略模式
7.中介者模式
8.责任链模式
音视频基础
1.1 音频基础知识
01. 如何采集声音-模数转换原理
02. 为什么高品质音频采样率>=44.1Khz
03. 什么是PCM
04. 一个采样点用多少位表示
05. 采样值用整数还是浮点数表示
06. 音量大小和采样值大关系
07. 多少个采样点作为一帧数据
08. 左右通道的采样数据如何排列
09. 什么是PCM(脉冲编码调制)
10. 音频编码原理
1.2 视频基础知识
01. RGB彩色原理
02. 为什么需要YUV格式
03. 什么是像素
04. 分辨率、帧率、码率
05. YUV数据存储格式区别
06. YUV内存对齐问题
07. 为什么画面显示绿屏
08. H264编码原理
09. H264 I P B帧的关系
1.3 解复用基础知识
01. 什么是解复用,比如MP4格式
02. 为什么需要不同的复用格式MP4/FLV/TS
03. 常见的复用格式MP4/FLV/TS
1.4 FFmpeg开发环境搭建
01. Windows、Ubuntu、MAC三大平台
02. QT安装,只是用作写代码的工具, 方便学习FFmpeg,并不是用来学QT
03. FFmpeg命令行环境
04. FFmpeg API环境
05. FFmpeg编译
1.5 音视频开发常用工具
01. MediaInfo,分析视频文件
02. VLC播放器,播放测试
03. EasyICE,分析TS流
04. flvAnalyser,分析FLV
05. mp4box,分析mp4
06. audacity,分析音频PCM
07. Elecard_streamEye,分析H264
08. 海康YUVPlayer,分析YUV
09. everything 查找文件
FFmpeg实战(PC平台学习)
2.1 FFmpeg命令
01. 音频PCM/AAC文件提取
02. 视频YUV/H264文件提取
03. 解复用、复用
04. 音视频录制
05. 视频裁剪和合并
06. 图片/视频转换
07. 直播推流和拉流
08. 水印/画中画/九宫格滤镜
注:掌握FFmpeg的目的: 1.快速掌握FFmpeg能做什么; 2.加深对音视频的理解。
2.2 SDL跨平台多媒体开发库实战
01. SDL环境搭建
02. SDL事件处理
03. SDL线程处理
04. 视频YUV画面渲染
05. 音频PCM声音输出
注:SDL兼容Win、Ubuntu、Mac三大平台, 主要用于后续项目的画面显示和声音输出
2.3 FFmpeg基石精讲
01. FFmpeg框架
02. FFmpeg内存引用计数模型
03. 解复用相关AVFormat XXX等
04. 编解码相关AVCodec XXX等
05. 压缩数据AVPacket
06. 未压缩数据AVFrame
07. FFmpeg面向对象思想
08. Packet/Frame数据零拷贝
注:目的熟悉FFmpeg常用结构体和函数接口
2.4 FFmpeg音视频解复用+解码
01. 解复用流程
02. 音频解码流程
03. 视频解码流程
04. FLV封装格式分析
05. MP4封装格式分析
06. FLV和MP4 seek有什么区别
07. 为什么FLV格式能用于直播
08. 为什么MP4不能用于直播
09. MP4能否用来做点播
10. AAC ADTS分析
11. H264 NALU分析
12. AVIO内存输入模式
13. 音频重采样实战
14. 重采样后的数据播放时长是否一致
15. 重采样后PTS如何表示
16. 视频解码后YUV内存对齐问题
17. 音频解码后PCM排列格式问题
20. H265解码
注:FFmpeg API学习:视频解复用 -> 解码 -> 编码 -> 复用合成视频
2.5 FFmpeg音视频编码+复用合成视频
01. AAC音频编码
02. H264视频编码
03. PCM+YUV复用合成MP4/FLV
04. H264编码原理
05. IDR帧和I帧区别
06. 动态修改编码码率
07. GOP间隔参考值
08. 复用合成MP4音视频不同步问题
09. 编码、复用timebase问题
10. MP4合成IOS不能播放问题
11. 重采样后PTS如何表示
12. 视频编码YUV内存对齐问题
14. H265编码原理
15. H264、H265编码互转
2.6 FFmpeg过滤器
01. FFmpeg过滤chain框架
02. 音频过滤器框架
03. 视频过滤器框架
04. 多路音频混音amix
05. 视频水印watermark
06. 视频区域裁剪和翻转
07. 视频添加logo
注: filter在视频剪辑领域应用广泛。
2.7 ffplay播放器-源码分析
01. 掌握ffplay.c的意义
02. ffplay框架分析
03. 解复用线程
04. 音频解码线程
05. 视频解码线程
06. 声音输出回调
07. 画面渲染时间间隔
08. 音频重采样
09. 画面尺寸格式变换
10. 音频、视频、外部时钟同步区别
11. 以视频为基准时音频重采样补偿
12. 音量静音、调节大小的本质
13. 音视频packet队列大小限制
14. 音视频packet队列线程安全
15. 音视频frame队列大小限制
16. 音视频frame队列线程安全
17. 暂停、播放实现机制
18. seek播放导致的画面卡住问题
19. seek播放数据队列、同步时钟处理
20. 如何做到逐帧播放
21. 播放器退出的流程要点
注: ffplay.c是ffplay命令的源码,掌握ffplay 对于我们自己开发播放器有事半功倍的效果。
2.8 ffmpeg多媒体视频处理工具-源码分析
01. 掌握ffmpeg.c的意义
02. ffmpeg框架分析
03. 音视频编码
04. 封装格式转换
05. 提取音频
06. 提取视频
07. logo叠加
08. 音视频文件拼接
09. filter机制
10. 命令行解析流程
11. MP4转FLV不重新编码逻辑
12. MP4转FLV重新编码逻辑
13. MP4转FLV timebase
14. MP4转FLV scale
注: ffmpeg.c是ffmpeg命令的源码,掌握ffmpeg.c 的大体框架对于我们要实现一些不知道怎么编写代码 的功能(用ffmepg命令行可以但不知道怎么调用 ffmpeg api时可以参考ffmepg.c的逻辑)有极大的 帮助,比如要裁剪视频长度。
Android NDK开发入门
4.1 Android NDK开发基础
01. So库适配总结
02. GDB调试技巧
03. Makefile工程组织
04. CMake工程组织
05. 生成指定CPU平台的so库
06. JNI基础和接口生成
07. JNI Native层构建 Java 对象
08. JNI异常处理
4.2 Android FFmpeg编译和应用
01. 编译x264
02. 编译x265
03. 编译mp3
04. 编译fdk-aac
05. 编译FFmpeg
06. 使用FFmpeg开发简单播放器
FFmpeg自定义裁剪优化so大小
Android音视频基石
5.1 AudioRecord录制PCM音频
音频采集API AudioRecord和MediaRecorder区别
音频录制的流程分析
AudioSource录制输入源
smapleRate录制采样率
音频缓冲区大小bufferSize
AudioRecord参数设置、录制和停止
通过子线程录制避免ANR
通过ffplay验证录制的PCM
将录制的PCM转成WAV格式
5.2 AudioTrack播放PCM音频
AudioTrack的在音频系统中的作用以及使用场景
MediaPlayer和AudioTrack的区别
AudioTrack和AudioFliger的关系
AudioTrack参数streamType音频流类型
AudioTrack参数mode模式:STATIC和STREAM模式区别
播放流程:写入、播放、暂停、停止、释放
5.3 camera摄像头采集
视频采集的流程分析
facing相机的方向,前置后置摄像头
Orientation:相机采集图片的角度
预览图片的大小不当黑屏处理
帧回调处理函数设置
Camera预览的图片格式NV21 YUV420P YUV420sp等
摄像头采集保存yuv
摄像头采集预览SurfaceView,TextureView等
帧率、分辨率、格式设置
摄像头采集录制成MP4
5.4 音频输出方式对比
OpenSL ES播放PCM
AudioTrack和OPenSL ES的区别和适用场景
5.5 OpenGL入门
EGL和OpenGL的关系
EGL环境搭建
EGL线程创建、回调、渲染
OpenGL渲染流程
OpenGL加载shader
OpenGL绘制图形
OpengGL渲染纹理
矩阵原理和作用
旋转矩阵
平移矩阵
缩放矩阵
投影矩阵
动态切换滤镜
动态切换纹理
渲染yuv视频数据
5.6 视频渲染方式
视频渲染方式对比
OpenGL ES
GLSurfaceView和EGL的区别
OpenGL渲染YUV420P
OpenGL渲染NV12
ANativeWindow和surface的关系
5.7 MediaExtractor实现音视频解封装
主要API讲解,setDataSource、getTrackCount等
解封装流程分析
MP4(H264+AAC)解封装实战
使用ffplay验证解封装后的H264
使用ffplay验证解封装后的AAC
和FFmpeg解复用的区别
5.8 MediaMuxer实现音视频合成
主要API讲解,addTrack、writeSampleData等
合成流程分析
H264+AAC合成MP4
MediaMuxer支持的音视频格式
和FFmpeg复用器的区别
5.9 MediaCodec
硬件解码
硬件编码
工作原理和基本流程
Mediacodec接受三种数据格式: 压缩数据、原始音频数据和原始视频数据
Mediacodec接受两种载体: 以Surface作为载体或者ByteBuffer作为载体
解码支持的常用的色彩格式
生命周期:start、flush、reset、stop...等
同步模式
异步模式
同步和异步模式的区别
码率控制方式和大小设置
AAC解码成PCM实战
H264解码成YUV实战
PCM编码AAC实战
YUV编码H264实战
YUV编码H265实战
5.10 Android FFmpeg播放器开发
01. 播放器项目分析
02. 播放器框架分析
03. 播放器模块划分
04. 解复用模块
05. 音频解码
视频解码
音频输出OpenSLES
视频输出OpenGL渲染
07. 音视频同步
06. 播放器控制
拖动播放
实现0.5~3.0倍速播放
Android音视频项目实战
6.1 RTMP直播推流
摄像头采集
麦克风采集
X264视频软件编码
fdk-aac音频软件编码
MediaCodec硬件编码
01. RTMP协议分析
02. wireshark抓包分析
03. H264 RTMP封装
04. AAC RTMP封装
10. RTMP推流是否会导致延迟
11. RTMP推流如何动态调整码率
12. RTMP推流如何动态调整帧率
混音推流
6.2 RTMP直播拉流
01. RTMP推流协议实现
02. RTMP拉流协议实现
03. RTMP拉流音视频同步
05. MediaCodec硬件解码
06. OpenSL ES播放音频数据
08. OpenGL ES Shader显示视频
05. RTMP拉流实战
06. H264 RTMP解析
07. AAC RTMP解析
09. 没有MetaData能否播放
13. RTMP拉流是否会导致延迟
14. 如何检测RTMP拉流延迟
15. 如何解决RTMP播放延迟
16. ffplay、vlc能否用来测试播放延迟
17. RTMP拉流播放变速策略设置
6.3 ijkplayer二次开发
01. 编译ijkplayer和实践
02. 项目框架分析
03. 播放状态转换
04. 拉流分析
05. 解码分析
06. 音频播放流程
07. 视频渲染流程
08. OpenSL ES播放音频数据
09. MediaCodec硬件解码
10. OpenGL ES Shader显示视频
11. 变速播放实现原理
12. 低延迟播放实现
13. 缓存队列设计机制分析
14. ijkplayer二次开发
6.4 HLS拉流分析
01. HLS协议分析
02. HTTP协议分析
03. TS格式分析
04. m3u8文件解析
05. wireshark抓包分析
06. HLS拉流实战
07. FFmpeg HLS源码分析
08. HLS多码率机制
09. 如何解决HLS延迟高的问题
注: 理解HLS的拉流机制,有助于我们 解决HLS播放延迟较高的问题
6.5 RTSP流媒体实战
01. RTSP协议分析
02. RTP协议分析
03. H264 RTP封装
04. H264 RTP解析
05. AAC RTP封装
06. AAC RTP解析
07. RTCP协议分析
08. RTSP流媒体服务器搭建
09. RTSP推流实战
10. RTSP拉流实战
11. wireshark抓包分析
12. RTP头部序号的作用
13. RTCP的NTP和RTP的TS的区别
14. RTSP交互过程
15. 花屏可能的原因
16. SPS PPS如何发送
17. SDP封装音视频信息
注:RTSP涉及的技术不单只适用于安防领域, 其中的RTCP RTP SDP等协议在WebRTC也有应用。
6.6 音视频编辑秒剪实战
多路音频混音实现
如何避免多路音频混音破音
H264视频拼接
替换背景乐
视频和背景乐混音
6.7 一对一音视频通话
01. WebRTC通话原理分析
02. WebRTC开发环境搭建
03. coturn最佳搭建方法
04. 如何采集音视频数据
05. 一对一通话时序分析
06. 信令服务器设计
07. SDP分析
08. Candidate类型分析
09. Web一对一通话
10. Web和Android通话
11. AppRTC快速演示
12. 如何设置编码器优先级
13. 如何限制最大码率
14. 信令服务器的本质是什么
15. 为什么从接口获取SDP后还要再次设置
16. Web和Android的SDP差异
17. A要和B通话,A怎么知道B的存在
注:学习WebRTC建议从web端入手,可以直接调用js接口(千万别刚接触WebRTC就忙着去编译WebRTC源码),对WebRTC通话流程有清晰的理解再考虑其他端。
6.8 WebRTC视频会议
01. 自定义摄像头分辨率
02. 码率限制
03. 调整编码器顺序
04. srs SFU模型多方通话分析
05. 多人通话信令服务器开发
06. 动态分配stun/turn服务器
07. Web客户端源码
08. Android客户端源码
Android音视频特效专栏
7.1 OPenGL实战专栏
灰色滤镜
美颜滤镜
抖音灵魂出窍
自定义文字和水印
OpenGL贴图
高斯模糊美颜
零声服务
8.1 适宜工程师人群
01. 从事音视频岗位开发,但没有时间系统学习的在职工程师
02. 从事嵌入式方向开发,想转入音视频开发的在职工程师
03. 从事Android/IOS移动开发,想往音视频方向发展的在职工程师
04. 自己研究学习速度较慢,不能系统构建音视频知识体系的开发人员
05. 计算机相关专业想进入大厂的在校生(本科及以上学历)
8.2 授课方式
01. 200+小时课程,每年有内容更新
02. 老师答疑 工作问题 课程问题
03. 班主任督学 博客统计
8.3 面试跳槽
01. 简历梳理 技术点凸显 项目技术梳理
02. 模拟面试 技术表述 项目重点
03. 薪资谈判 福利争取 公司背调
04. offer选择 职业规划 技术前景
8.4 学习方法
01. 先看文档再看视频
02. 先把课程代码运行调试,然后修改调试,最后自己尝试重写
03. 每节课的知识点总结成技术博客(每月有博客大赛,有奖金支持)
04. 课程与工作相结合,重新思考需求功能
05. 不理解的技术点 跟老师沟通
06. 偏音视频客户端方向:服务器相关的内容以了解为主,比如SRS流媒体服务器,主要是理解推拉流框架、协议转换逻辑,不需要投入太多的时间阅读源码。
07. 偏流媒体服务器方向:涉及到UI界面的设计以了解为主,比如播放器项目只需要专注于音视频相关的内容。
8.5 解决音视频自学的难点
01. 音视频自学非常困难,网上通俗易懂的难找到
02. 网上资料版本较旧,比如FFmpeg3.x版本
03. 音视频涉及大量的开源库和协议,编译和理解都较难
04. 部分嵌入式音视频的朋友技术面窄,技术不深入
8.6 高薪就业
01. 学员offer展示链接
红色内容为2022年新增