目录
[🔹 1. 媒体文件结构](#🔹 1. 媒体文件结构)
[🔹 2. 时间相关概念(非常关键 ⚠️)](#🔹 2. 时间相关概念(非常关键 ⚠️))
[🧩 二、媒体数据流处理流程(核心主线)](#🧩 二、媒体数据流处理流程(核心主线))
[🔹 1. 解复用(Demuxing)](#🔹 1. 解复用(Demuxing))
[🔹 2. 解码(Decoding)](#🔹 2. 解码(Decoding))
[🔹 3. 滤镜(Filter)](#🔹 3. 滤镜(Filter))
[🔹 4. 编码(Encoding)](#🔹 4. 编码(Encoding))
[🔹 5. 复用(Muxing)](#🔹 5. 复用(Muxing))
[🔊 三、音视频同步与时钟系统](#🔊 三、音视频同步与时钟系统)
[🎨 四、图像与音频数据结构(底层数据面)](#🎨 四、图像与音频数据结构(底层数据面))
[🔹 视频帧(Video Frame)](#🔹 视频帧(Video Frame))
[🔹 音频帧(Audio Frame)](#🔹 音频帧(Audio Frame))
[⚙️ 五、设备与 I/O 层(采集、播放、推流)](#⚙️ 五、设备与 I/O 层(采集、播放、推流))
[🔹 输入设备(采集)](#🔹 输入设备(采集))
[🔹 输出设备(播放/推流)](#🔹 输出设备(播放/推流))
[🧮 六、性能优化与扩展方向(进阶)](#🧮 六、性能优化与扩展方向(进阶))
[🔹 1. 硬件加速](#🔹 1. 硬件加速)
[🔹 2. 多线程与缓冲队列](#🔹 2. 多线程与缓冲队列)
[🔹 3. 实时处理与流媒体协议](#🔹 3. 实时处理与流媒体协议)
[🔹 4. 时序与同步调度算法](#🔹 4. 时序与同步调度算法)
[✅ 汇总:音视频必学知识点全清单](#✅ 汇总:音视频必学知识点全清单)
一、音视频基础概念层(理论底层)
🔹 1. 媒体文件结构
- 
封装格式(Container / Format):mp4, mkv, flv, avi, mov ...
 - 
编码格式(Codec / Stream):
- 
视频:H.264, H.265, VP9, AV1...
 - 
音频:AAC, MP3, PCM, FLAC...
 
 - 
 - 
流(Stream):一个文件里通常有多个 stream(音频流、视频流、字幕流)
 - 
元数据(Metadata):标题、时长、分辨率、比特率等信息
 
🔹 2. 时间相关概念(非常关键 ⚠️)
| 概念 | 含义 | 
|---|---|
| PTS(Presentation Time Stamp) | 帧在屏幕上显示的时间戳 | 
| DTS(Decoding Time Stamp) | 帧被解码的时间戳 | 
| Time Base | 时间刻度(例如 1/90000 秒) | 
| Duration | 帧持续时间 | 
| AVSync | 音视频同步机制(靠比较 PTS 实现) | 
| Clock Drift | 解码与播放时钟偏差问题 | 
FFmpeg结构体关联:
AVPacket.pts / dts,AVStream.time_base,AVFrame.pts
🧩 二、媒体数据流处理流程(核心主线)
🔹 1. 解复用(Demuxing)
- 
从封装文件中分离出各个流(音频流、视频流、字幕流)
 - 
核心函数:
- 
avformat_open_input() - 
avformat_find_stream_info() - 
av_read_frame() 
 - 
 - 
输出:
AVPacket(压缩数据包) 
🔹 2. 解码(Decoding)
- 
将压缩包(如H.264)解成原始帧(YUV / PCM)
 - 
视频输出:
AVFrame(像素帧) - 
音频输出:PCM 采样数据
 - 
核心结构体与函数:
- 
AVCodec,AVCodecContext - 
avcodec_find_decoder() - 
avcodec_send_packet(),avcodec_receive_frame() 
 - 
 
🔹 3. 滤镜(Filter)
- 
对音视频帧进行变换处理(裁剪、缩放、音量调整等)
 - 
核心:
- 
视频滤镜:
scale,crop,overlay - 
音频滤镜:
volume,aresample,aecho 
 - 
 - 
结构体:
AVFilterGraph,AVFilterContext 
🔹 4. 编码(Encoding)
- 
将原始帧(AVFrame)压缩成特定格式(如H.264, AAC)
 - 
核心函数:
- 
avcodec_find_encoder() - 
avcodec_send_frame() - 
avcodec_receive_packet() 
 - 
 
🔹 5. 复用(Muxing)
- 
将压缩好的音视频数据重新打包成封装文件(mp4, flv等)
 - 
核心函数:
- 
avformat_write_header() - 
av_write_frame() - 
av_write_trailer() 
 - 
 
🔊 三、音视频同步与时钟系统
- 
音频时钟:以采样率为基准
 - 
视频时钟:以帧率为基准
 - 
同步策略:
- 
视频追音频
 - 
音频追视频
 - 
中间参考时钟(外部时钟)
 
 - 
 - 
延时与丢帧机制:保证播放平滑
 - 
常见问题:
- 
不同帧率的流同步
 - 
延迟播放(AVSync)
 - 
时间戳回绕处理(wrap around)
 
 - 
 
🎨 四、图像与音频数据结构(底层数据面)
🔹 视频帧(Video Frame)
- 
格式:YUV420P, NV12, RGB24...
 - 
关键参数:
- 
width,height - 
linesize[] - 
data[] - 
pix_fmt 
 - 
 - 
转换函数:
sws_scale()(像素格式/尺寸转换)
 
🔹 音频帧(Audio Frame)
- 
格式:PCM、planar/interleaved
 - 
关键参数:
- 
sample_rate - 
channels - 
channel_layout - 
sample_fmt 
 - 
 - 
转换函数:
swr_convert()(采样率、声道数、格式转换)
 
⚙️ 五、设备与 I/O 层(采集、播放、推流)
🔹 输入设备(采集)
- 
摄像头、麦克风、屏幕捕获
 - 
FFmpeg输入协议:
- 
dshow(Windows) - 
avfoundation(macOS) - 
v4l2(Linux) 
 - 
 - 
调用示例:
ffmpeg -f dshow -i video="camera name" output.mp4 
🔹 输出设备(播放/推流)
- 
输出到显示设备(SDL2 / OpenGL)
 - 
推流到服务器(RTMP, HLS, RTP)
 - 
FFmpeg推流命令:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://server/live/stream 
🧮 六、性能优化与扩展方向(进阶)
🔹 1. 硬件加速
- 
VAAPI / QSV / CUDA / NVENC / DXVA2
 - 
示例文件:
- 
vaapi_encode.c - 
qsv_transcode.c 
 - 
 
🔹 2. 多线程与缓冲队列
- 
生产者-消费者模型(读包 → 解码 → 渲染)
 - 
缓冲策略:队列长度控制
 - 
线程同步:互斥锁、条件变量
 
🔹 3. 实时处理与流媒体协议
- 
RTMP / HLS / WebRTC / RTP / RTSP
 - 
关键知识:
- 
GOP(Group of Pictures)
 - 
I/P/B帧
 - 
延迟控制
 
 - 
 
🔹 4. 时序与同步调度算法
- 
播放时间控制(sleep精度)
 - 
时间差补偿算法
 - 
滑动窗口同步策略
 
✅ 汇总:音视频必学知识点全清单
| 分类 | 关键知识点 | 
|---|---|
| 文件结构 | 封装格式、编码格式、流、元数据 | 
| 时间系统 | PTS、DTS、time_base、duration、AVSync | 
| 流程核心 | 解复用、解码、滤镜、编码、复用 | 
| 数据结构 | AVPacket、AVFrame、AVCodecContext、AVFormatContext | 
| 视频处理 | YUV格式、像素转换、帧率、分辨率 | 
| 音频处理 | 采样率、声道数、PCM格式、重采样 | 
| 同步系统 | 时钟、延迟、丢帧、音视频对齐 | 
| 硬件加速 | VAAPI、QSV、CUDA、NVENC | 
| 实时流媒体 | RTMP、HLS、RTP、WebRTC | 
| 多线程模型 | 解码线程、渲染线程、同步线程 | 
| 工具链 | FFmpeg命令行、libavcodec、libavformat、libswscale、libswresample | 
是否希望我接着帮你画一张完整的 音视频开发思维导图(知识结构图) ?
可以清晰展示各模块之间的依赖关系(比如 "解复用 → 解码 → 滤镜 → 编码 → 复用" 的数据流向)。