音视频流媒体高级开发课程-第六代大纲
零声教育 Darren
2025-02-14
课程购买地址
音视频高级开发课程
零声教育
音视频流媒体高级开发课程V6.0
音视频基础
FFmpeg实战
流媒体客户端
流媒体服务器
WebRTC项目实战
零声服务
1.3 解复用基础知识
1.2 视频基础知识
1.1 音频基础知识
2.1 FFmpeg命令
2.3 FFmpeg基石精讲
3.1 RTMP推拉流项目实战(自研项目实战)
4.1 SRS 3.0源码剖析
5.1 WebRTC中级一对一音视频通话(自研项目实战)
5.2 WebRTC高级-MESH模型多人通话(自研项目实战)
01. 如何采集声音-模数转换原理
02. 视频YUV/H264文件提取
03. 解复用、复用
04. 音视频录制
05. 视频裁剪和合并
06. 图片/视频转换
07. 直播推流和拉流
08. 水印/画中画/九宫格滤镜
01. FFmpeg框架
02. FFmpeg内存引用计数模型
04. 编解码相关AVCodec XXX等
05. 压缩数据AVPacket
06. 未压缩数据AVFrame
07. FFmpeg面向对象思想
08. Packet/Frame数据零拷贝
01. 音频PCM/AAC文件提取
03. 解复用相关AVFormat XXX等
5.3 WebRTC高级-Janus SFU模型多人通话(自研项目实战)
5.4 WebRTC高级开发-SRS 4.0/5.0源码分析
8.1 适宜工程师人群
8.2 授课方式
02. 为什么高品质音频采样率>=44.1Khz
03. 什么是PCM
04. 一个采样点用多少位表示
05. 采样值用整数还是浮点数表示
06. 音量大小和采样值大关系
07. 多少个采样点作为一帧数据
08. 左右通道的采样数据如何排列
09. 什么是PCM(脉冲编码调制)
10. 音频编码原理
01. RGB彩色原理
02. 为什么需要YUV格式
03. 什么是像素
04. 分辨率、帧率、码率
05. YUV数据存储格式区别
06. YUV内存对齐问题
07. 为什么画面显示绿屏
08. H264编码原理
09. H264 I P B帧的关系
01. 什么是解复用,比如MP4格式
02. 为什么需要不同的复用格式MP4/FLV/TS
03. 常见的复用格式MP4/FLV/TS
1.4 FFmpeg开发环境搭建
01. Windows、Ubuntu、MAC三大平台
02. QT安装
03. FFmpeg命令行环境
04. FFmpeg API环境
05. FFmpeg编译
06. vs2019安装(win平台)
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
2.2 SDL跨平台多媒体开发库实战
01. SDL环境搭建
02. SDL事件处理
03. SDL线程处理
04. 视频YUV画面渲染
05. 音频PCM声音输出
注:SDL兼容Win、Ubuntu、Mac三大平台,
主要用于后续项目的画面显示和声音输出
注:掌握FFmpeg命令的目的:
注:目的熟悉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排列格式问题
18. 硬件解码dxva2/nvdec/cuvid/qsv
19. 硬件gpu数据转移到cpu
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内存对齐问题
13. 硬件编码dxva2/nvenc/cuvid/qsv
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命令的源码,b站播放器也是基于这个源码二次开发。
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的目的:
2.9 FFmpeg+QT播放器(自研项目实战)
01. 播放器讲解
02. 播放器框架分析
03. 播放器模块划分
04. 解复用模块
05. 音视频解码
06. 播放器控制
07. 音视频同步
08. dxva2硬解
09. 音量频谱展示
10. 音频均衡器
11. 画面旋转、翻转
12. 画面亮度、饱和度调节
13. 画面4:3 16:9切换
14. 码流信息分析
注: 该项目难度较大:
2.10 OBS二次开发-录制推流项目(自研项目实战)
01. OBS vs2019+QT5.15.2编译
02. 音频配置和初始化分析
03. 音频线程模块采集和编码分析
04. 视频配置和初始化分析
05. 视频线程模块采集和编码分析
06. OBS初始化过程分析
07. 录制流程分析
08. 麦克风采集分析
09. 桌面采集分析
10. X264编码分析
11. 系统声音+麦克风混音
12. 推流模块分析
注: 该项目难度较大:
01. RTMP协议分析
02. wireshark抓包分析
03. H264 RTMP封装
04. AAC RTMP封装
05. RTMP拉流实战
06. H264 RTMP解析
07. AAC RTMP解析
08. RTMP推流实战
09. 没有MetaData能否播放
10. RTMP推流是否会导致延迟
11. RTMP推流如何动态调整码率
12. RTMP推流如何动态调整帧率
13. RTMP拉流是否会导致延迟
14. 如何检测RTMP拉流延迟
15. 如何解决RTMP播放延迟
16. ffplay、vlc能否用来测试播放延迟
17. RTMP拉流播放变速策略设置
注: RTMP推拉流流媒体必学项目。
3.3 RTSP流媒体实战(自研项目实战)
3.2 HLS拉流分析
01. HLS协议分析
02. HTTP协议分析
03. TS格式分析
04. m3u8文件解析
05. wireshark抓包分析
06. HLS拉流实战
07. FFmpeg HLS源码分析
08. HLS多码率机制
09. 如何解决HLS延迟高的问题
注: 理解HLS的拉流机制,有助解决HLS播放延迟较高的问题
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也有应用。
01. 整体框架分析
02. RTMP推流分析
03. RTMP拉流分析
04. HLS拉流分析
05. HTTP-FLV拉流分析
06. FFmpeg转码分析
07. 首屏秒开技术分析
08. forward集群源码分析
09. edge集群源码分析
10. 负载均衡部署方式
11. 连接和协程的关系
11. 如何更快速掌握SRS源码
12. 流媒体服务器是否导致延迟
13. 如何降低流媒体服务器的延迟
14. 怎么获取流媒体服务器推流信息
15. 怎么获取流媒体服务器拉流信息
16. 首屏秒开能降低延迟吗
17. 推流->服务器转发->拉流延迟分析
注:对于SRS流媒体服务器,我们长期更新,从3.0->4.0->5.0。
4.2 ZLMediaKit源码剖析
01. 整体框架分析
02. 线程模块划分
03. RTSP推流连接处理
04. RTSP拉流连接处理
05. 数据转发模型
06. SDP解析
07. RTP H264解析
08. RTP AAC解析
注:ZLMediaKit讲解RTSP,其他模块RTMP/HLS等参考SRS。
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建议:
01. 自定义摄像头分辨率
02. 码率限制
03. 调整编码器顺序
04. Mesh模型多方通话分析
05. 多人通话信令服务器开发
06. 动态分配stun/turn服务器
07. Web客户端源码
08. Android客户端源码
01. Janus框架分析
02. Janus信令设计
03. 基于Janus实现会议系统
04. Janus Web客户端源码分析
05. Janus Android客户端源码分析
06. Janus Windows客户端源码分析
07. 基于Full ICE的部署
08. 基于Lite ICE的部署
09. Full ICE和Lite ICE的区别
10. 发布订阅模型
注:Janus是一个非常出名的SFU WebRTC服务器
01. RTMP转发WebRTC逻辑
02. WebRTC转发RTMP逻辑
03. WebRTC音视频一对一通话
04. WebRTC多人通话
05. WebRTC SFU模型分析
06. SRTP分析
07. RTCP分析
08. SDP分析
09. NACK分析
10. stun分析
注:SRS著名的流媒体服务器,社区非常活跃。
Android NDK开发
6.1 Android NDK开发基础
01. So库适配总结
02. GDB调试技巧
03. Makefile工程组织
04. CMake工程组织
05. 生成指定CPU平台的so库
06. JNI基础和接口生成
07. JNI Native层构建 Java 对象
08. JNI异常处理
6.2 Android FFmpeg编译和应用
01. 编译x264
02. 编译x265
03. 编译mp3
04. 编译fdk-aac
05. 编译FFmpeg
06. 使用ffmpeg实现mp4转格式
07. 使用FFmpeg开发播放器
6.3 Android RTMP推拉流(自研项目实战)
01. RTMP推流协议实现
02. RTMP拉流协议实现
03. RTMP拉流音视频同步
04. MediaCodec硬件编码
05. MediaCodec硬件解码
06. OpenSL ES播放音频数据
08. OpenGL ES Shader显示视频
6.4 Android Ijkplayer源码分析(开源项目实战)
01. 编译ijkplayer和实践
02. 项目框架分析
03. 播放状态转换
04. 拉流分析
05. 解码分析
06. 音频播放流程
07. 视频渲染流程
08. OpenSL ES播放音频数据
09. MediaCodec硬件解码
10. OpenGL ES Shader显示视频
11. 变速播放实现原理
12. 低延迟播放实现
13. 缓存队列设计机制分析
课程重点项目
1 开源项目实战简介,详情见具体章节
2.7 ffplay播放器(开源项目实战)
2.8 ffmpeg多媒体视频处理工具(开源项目实战)
6.4 Android Ijkplayer源码分析(开源项目实战)
2 自研项目实战简介,详情见具体章节
2.9 FFmpeg+QT播放器(自研项目实战)
2.10 OBS二次开发-录制推流项目(自研项目实战)
6.3 Android RTMP推拉流(自研项目实战)
5.2 WebRTC高级-MESH模型多人通话(自研项目实战)
3.1 RTMP推拉流项目实战(自研项目实战)
3.3 RTSP流媒体实战(自研项目实战)
5.3 WebRTC高级-Janus SFU模型多人通话(自研项目实战)
5.1 WebRTC中级一对一音视频通话(自研项目实战)
01. 从事音视频岗位开发,但没有时间系统学习的在职工程师
02. 从事嵌入式方向开发,想转入音视频开发的在职工程师
03. 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师
04. 从事Android/IOS移动开发,想往音视频方向发展的在职工程师
05. 从事C/C++后台开发,想往流媒体服务器方向发展的在职工程师
06. 自己研究学习速度较慢,不能系统构建音视频知识体系的开发人员
07. 计算机相关专业想进入大厂的在校生(本科及以上学历)
01. 200+小时课程,每年有内容更新
02. 老师答疑 工作问题 课程问题
03. 班主任督学 作业统计 博客统计
8.4 学习方法
01. 先看文档再看视频
02. 先把课程代码运行调试,然后修改调试,最后自己尝试重写
03. 每节课的知识点总结成技术博客(每月有博客
大赛,有奖金支持)
04. 课程与工作相结合,重新思考需求功能
05. 不理解的技术点 跟老师沟通
06. 偏音视频客户端方向:
07. 偏流媒体服务器方向:
8.3 面试跳槽
01. 简历梳理 技术点凸显 项目技术梳理
02. 模拟面试 技术表述 项目重点
03. 薪资谈判 福利争取 公司背调
04. offer选择 职业规划 技术前景
8.6 高薪就业
01. 学员offer展示链接
8.5 解决音视频自学的难点
01. 音视频自学非常困难,网上通俗易懂的难找到
02. 网上资料版本较旧,比如FFmpeg3.x版本
03. 音视频涉及大量的开源库和协议,编译和理解都较难
04. 部分嵌入式音视频的朋友技术面窄,技术不深入
提供项目配套面试题
IOS音视频开发v1.0
7.1 FFmpeg 6.0 MAC编译
01. xcode调试FFmpeg
02. QT调试FFmpeg,通用的
FFmpeg知识学习在Mac平台
03. IOS调用FFmpeg
7.2 IOS FFmpeg RTMP推拉流
7.3 Videooolbox硬件编解码
7.4 IOS ijkplayer编译和应用
01. 本地视频播放
02. RTMP拉流播放
03. HTTP点播
04. 音频播放流程
05. 视频渲染流程
01. AVFoundation 视频采集
02. Metal 视频渲染
03. Audio Unit 音频采集
04. Audio Unit 音频播放
05. FFmpeg推流
0.6 FFmpeg拉流
01. VideoToolbox框架的流程
03. CVPixelBuffer 解析
04. 如何获取SPS/PPS信息
05. 判断是否关键帧
02. 硬件编解码步骤
06. 编码参数优化
07. 直播延迟和解决方法
7.5 IOS WebRTC音视频通话
01. 一对一通话
02. 多人通话
18. 音频降噪
19.本地保存
红色为自研项目
紫色为开源项目
3 项目说明
1. 项目均串联课程技术点来实现
2. 项目可写入简历,运用到工作相同业务中去
3. 项目只是技术的容器,技能掌握后,可以包装 换场景 换需求 换名字
1.快速掌握FFmpeg能做什么;
2.加深对音视频的理解。
遇到命令行会但不会写代码时可以debug ffmpeg命令行跟踪学习
1.手把手实现大部分功能;
2.少部分功能老师提供技术支持。
1.供深入推流项目的学员参考;
2.提供编译视频以及基本应用的视频。
1.从web端入手,可以直接调用js接口;
2.对WebRTC通话流程有清晰的理解再考虑其他端。
不少企业基于该开源项目做二次开发,比如学霸君。
服务器相关的内容以了解为主
比如SRS流媒体服务器
有了一对一通话基础后,还要进一步掌握多人通话
ffplay是FFmpeg自带的播放器源码
各大互联网公司的播放器都有参考ffplay播放器的框架
比如B站的ijkplayer就是基于ffplay开发的
所以掌握ffplay播放器非常有必要。
ffmpeg命令是FFmpeg自带的多媒体处理工具
支持封装格式/编码格式转换,裁剪/拼接视频,声音/画面处理等功能
有些功能用命令行可以实现但不会用API实现时,比如拼接功能
我们就可以debug ffmepg.c,调用了哪些API,然后借鉴到项目里
这是B站的开源播放器,基于ffplay二次开发,但功能更完善,比如:
变速播放
点播卡顿处理
硬件解码等等
这个项目不只适合Android,也适合Windows/IOS开发者学习
播放器是音视频开发必须掌握的项目
是音视频应用最广泛的项目
抖音/B站/视频号等都需要播放器
新能源汽车的流媒体后视镜都是播放功能的体现
播放器的需求无处不在
RTSP里涉及的RTP/RTCP/SDP等技术也适用于WebRTC
有些安防从业者只会调用海康/大华等公司的SDK,
只会调用SDK不懂原理是很难涨薪,很难跳到更高一级别公司
OBS是开源的录制推流软件
基于OBS可以快速开发稳定的录制推流软件
各大互联网公司PC端的直播软件都是基于OBS做二次开发
OBS也很多功能也是调用FFmpeg API实现
学习OBS也有利于我们进一步掌握FFmpeg
RTMP是直播领域应用最广泛的流媒体协议
掌握RTMP流媒体协议
掌握音视频采集/视频编码调优/直播推流录制
掌握保存到本地/低延迟播放等技术。
如果有节省服务器带宽的需求,需考虑使用MESH模型。
WebRTC集音视频技术大成,可以持续深入学习
WebRTC不只适用于音视频通话,不少互联网大厂在用WebRTC开发:
低延迟播放器
云游戏
音视频要想拿高薪,非常有必要学WebRTC
当前项目支持Web/Android/Windows C++三种客户端
MESH模型只适合小规模多人通话(建议不超过6人)
人多了推流压力太大,此时就需要考虑使用SFU模式
SFU模式还有一个好处是便于在服务端录制视频会话内容
我们不只需要Windows端的推拉流软件,也需要Android端的
Android端相比Windows,体现在采集/硬件编解码/渲染接口的不同
其他流程(比如推流协议和方式)和Window端是一致的。
主要理解推拉流框架、协议转换逻辑
不需要投入太多的时间阅读源码。
涉及到UI界面的设计以了解为主
比如播放器项目只需要专注于音视频相关的内容。