从套接字到流媒体:补齐 C++ 音视频开发的最后一块拼图
很多开发者卡在音视频领域,不是因为不懂 Qt 界面,而是底层网络与编码原理是一团迷雾。这门课的核心价值,在于把“网络通讯”和“流媒体”从黑盒变成白盒。它从 Unix 系统编程讲起,覆盖进程、线程、Socket 套接字,再深入到 TCP 协议栈、字节对齐、私有协议设计。你以为自己在用库,其实这门课教你从头写一套多用户、高并发的流媒体服务器,理解数据在网卡和内存之间如何流转。
适合有一定 C++ 基础、想向音视频或实时通讯方向转岗的学习者。如果你只会调库,遇到卡顿、掉线、花屏无从下手,这门课就是为你准备的。建议先看前两部分:Unix 系统编程与网络通讯基础、流媒体协议本质。这是地基,跳过这两块,后面的 FFmpeg 和 OpenGL 渲染你会看得云里雾里。
客户端渲染与封装:从解码到写入 MP4
进入实战阶段,课程转向 Qt/C++ 流媒体客户端开发。这里有一个关键能力缺口:很多人知道用 FFmpeg 解码,但不知道怎么高效渲染。课程详细讲解 OpenGL ES、YUV 转 RGB、视频帧渲染流程,解决画面卡顿和同步问题。同时,深入 H.264 编码原理——I/P/B 帧、GOP 结构、NALU 解析,以及 AAC/ADTS 封装。
你将学会如何用 mp4Box 将 H.264 和 AAC 封装成 MP4 文件,理解 SPS/PPS 的作用。这部分内容直接对应面试中的“实时推流”和“本地录制”场景。资料包配合练习时,不要只看视频,要亲手实现一次从采集、编码、发送到本地存储的完整链路。只有亲手写过缓冲队列和编码器配置,才算真正掌握。
学完能做什么:独立构建实时通讯系统
完成这门课,你应能独立回答以下问题:TCP 三次握手在阻塞与非阻塞 Socket 下有何不同?H.264 的 NALU 单元如何解析?FFmpeg 解码后的 YUV 数据如何通过 OpenGL 高效显示?RTMP/WebRTC 协议在传输层有何差异?
你能做的事:开发一个支持多用户的流媒体服务器;实现一个基于 Qt 的音视频播放器,支持硬件加速渲染;编写一个简单的推流客户端,将摄像头画面编码后通过 RTMP 推送;处理音视频同步与帧率控制。资料包中的示例代码是练习素材,不是答案。建议关闭视频,先自己实现 Socket 通信和基础解码,再对照代码查漏补缺。音视频开发门槛高,但这门课帮你跨过从“会调用”到“懂原理”的门槛。
课程介绍
QT.jpg 2024-9-21 10:36 上传 课程内容: 1 Unix系统编程,网络通讯编程基础. unix系统I/O,进程,进程间通讯,线程,socket套接字. 2 音视频流媒体协议基础,协议的本质,深入TCP协议栈,socket接口,自定义私有协议,大小端字节对齐.从0开始写一套多用户,高并发,可伸缩扩展的流媒体服务器。音视频采集,x264编码,视频发送缓冲队列.高并发多用户流媒体架构设计. 3 Qt c/c++流媒体客户端开发,FFmpeg解码,OpenGLES 视频渲染,OpenGL YUV转RGB, 图像渲染等. 4 H264 AAC封装mp4,详解H264编码原理, I P B帧, GOP H.264 NALU 解析与拆分, mp4Box. SPS, PPS, AAC ADTS, FFmpeg实时写H.264. 5 RTMP开发实践
课程目录
QT.jpg 2024-9-21 10:36 上传 课程内容: 1 Unix系统编程,网络通讯编程基础. unix系统I/O,进程,进程间通讯,线程,socket套接字. 2 音视频流媒体协议基础,协议的本质,深入TCP协议栈,socket接口,自定义私有协议,大小端字节对齐.从0开始写一套多用户,高并发,可伸缩扩展的流媒体服务器。音视频采集,x264编码,视频发送缓冲队列.高并发多用户流媒体架构设计. 3 Qt c/c++流媒体客户端开发,FFmpeg解码,OpenGLES 视频渲染,OpenGL YUV转RGB, 图像渲染等. 4 H264 AAC封装mp4,详解H264编码原理, I P B帧, GOP H.264 NALU 解析与拆分, mp4Box. SPS, PPS, AAC ADTS, FFmpeg实时写H.264. 5 RTMP开发实践,RTMP协议详解,chunk分块技术. FLV格式. SRS流媒体服务器,RTMP实时推流。FDK-AAC实时编码推流. 6 RTSP开发实践. RTSP协议 SDP信令. RTP/RTCP协议. live555开发框架. 开发一套基于摄像头采集x264编码的RTSP实时推流方案. 7 P2P点对点音视频传输框架. NAT详解,UDP打洞原理与实现. 开发一套完全基于UDP的P2P点对点音视频数据传输框架的实现. 8 WebRTC开发实践. WebRTC公网打洞服务器转发服务器搭建,Janus SFU视频会议服务器. 移动PC客户端,开发一套完整基于c++ native 的WebRTC客户端. 课程目录: h264和aac封装mp4 001.01 h264数据编码 002.02 ipb帧及gop 003.03 h264的nalu 004.04 mp4容器与aac 005.05 mp4封装的两种方式 006.06 h264帧nalu详解 007.07 cmake与ffmpeg库 008.08 封装mp4单例模式 009.09 视频封装接口定义 010.10 封装视频avformatcontex 011.11 设置视频avstream 012.12 设置音频avstream 013.13 封装mp4写头 014.14 cmake依赖的framework 015.15 h264解析nalu算法 016.16 nalu数据处理 017.17 idr帧与非关键帧 018.18 annexb与avcc详解 019.19 ffmpeg写视频数据 020.20 c++11线程库 021.21 封装mp4时间戳详解 022.22 视频录制功能使用 023.23 封装视频与ffmpeg编译选项 024.24 aac编码器初始化 025.25 aac编码与mp4封装总结 linux多用户流媒体并发服务器开发 001.01 v4l视频采集 002.02 x264编码 003.03 linux流媒体服务器项目 004.04 x264编码实现 005.05 linux流媒体服务器开发 006.06 流媒体服务器start 007.07 套接字选项与大小端 008.08 网络32位ip地址 009.09 函数头文件详解 010.10 接受客户端连接 011.11 信号优雅结束服务器 012.12 流媒体服务器客户端处理 013.13 线程detach封装 014.14 服务器读写线程 015.15 创建客户端 016.16 客户端建立连接 017.17 客户端线程库 018.18 非阻塞connect模式 019.19 select函数io复用 020.20 流媒体服务器跨平台开发 021.21 非阻塞发送函数封装 022.22 非阻塞数据接收封装 023.23 send recv返回值详解 024.24 什么是通讯协议 025.25 网络通讯协议子节对齐 026.26 更复杂的协议 027.27 数据包发送 028.28 心跳包与客户端状态 029.29 视频采集编码 030.30 摄像头采集 031.31 摄像头视频采集问题 032.32 linux视频采集与编码 033.33 大规模视频转发 034.34 并发多用户缓存队列 035.35 百万级可伸缩视频服务器 036.36 转发服务器架构实现 037.37 缓存队列实现 038.38 并发多用户视频转发 039.39 客户端音视频接收实现 040.40 流媒体服务器客户端测试 041.41 流媒体服务器资源释放问题 042.42 再看心跳包 043.43 高性能select epoll 044.44 流媒体服务器开发总结 045.45 音视频流媒体整个流程 linux流媒体开发udp篇 001.01 深入网络通讯开发udp概览 002.02 深入网络通讯协议udp 01 003.03 深入网络通讯协议udp 02 004.04 深入网络通讯协议udp 03 分包 005.05 深入网络通讯协议udp 04 丢帧问题 006.06 深入网络通讯协议udp 05 分包算法详解 007.07 深入网络通讯协议 06 win socket 008.08 深入网络通讯协议07 高效可靠的udp 009.09 深入网络通讯协议08 udp可靠性传输框架 010.10 深入网络通讯协议16 udp音视频传输09 011.11 深入网络通讯协议17 udp音视频传输10 012.12 深入网络通讯协议18 udp音视频传输11 013.13 深入网络通讯协议19 udp音视频传输12 014.14 深入网络通讯协议20 udp音视频传输13 015.15 深入网络通讯协议21 udp音视频传输14 016.16 深入网络通讯协议22 udp音视频传输15 017.17 深入网络通讯协议23 udp音视频传输16 018.18 深入网络通讯协议24 udp音视频传输17 019.19 深入网络通讯协议25 udp音视频传输18 020.20 深入网络通讯协议26 udp音视频传输19 021.21 深入网络通讯协议27 udp音视频传输20 022.22 深入网络通讯协议28 udp音视频传输21 023.23 深入网络通讯协议29 udp音视频传输22 024.24 深入网络通讯协议32 udp音视频传输25 025.25 深入网络通讯协议33 的udp音视频传输26 026.26 深入网络通讯协议34 udp音视频传输27 027.27 深入网络通讯协议35 udp音视频传输28 028.28 深入网络通讯协议36 udp音视频传输29 029.29 深入网络通讯协议37 udp音视频传输30 linux网络编程基础 001.qt流媒体开发课程介绍 002.qt流媒体开发学习注意事项 003.01 操作系统api以及区别 004.02 参考书和ubuntu环境 005.03 ubuntu开发环境 006.04 进程与子进程 007.05 linux多线程 008.06 linux编程之信号 009.07 linux线程锁 010.08 cmake详解 011.09 文件读写io 012.10 磁盘读写音频采集 013.11 socket通讯编程概览 014.12 socket通讯函数详解 015.13 tcp与udp的应用 016.14 tcp三次握手 017.15 深入tcp协议栈 018.16 滑动窗口算法 p2p点对点开发实战 001.01 p2p点对点音视频传输概览 002.02 nat类型 003.03 nat穿透_udp打洞 004.04 p2p点对点音视频传输框架01 005.05 p2p点对点音视频传输框架02 006.06 p2p点对点音视频传输框架03 007.07 p2p点对点音视频传输框架04 008.08 p2p点对点音视频传输框架05 009.09 p2p点对点音视频传输框架06 010.10 p2p点对点音视频传输框架07 011.11 p2p点对点音视频传输框架08 qt音视频流媒体客户端开发实战 001.01 从0构建qt跨平台流媒体客户端 002.02 posix与win32套接字 003.03 qt跨平台流媒体客户端构建 004.04 使用c++11跨平台线程库 005.05 qt开启网络通讯客户端 006.06 客户端程序优雅结束掉线程 007.07 yuv数据定义 008.08 qt配置ffmpeg解码环境 009.09 ffmpeg解码h.264数据 010.10 数据yuv与字节对齐 011.11 接收流媒体与解码 012.12 回调函数回调视频数据 013.13 qtopengl以及shader 014.14 c++与openglshader数据传递 015.15 opengl渲染yuv视频数据 016.16 渲染开头绿屏问题解决 017.17 客户端总结和win32配置 018.18 win32 socket差异 019.19 win32socket编程 020.20 mingw与msvc 021.21 qt流媒体客户端开发总结 rtmp流媒体开发 001.01 rtmp技术概览 002.02 rtmp服务器srs搭建 003.03 rtmp协议及握手 004.04 rtmp协议chunk 005.05 librtmp建立连接 006.06 h264数据编码 007.07 aac编码 008.08 h264解析sps pps 009.09 发送sps pps的rtmp包 010.10 h264组rtmp包发送 011.11 发送aac数据的rtmp包 012.12 flv格式 013.13 rtmp测试运行 014.14 rtmp优化总结 rtsp流媒体开发 001.01 rtsp技术概览 002.02 live555服务器搭建 003.03 制作live555开发库 004.04 live555库案例 005.05 rtsp协议与sdp 006.06 rtp和rtcp 007.07 创建rtsp项目 008.08 使用live555错误问题汇总 009.09 创建rtspserver 010.10 mediasession会话 011.11 live555事件循环及sdp 012.12 给rtsp服务器摄像头编码的264数据 013.13 rtsp摄像头项目运行 014.14 rtsp流媒体项目总结 webrtc全平台c++开发 001.01 webrtc开发实战 002.02 webrtc技术 003.03 webrtc服务器选择 004.04 快速搭建信令服务器 005.05 阿里云以及vps 006.06 janus服务器搭建01 007.07 janus服务器搭建02 008.08 janus服务器搭建03 009.09 ice p2p打洞服务器部署的坑 010.10 janus服务器加密签名证书 011.11 webrtc整套服务开发要点 012.12 janus服务器插件和资源 013.13 janus服务器ios客户端 014.14 janus服务器android客户端 015.15 webrtc源码编译中的各种问题 016.16 webrtc编译 017.17 编译webrtc时的版本问题 018.18 webrtc超过10g的代码下载 019.19 webrtc编译头文件库文件 020.20 webrtc静态库 021.21 websocket库 022.22 建立websocket连接 023.23 c++基础与webrtc 024.24 webrtc信令交互流程 025.25 webrtc linux qt 01 026.26 webrtc linux qt 02 027.27 webrtc qt 配置 028.28 webrtc qt信号槽冲突问题 029.29 webrtc 交互流程接口01 030.30 webrtc 交互流程接口02 031.31 webrtc 信令websocket实现 032.32 webrtc 本地视频采集 033.33 webrtc 视频渲染 034.34 webrtc 开发中的各种问题 035.35 webrtc 用opengl渲染 036.36 webrtc linux p2p点对点通讯 037.37 webrtc vc客户端 038.38 webrtc 安卓客户端真机 039.39 webrtc ios客户端真机 040.40 webrtc 视频会议服务器架构 041.41 webrtc c++ sdp信令交互 042.42 webrtc 各平台的移植问题 043.43 webrtc 成功应用的案例 044.44 janus百万级可扩展开发 045.45 janus跨区域视频服务 046.46 fec和jitterbuffer




