🎬 FFmpeg入门详解——音视频流媒体播放器原理及应用
照着《FFmpeg入门详解——音视频流媒体播放器原理及应用》(梅会东 编著,清华大学出版社,2023 年 9 月第 1 版,424 页)做的自学笔记 —— 「FFmpeg 音视频流媒体系列」**第 5 册**。前四册讲的都是「发出去」的一侧:音视频原理讲**画面怎么压成比特**,流媒体直播讲**比特怎么推出去、怎么分发**,命令行特效讲**命令怎么敲**,SDK二次开发讲**用 API 写采集编码推流**。这一本补的是**接收端**:播放器拿到比特之后怎么解、怎么排队、怎么和声音对齐、怎么画到屏幕上 —— 从最浅的 LibVLC 二次开发一路挖到 ffplay.c 源码,最后落在音视频同步(**一个播放器的难缠问题,八成出在同步上**)。全书 9 章 56 篇(已全部写完):第 1 章 6 篇音视频及流媒体播放原理(码率=像素×帧率×位深×压缩比、边下边播与 moov 位置);第 2 章 13 篇 VLC 播放器及二次开发(LibVLC、set_hwnd 把画面交进你的窗口);第 3 章 3 篇 Qt 信号槽机制及图片轮播(跨线程的投递方式);第 4 章 4 篇 Qt 播放音视频及 Multimedia 模块;第 5 章 4 篇 MFC+OpenCV 采集与播放(Mat 与 CImage 为什么上下颠倒);第 6 章 6 篇 SDL 2 开发库(Texture 与 Surface、YUV 直接贴比转 RGB 快);第 7 章 8 篇 FFmpeg 解码音视频及流媒体(h264_mp4toannexb 的 annexb 是什么);第 8 章 4 篇 FFplay+SDL 2 开发播放器;第 9 章 8 篇 FFplay 源码剖析及音视频同步(三条线程、包队列与帧队列、音频为主钟)。本课是 播放器课:能算的都真算(码率与存储量、队列缓冲的毫秒数、同步差值、YUV 与 RGB 的字节数、重采样样本数);能用 Python 真跑的全部真跑(PyAV 解封装、解码、格式转换、重采样、时钟与队列模型);必须有 VS/Qt/MFC 的写成【📋 实操清单】加【🐍 Python 等价物】——在 VS 里点哪几处、看到什么算成功,等价物在沙箱里跑出同一结论。技术事实按 2026 年当下核实过,与 2023 年成书时的差异用【⚠️ 2026 现状】单列。大白话、不跳步骤、必带生活比喻、常见误区、可折叠自测题。
前置课程:音视频原理及应用(第一部)、流媒体直播原理及应用(第二部)、命令行与音视频特效(第三部)、SDK二次开发与直播美颜(第四部)。
内容来自我的 Obsidian 自学笔记 · 全书 9 章 56 篇已全部写完 · 全书完结 🎉
第一章 音视频及流媒体播放原理
视频简介
像素/分辨率/帧率/色彩空间;码率=像素…
音频简介
采样率/位深/声道;PCM 码率=采样率…
流媒体传输方式
下载后播 vs 边下边播;单播/组播/广…
常见的流媒体协议
RTMP 推、HLS 分发、RTSP 监…
视频播放器简介
五段流水:解封装→解码→同步→转换→渲染…
FFmpeg播放架构与原理
六个 libav 库分工;AVPacke…
第二章 VLC播放器及二次开发应用
VLC简介
跨平台开源,输入—解码—输出三段管道,模…
VLC的功能列表
播放之外还能转码、推流、录制、加滤镜;能…
VLC播放网络串流
打开网络串流的三种入口;缓冲区毫秒数决定…
VLC的技术特点
模块可热插拔是它兼容格式多的原因;也是它…
VLC作为流媒体服务器使用
串流向导把本地文件推成 RTMP/HTT…
VLC的功能模块简介
libvlc 是壳、libvlccore…
LibVLC简介
C 接口;一个 instance 可挂多…
LibVLC的API
三层对象:instance→media_…
安装VLC的SDK
装 SDK 要三样:头文件、导入库、pl…
使用VS控制台开发基于LibVLC的播放器
控制台版最小可跑:init→media_…
使用MFC开发基于LibVLC的播放器
set_hwnd 把画面交给窗口;窗口消…
使用Duilib美化基于LibVLC的播放器
无边框窗口+自绘控件;渲染区仍要靠 se…
使用Qt开发基于LibVLC的播放器
winId() 交给 set_hwnd…
第三章 Qt信号槽机制及图片轮播
Qt信号槽机制及应用
connect 四要素;跨线程默认排队投…
Qt显示图像
QImage 管像素、QPixmap 管…
Qt实现图片轮播
QTimer 定时切索引;提前加载下一张…
第四章 Qt播放音视频及Multimedia多媒体模块
Qt的Multimedia多媒体框架简介
QMediaPlayer 是接口,真正干…
Qt的QMediaPlayer播放音视频
setMedia→setVideoOut…
Qt实现音乐播放器
播放列表+进度条+音量;position…
Qt实现视频播放器
全屏、暂停、拖动进度;拖动要显式 see…
第五章 MFC+OpenCV视频采集及播放
使用VS 2015搭建OpenCV 4开发环境
三处配置:包含目录、库目录、附加依赖项…
OpenCV显示摄像头及磨皮美颜
VideoCapture 取帧;磨皮是双…
MFC结合OpenCV显示图片
Mat 是 BGR、CImage 是 B…
MFC结合OpenCV实现采集和录制功能
VideoWriter 的 fourcc…
第六章 SDL 2开发库及高级应用
SDL 2简介及开发环境的搭建
SDL_Init 子系统位掩码;窗口与渲…
SDL 2的核心对象
Window/Renderer/Text…
SDL 2的扩展库及应用
image/ttf/mixer/net…
SDL 2播放YUV视频
SDL_UpdateYUVTexture…
VS 2015编译并运行SDL 2的相关案例
x86 与 x64、Debug 与 Re…
将SDL 2的窗口嵌入MFC或Qt的界面中
SDL_CreateWindowFrom…
第七章 FFmpeg解码音视频及流媒体
FFmpeg编解码框架及原理
六库分工;av_register_all…
ffplay视频播放
ffplay 是最短的播放器;快捷键 s…
从MP4文件中提取音频流和视频流
-map 0:v -c copy 抽流不…
h264_mp4toannexb
AVCC 长度前缀 → AnnexB 起…
MP4格式的faststart快速播放模式
faststart 把 moov 从文件…
FFmpeg播放流程简介
八步:open_input→find_s…
配置Qt和VS 2015的FFmpeg开发环境
include/lib/dll 三处都要…
FFmpeg解码流程与案例实战
读包→发码→收帧→转格式→渲染;有的解码…
第八章 FFplay+SDL 2开发音视频流媒体播放器
FFplay播放器简介
ffplay.c 一个文件就是全部;它是…
VS 2015控制台开发FFplay+SDL 2播放器
解码在线程里跑,主线程只做 SDL 事件…
MFC移植FFplay播放器及二次开发
嵌入式做法与 LibVLC 同构:把 S…
Qt移植FFplay播放器及二次开发
Qt 版靠 winId();跨线程刷新要…
第九章 FFplay源码剖析及音视频同步
FFplay播放器概述
三条线程:读、解码、播放;靠包队列与帧队…
FFplay的数据结构及API
VideoState 总控;Packet…
FFplay的核心框架及流程
stream_open→read_thr…
FFplay的音视频解码
decoder_decode_frame…
FFplay的图像格式转换
sws_scale 一次转换带缩放;YU…
FFplay的音频重采样
swr_convert 处理采样率与声道…
FFplay的播放控制
seek 要清队列;暂停是让时钟停;静音…
FFplay音视频同步原理及实现
以音频为主钟;视频算差值再插值或丢帧,阈…