目录

🔹 1. 媒体文件结构

🔹 2. 时间相关概念(非常关键 ⚠️)

🧩 二、媒体数据流处理流程(核心主线)

🔹 1. 解复用(Demuxing)

🔹 2. 解码(Decoding)

🔹 3. 滤镜(Filter)

🔹 4. 编码(Encoding)

🔹 5. 复用(Muxing)

🔊 三、音视频同步与时钟系统

🎨 四、图像与音频数据结构(底层数据面)

🔹 视频帧(Video Frame)

🔹 音频帧(Audio Frame)

⚙️ 五、设备与 I/O 层(采集、播放、推流)

🔹 输入设备(采集)

🔹 输出设备(播放/推流)

🧮 六、性能优化与扩展方向(进阶)

🔹 1. 硬件加速

🔹 2. 多线程与缓冲队列

🔹 3. 实时处理与流媒体协议

🔹 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

是否希望我接着帮你画一张完整的 音视频开发思维导图(知识结构图)?
可以清晰展示各模块之间的依赖关系(比如 “解复用 → 解码 → 滤镜 → 编码 → 复用” 的数据流向)。

Logo

火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。

更多推荐