FFmpeg项目实战专栏v6.0
零声教育Darren
2023-05-18
腾讯课堂 零声教育 FFmpeg项目实战专栏课程v6.0 全网唯一支持FFmpeg6.0的音视频教程 兼容FFmpeg4.2版本 三大实战项目: 1.播放器、2.录制推流、3.直播拉流 音视频基础 FFmpeg基石 FFmpeg流媒体项目实战 零声服务 1.3 解复用基础知识 1.2 视频基础知识 1.1 音频基础知识 2.1 FFmpeg命令 2.3 FFmpeg基石精讲 4.2 FFmpeg RTMP录制+推流_0voice录制推流项目 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等 6.1 适宜工程师人群 6.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 FFmpeg6.0开发环境搭建 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的目的: 1.快速掌握FFmpeg能做什么; 2.加深对音视频的理解。 注:目的熟悉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编码互转 01. RTMP协议简介 02. 录制+推流框架分析 03. 麦克风、系统声音捕获 05. 摄像头、屏幕画面捕获 06. 画面捕获延迟分析和解决 09. AAC编码器封装 10. H264编码器封装 12. 视频编码画质/CPU/码率/延迟优化 21. RTMP推流是否会导致延迟 22. RTMP推流如何动态调整码率 23. RTMP推流如何动态调整帧率 项目意义: 本项目推流模块采用librtmp+FFmpeg API。掌握推流框架和 视频录制框架,包括音视频采集、模块划分、 音视频同步、编码优化、推流延迟等核心技术。 项目实践 5.1自研项目和源码分析 01. SDL音频播放 02. SDL视频播放 03. FFmpeg内存引用计数 04. MP4/FLV/TS解复用 05. 提取H264 06. 提取AAC 07. H264/H265解码 08. AAC/MP3解码 09. AVIO内存输入模式 10. 音频重采样 11. 视频尺寸格式变换 12. DXVA2解码 13. NVDEC解码 14. CUVID解码 15. QSV解码 16. AAC编码优化 17. H264编码优化 18. H265编码优化 19. AAC转MP3 20. H264转H265 21. DXVA2硬件编码 22. NVENC硬件编码 23. CUVID硬件编码 24. QSV硬件编码 25. MP4合成 26. FLV合成 27. 多路音频混音 28. 视频添加水印 29. 视频区域裁剪 30. 视频翻转 31. 视频添加logo 32. ffplay播放器 33. 自研 QT播放器 34. RTMP推流 35. RTMP拉流 38. HLS拉流 36. RTSP推流 37. RTSP拉流 01. 从事音视频岗位开发,但没有时间系统学习的在职工程师 02. 从事嵌入式方向开发,想转入音视频开发的在职工程师 03. 从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师 04. 从事Android/IOS移动开发,想往音视频方向发展的在职工程师 05. 从事C/C++后台开发,想往流媒体服务器方向发展的在职工程师 06. 自己研究学习速度较慢,不能系统构建音视频知识体系的开发人员 07. 计算机相关专业想进入大厂的在校生(本科及以上学历) 01. 80+小时课程,支持FFmpeg6.0 02. 老师答疑 工作问题 课程问题 03. 班主任督学 作业统计 博客统计 6.4 学习方法 01. 先看文档再看视频 02. 先把课程代码运行调试,然后修改调试, 最后自己尝试重写 03. 每节课的知识点总结成技术博客(每月有 博客大赛,有奖金支持) 04. 课程与工作相结合,重新思考需求功能 05. 不理解的技术点 跟老师沟通 06. 偏音视频客户端方向:服务器相关的内容以 了解为主,比如SRS流媒体服务器,主要是理解 推拉流框架、协议转换逻辑,不需要投入太多 的时间阅读源码。 07. 偏流媒体服务器方向:涉及到UI界面的设计 以了解为主,比如播放器项目只需要专注于音 视频相关的内容。 6.3 面试跳槽 01. 简历梳理 技术点凸显 项目技术梳理 02. 模拟面试 技术表述 项目重点 03. 薪资谈判 福利争取 公司背调 04. offer选择 职业规划 技术前景 6.6 高薪就业 01. 学员offer展示链接 6.5 解决音视频自学的难点 01. 音视频自学非常困难,网上通俗易懂的难找到 02. 网上资料版本较旧,比如FFmpeg3.x版本 03. 音视频涉及大量的开源库和协议,编译和理解都较难 04. 部分嵌入式音视频的朋友技术面窄,技术不深入 4.1 FFmpeg+QT_0voice播放器项目 01.开源播放器分析 02. 自研框架分析 03. 播放器模块划分 04. 解复用模块 05. 音视频解码 06. 播放器控制 07. 音视频同步 08. 软件解码+硬件解码 09. 音量控制 10. 变速播放 15. 画面旋转、翻转 12. 画面亮度、饱和度调节 13. 画面4:3 16:9切换 14. 码流信息分析 4.3 FFmpeg RTMP拉流+录像_0voice低延迟拉流直播项目 01. RTMP协议简介 02. 拉流+录像框架分析 04. AAC解码模块封装 05. H264解码模块封装 06. 包队列设计 07. 帧队列设计 08. 实现音视频同步 09. 能否不做音视频同步分析 10. 没有MetaData能否播放 11. RTMP拉流是否会导致延迟 12. 如何检测RTMP拉流延迟 13. 如何解决RTMP播放延迟 17. ffplay、vlc能否用来测试播放延迟 注: 掌握RTMP直播拉流+录像框架,包括拉流、队列设计、音视频同 步、低延迟、保存为MP4文件等核心技术。 04. 声音捕获延迟分析和解决 11. 音频编码参数优化 14. 采集-编码-推流时间戳转换 13. 音频、视频采集时如何设置时间戳 15. 将音频、视频保存为MP4文件 16. 采集-编码-保存mp4时间戳转换 项目意义:掌握播放器的开发,包括播放器框架分析、 模块设计、队列设计、音视频同步、变速、拖动播放 等核心机制。 11. 拖动跳转播放 07. 音频重采样 08. 视频scale 18. 如何支持H265推流 24. Web端能否拉取RTMP推流 03. 拉流模块封装 14. 添加支持变速播放 16. 秒开功能原理分析与实现 15. 变速播放策略分析和设置 18. 实现拉流、保存视频为MP4 19. 拉流、保存MP4时间戳转换 4.4 RTSP推流+录制项目 0.2 基于RTMP推流项目实现RTSP推流+录制 17. 支持推流画面预览 19. 如何支持麦克风和系统声音混音 20. 实现音频采集降噪 16. 支持截屏 01. RTSP协议简介 4.5 RTSP拉流+录像项目 0.2 基于RTMP拉流项目实现RTSP拉流+录像 01. RTSP协议简介 项目意义: 本项目推流模块采用FFmpeg API。 掌握推流框架和视频录制框架,包括音视频采集、模块划分、 音视频同步、编码优化、推流延迟等核心技术。 注: 掌握RTSP拉流+录像框架,包括拉流、队列设计、音视频同步、 低延迟、保存为MP4文件等核心技术。 FFmpeg进阶 3.1 FFmpeg过滤器 3.2 ffplay播放器 01. FFmpeg过滤chain框架 02. 音频过滤器框架 03. 视频过滤器框架 04. 多路音频混音amix 05. 视频水印watermark 06. 视频区域裁剪和翻转 07. 视频添加logo 注: filter在视频剪辑领域应用广泛。 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 对于我们自己开发播放器有事半功倍的效果。 6.7 进阶扩展 0.1 流媒体服务器进一步补充学习 0.2 WebRTC进一步补充学习 超链接2https://www.yuque.com/lingshengxueyuan/0voice/rw8cgz#lmRCO