梳理了音视频开发核心知识点

目录

[🔹 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

是否希望我接着帮你画一张完整的 音视频开发思维导图(知识结构图)

可以清晰展示各模块之间的依赖关系(比如 "解复用 → 解码 → 滤镜 → 编码 → 复用" 的数据流向)。

相关推荐
专注VB编程开发20年6 小时前
.NET Reflector反编绎,如何移除DLL中的一个公开属性
开发语言·c++·c#
落羽的落羽7 小时前
【Linux系统】C/C++的调试器gdb/cgdb,从入门到精通
linux·服务器·c语言·c++·人工智能·学习·机器学习
在下雨5997 小时前
条件变量与互斥锁复习
c++·面试
dvlinker7 小时前
使用Visual Studio中的数据断点快速定位内存越界问题的实战案例分享
c++·visual studio·memset·内存越界·栈内存越界·堆内存越界·数据断点
9ilk7 小时前
【基于one-loop-per-thread的高并发服务器】--- 项目介绍&&模块划分
运维·服务器·c++·后端·中间件
@木辛梓7 小时前
Linux 线程
linux·开发语言·c++
AI视觉网奇8 小时前
imageio 视频帧拼接
音视频
无语子yyds8 小时前
C++双指针算法例题
数据结构·c++·算法
羑悻的小杀马特8 小时前
ProtoBuf语法揭秘:探秘编译魔法与性能优化策略,解锁多层级选项配置的底层奥秘
c++·编程·protobuf