如果你已经能用 C++ 写点东西,但一碰到「把摄像头画面送到服务器」就卡住,这门课针对的就是这段空白。它不讲 C++ 语法,也不讲 Qt 控件怎么摆,而是盯着一条具体的链路:采集 → 解码/转换 → 美颜 → 编码 → 推流。四五个环节里任何一环出问题,画面要么黑、要么花、要么延迟高得没法看。课程把这条链路拆开讲,每一段都能单独验证。

先确认自己缺的是哪一块

这门课的定位是补缺,不是扫盲。你可以先对照下面几条判断:

  • 用过 FFmpeg 命令行做转码,但没写过 avcodec、avformat 这一层的调用代码;
  • 知道 YUV 和 RGB 不一样,但说不清为什么解码出来的帧要先做颜色空间转换才能给 OpenCV 处理;
  • Qt5 界面能写,但不知道怎么让采集线程和渲染、推流线程不互相拖死;
  • 美颜只知道「磨皮」两个字,没想过它是在哪一步、对哪种格式的数据做运算。

如果这几条里中了两条以上,说明你缺的正是这门课覆盖的部分。反过来,如果你连 C++ 的类、指针、回调都不熟,先补语言本身,再来跟这条链路会更顺。

时间戳和帧格式,是两个绕不开的坎

整条推流链路里,最容易让人卡住的不是算法,而是两个看起来不起眼的东西。

第一是 pts。视频帧编码时要把时间戳填进 AVFrame,填错或漏填,本地看没问题,推出去就是播放器卡顿、音画不同步。课程里专门有一段讲视频帧编码时怎么按设置写入 pts,这类细节平时查文档容易看漏,但出问题时又极难定位。

第二是像素格式。摄像头出来的数据、解码器吐出来的数据、OpenCV 能吃的数据、编码器要求的数据,格式往往不一致。中间少了转换这一步,或者转换时把宽高、步长搞错,画面就会斜着裂开。课程会带着看一遍读取一帧视频的接口调用和源码走向,把解码到颜色转换这一段走通,而不是只给一个能跑的封装函数。

美颜放在管线的哪一步

很多人以为美颜是「加个滤镜」,实际在这条链路里,它是对特定格式的图像数据做像素级运算,做完还得转回编码器要的格式。放在解码前还是解码后、在 CPU 上做还是交给 GPU,直接决定帧率和 CPU 占用。课程把美颜嵌进完整的推流流程里讲,你能看到它为上下游让出了哪些约束——比如为什么某些处理必须在转换之后、编码之前完成。这部分理解了,换别的美颜方案也能自己接进去。

学完之后应该能回答的问题

  • 一帧画面从摄像头到推流服务器,中间经过了哪几次格式转换,每次转换的目的是什么?
  • 如果推流出去画面正常但播放端卡顿,你按什么顺序排查?
  • 采集、处理、编码三段如果放在同一个线程里,瓶颈会出现在哪?拆线程后共享数据要注意什么?
  • 美颜处理让帧率掉了一半,你会从哪几个方向去优化?

这些问题能答上来,说明你不是照着代码敲了一遍,而是真的把这条管线装进脑子里了。带着其中任意一个疑问去翻对应章节,比从头顺序看效率高得多。建议动手时准备两个摄像头或一段本地视频文件作为输入源,方便在采集环节出问题时快速排除是设备还是代码的原因。

【夏曹俊】C++编程FFMpegSDK美颜直播推流实战- 基于qt5,opencv视频课

Qt5+Opencv实现美颜直播推流

编辑点评

实战性强,深入讲解美颜直播推流技术,适合有C++基础并希望学习移动端直播开发的技术人员。

⭐ 编辑推荐

本课程由夏曹俊老师主讲,通过Qt5和Opencv技术,深入讲解美颜直播推流的全过程,从环境搭建到代码实现,实战性强。

课程亮点

• Qt5+Opencv技术实战
• 美颜直播推流技术解析
• 代码实现与调试技巧

课程目录

【夏曹俊】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在移动端的应用
实现美颜直播推流功能
提升直播开发技能

祝您学习愉快!

学有所成,前程似锦!