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

目录

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

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

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

相关推荐
DogDaoDao1 小时前
Android 硬件编码器参数完全指南:MediaCodec 深度解析
android·音视频·视频编解码·h264·硬编码·视频直播·mediacodec
音视频牛哥2 小时前
大牛直播SDK(SmartMediaKit)Windows平台RTSP/RTMP直播播放SDK集成说明(C#版)
音视频·低延迟rtsp播放器·windows rtsp播放器·windows rtmp播放器·低延迟rtmp播放器·c# rtsp播放器·c# rtmp播放器
于小猿Sup3 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
薛定猫AI4 小时前
【深度解析】Gemini Omni 多模态生成与 Agent 化创作工作流:从视频编辑到 UI 生成的技术演进
人工智能·ui·音视频
小小编程路5 小时前
C++ 多线程与并发
java·jvm·c++
程序leo源7 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
zh_xuan7 小时前
解决VS Code 控制台中文乱码
c++·vscode·乱码
郭涤生8 小时前
飞凌 RK3588 开发板同显 / 异显模式切换
c++·rk3588
计算机安禾8 小时前
【c++面向对象编程】第38篇:设计原则(二):里氏替换、接口隔离与依赖倒置
开发语言·c++
code_whiter8 小时前
C++1进阶(继承)
开发语言·c++