正版资源【夏曹俊】C++编程FFMpegSDK美颜直播推流实战-基于qt5,opencv视频课
这套资料的主题很明确:用 Qt5 做界面与线程调度,用 FFmpeg SDK 完成解封装、解码、编码与推流,用 OpenCV 处理图像并叠加美颜滤镜,最终把一路本地视频或摄像头数据推成 RTMP 流。它不是泛泛的 C++ 语法课,而是一条完整的工程链路,从打开设备到字节出网,中间每一段都有可对照的源
支付成功后自动发货,可在「我的订单」查看网盘链接;链接失效可联系客服免费补链。
这套资料的主题很明确:用 Qt5 做界面与线程调度,用 FFmpeg SDK 完成解封装、解码、编码与推流,用 OpenCV 处理图像并叠加美颜滤镜,最终把一路本地视频或摄像头数据推成 RTMP 流。它不是泛泛的 C++ 语法课,而是一条完整的工程链路,从打开设备到字节出网,中间每一段都有可对照的源码。
技术栈分工与调用关系
先理清三个库在工程里各自负责什么,后面看代码才不会乱。
- FFmpeg 负责容器与编解码:avformat 处理输入输出上下文与 RTMP 协议,avcodec 负责 H.264 解码与编码,swscale 完成像素格式转换(比如解码出的 YUV420P 转成 RGB 给 OpenCV 用,美颜后再转回 YUV 送编码器)。
- OpenCV 负责帧级图像运算:Mat 承载 BGR 数据,双边滤波、高斯模糊、灰度图与查找表(LUT)实现磨皮与肤色调整,这类滤镜本质是对每个像素做邻域加权,放在 OpenCV 里写比手写循环省事得多。
- Qt5 负责工程外壳:用 QThread 或 moveToThread 把采集与推流放到独立线程,避免阻塞 UI;信号槽用来在采集线程和编码线程之间传递帧数据与状态,QTimer 控制帧率节奏。
三者之间的边界就是内存缓冲区。搞清楚一帧数据在哪个阶段是 AVFrame、哪个阶段是 cv::Mat、什么时候需要 av_frame_clone 或 memcpy,是这套代码能不能跑稳的关键。
可复用的模块划分
按功能切,这套工程大致能拆成几块可独立搬运的代码:
- 采集模块:输入源既可能是本地文件,也可能是摄像头设备,封装成一个统一的取帧接口,向上只暴露“给我下一帧”,这样换源时不用动后面的编码逻辑。
- 解码与颜色转换模块:读取一帧压缩包,送入解码器,拿到 AVFrame 后统一转成 OpenCV 能吃的格式。这部分重点看时间基(time_base)和 pts 的处理,转错会导致音画不同步或推流端报时间戳异常。
- 美颜滤镜模块:磨皮、美白、可选的瘦脸类几何变换,做成可串联的滤镜链,参数从配置读入,方便调试时单独开关某一层看效果。
- 编码与推流模块:设置编码器参数(分辨率、码率、GOP、preset),把处理后的帧送入编码器,取出 AVPacket 写入输出上下文。这里要留意 FLV/RTMP 对 H.264 的封装要求,SPS/PPS 要正确写入 extradata 或作为全局头发送。
- 线程与队列模块:生产者—消费者模型,采集端生产,编码端消费,中间用带锁队列缓冲,防止推流卡顿时丢帧或内存暴涨。
几个容易踩坑的工程点
对照源码实践时,下面几处值得反复看:AVFrame 的引用计数与释放时机,用错会内存泄漏或野指针;解码与编码两端的像素格式必须匹配,sws_getContext 的参数写反是最常见的花屏原因;pts 要按目标帧率重新计算,直接沿用解码时间戳会让推流端判定为异常;Qt 跨线程传自定义结构体需要 qRegisterMetaType,否则信号槽静默失败。这些问题在代码里都有对应处理,看的时候不要只跑通就过,最好把参数改坏一次,观察现象,理解为什么这么写。
自学路径建议
如果 C++ 基础还在,先把 std::thread、智能指针和 RAII 补上,再进入这套资料会轻松很多。学习顺序建议按数据流走:先单独跑通“读文件—解码—显示”,确认能拿到画面;再接入 OpenCV 做单帧美颜,肉眼比对前后差异;然后把处理后的帧重新编码写成本地文件,验证编码参数;最后才换成 RTMP 输出并在播放器里验证。每一步都能单独验证,出问题时定位范围小。资料里的视频片段按这个顺序拆解了接口调用与源码分析,适合边看边改,不要只当视频刷完。真正有价值的是把滤镜链和线程队列这两块抽出来,移植到自己项目里。
【夏曹俊】C++编程FFMpegSDK美颜直播推流实战-基于qt5,opencv视频课
Qt5+Opencv+FFmpeg美颜直播推流实战
编辑点评
实战性强,系统讲解美颜直播推流技术,适合有C++基础的开发者。
⭐ 编辑推荐
本课程由资深开发者夏曹俊主讲,深入浅出地讲解Qt5、Opencv和FFmpeg在美颜直播推流中的应用。
✨ 课程亮点
课程目录
课程目录68 集
- 【夏曹俊】C++编程FFMpegSDK美颜直播推流实战-基于qt5,opencv视频课资料.png [493.5 KB]
- 5-07、视频帧编码并根据设置AVFrame的输入pts_ev.mp4 [28.5 MB]
- 4-05、读取一帧视频接口讲解和源码分析,分析读取解码和颜色转换过程_ev.mp4 [17.7 MB]
- 4-04、VideoCapture打开摄像头接口讲解和源码分析_ev.mp4 [12.8 MB]
- 1-03、直播rtmp协议分析_ev.mp4 [17.1 MB]
- 4-03、遍历修改连续的Mat图像空间_ev.mp4 [19.2 MB]
- 5-05、查找编码器并创建编码器上下文_ev.mp4 [24.4 MB]
- 5-02、基于opencv采集rtsp流并使用异常处理失败流程_ev.mp4 [35.2 MB]
- 4-01、opencv源码在windows下载编译安装_ev.mp4 [14.4 MB]
- 5-01、opencv播放rtsp海康摄像头和播放系统摄像头_ev.mp4 [30.4 MB]
- 7-05、XAudioRecord集成数据基类重构_ev_ev.mp4 [25.1 MB]
- 8-09、QT直播推流项目完成界面设计_ev_ev.mp4 [33.9 MB]
- 5-14、完成了视频编码接口并重构rtsp_to_rtmp代码_ev.mp4 [28.5 MB]
- 7-04、XDataThread数据处理线程类创建并实现_ev_ev.mp4 [29.9 MB]
- 7-07、完成音视频推流封装处理未同步_ev_ev.mp4 [39.4 MB]
- 6-10、封装音频编码器设置接口重构视频编码器接口_ev.mp4 [25.0 MB]
- 6-05、音频重采样空间分配并完成重采样_ev_ev.mp4 [25.5 MB]
- 8-02、双边滤波磨皮算法调用并测试性能_ev_ev.mp4 [32.3 MB]
- 7-03、封装视频录制接口完成初始化和关闭接口_ev_ev.mp4 [29.8 MB]
- 3-04、打开rtmp推流输出并从文件读取音视频帧_ev.mp4 [41.9 MB]
- 2-04、nginx-rtmp直播和直播状态监听配置ffplay播放_ev.mp4 [25.7 MB]
- 1-02、直播推流流程分析讲解_ev_ev.mp4 [11.2 MB]
- 5-15、创建XRtmp接口类完成封装器接口_ev.mp4 [59.4 MB]
- 4-02、windows 上创建opencv示例项目_ev.mp4 [21.0 MB]
- 8-03、直播框架添加图像过滤XFilter接口并实现双边滤波磨皮类_ev_ev.mp4 [39.9 MB]
- 3-07、推流基于rtsp协议的大华海康相机_ev.mp4 [61.6 MB]
- 8-06、完成了XController音视频录制模块初始化_ev_ev.mp4 [37.0 MB]
- 7-01、封装音频XAudioRecord初始化和关闭接口_ev_ev.mp4 [29.1 MB]
- 6-12、完成音频推流接口XRtmp封装重构音频推流_ev_ev.mp4 [34.6 MB]
- 5-08、创建封装器添加视频AVStream并设置参数_ev.mp4 [28.8 MB]
- 8-01、磨皮双边滤波算法参数说明_ev_ev.mp4 [18.1 MB]
- 2-01、直播服务器介绍crtmpserver编译运行(ubuntu)_ev.mp4 [31.1 MB]
- 5-13、完成视频编码器初始化InitVideoCodec接口封装_ev.mp4 [23.1 MB]
- 8-04、直播框架添加美颜磨皮_ev_ev.mp4 [21.3 MB]
- 6-01、QT5开发环境准备_ev.mp4 [25.0 MB]
- 6-03、QT音频录制接口讲解并编写录制音频程序_ev.mp4 [24.8 MB]
- 5-06、编码器参数配置(包括打开多线程编码)并打开编码器_ev.mp4 [36.5 MB]
- 5-03、像素格式转换(RGBToYUV)上下文创建配置和清理_ev.mp4 [41.5 MB]
- 1-01、课程介绍_ev_ev.mp4 [20.0 MB]
- 6-09、音频重采样XMediaEncode重采样接口封装代码重构_ev.mp4 [51.0 MB]
- 7-10、音视频同步二解决音频有相同pts情况_ev_ev.mp4 [24.5 MB]
- 5-11、完成InitScale初始化像素格式转换接口_ev.mp4 [20.3 MB]
- 7-09、音视频同步时间计算代码分析第一部分_ev_ev.mp4 [68.9 MB]
- 6-02、音频基础知识音频参数分析_ev.mp4 [25.2 MB]
- 3-02、初始化封装和网络库打开音视频流并打印调试信息_ev.mp4 [41.6 MB]
- 3-01、ffmpegSDK开发环境准备,第一个ffmpeg项目创建_ev.mp4 [41.2 MB]
- 6-07、音频的pts运算音频数据编码测试_ev_ev.mp4 [17.5 MB]
- 6-06、音频编码器创建和参数设置_ev_ev.mp4 [23.3 MB]
- 2-03、nginx-rtmp源码下载、编译运行(ubuntu)_ev.mp4 [25.3 MB]
- 5-10、XMediaEndcode工厂生产方法创建_ev.mp4 [21.0 MB]
- 7-06、加入视频编码器和流_ev_ev.mp4 [27.7 MB]
- 6-04、音频重采样上下文创建和配置_ev.mp4 [27.0 MB]
- 3-05、AVPacket的pts运算并完成帧推送使用vlc测试_ev.mp4 [29.5 MB]
- 5-12、完成RGBToYUV接口封装并重构代码_ev.mp4 [30.4 MB]
- 7-02、完成音频录制接口,录制缓冲队列处理_ev_ev.mp4 [50.4 MB]
- 5-09、打开推流IO,发送封装头,计算pts完成帧推流_ev.mp4 [34.6 MB]
- 5-04、rgb转yuv空间分配和转换函数调用_ev.mp4 [47.5 MB]
- 2-02、下载ffmpeg工具推流并使用功能vlc拉流播放测试_ev.mp4 [20.8 MB]
- 8-05、XRtmpStreamer项目框架架构(类图)讲解_ev_ev.mp4 [12.1 MB]
- 7-11、音视频同步三完成同步_ev_ev.mp4 [18.6 MB]
- 3-06、根据pts和系统记时控制推流速度_浏览器flash播放直播流_ev.mp4 [39.8 MB]
- 6-08、完成音频推流并测试_ev.mp4 [31.4 MB]
- 7-08、音频推流同步策略分析_ev_ev.mp4 [17.1 MB]
- 8-10、完成了qt项目直播推流_ev_ev.mp4 [44.4 MB]
- 6-11、完成音频编码接口封装和代码重构_ev_ev.mp4 [22.3 MB]
- 8-08、XController推流数据线程完成_ev_ev.mp4 [48.6 MB]
- 8-07、完成XController中的编码封装推流模块初始化_ev_ev.mp4 [47.5 MB]
- 3-03、完成输出音视频流配置信息,使用ffmpeg新版本属性_ev.mp4 [45.6 MB]
适合人群
- C++开发者
- 移动应用开发者
- 对美颜直播推流感兴趣的学习者
🎯 学习收获
- 掌握Qt5、Opencv和FFmpeg的使用
- 实现美颜直播推流功能
- 提升C++编程能力
🎉 祝您学习愉快!




