音视频播放的核心处理流程

目录

[🧩 一、编码 / 解码 是什么?](#🧩 一、编码 / 解码 是什么?)

[🎞️ 二、解复用和解码的关系](#🎞️ 二、解复用和解码的关系)

[🎨 三、YUV、PCM、H.264、AAC 是什么?](#🎨 三、YUV、PCM、H.264、AAC 是什么?)

[🧠 四、为什么解码输出 YUV / PCM?](#🧠 四、为什么解码输出 YUV / PCM?)

[💡 五、为什么渲染要转成 RGB 和 Qt 播放?](#💡 五、为什么渲染要转成 RGB 和 Qt 播放?)

[⏱️ 六、同步(Audio-Video Sync)](#⏱️ 六、同步(Audio-Video Sync))

[✅ 七、最简总结](#✅ 七、最简总结)


🧩 一、编码 / 解码 是什么?

名称 意思 举例
编码(Encode) 把原始数据压缩成体积小的格式 原始视频 → H.264,原始音频 → AAC
解码(Decode) 把压缩格式还原成原始数据 H.264 → 原始图像(YUV),AAC → 原始声音(PCM)

👉 在播放器 里,只做"解码 ",因为你是播放别人编码好的视频

编码一般在"录制 / 推流 / 转码"时才用。


🎞️ 二、解复用和解码的关系

文件 → 解复用(Demux) → 解码(Decode) → 原始帧

步骤 输入 输出 举例
解复用 .mp4 文件 AVPacket(压缩数据) 一包 H.264 或 AAC
解码 AVPacket AVFrame(原始帧) 一帧 YUV 图像 或 PCM 音频

✅ 所以,AVPacket 只是中间的压缩包,最终要交给解码器转换成 AVFrame 才能播放。


🎨 三、YUV、PCM、H.264、AAC 是什么?

名称 类型 用途 是否压缩 举例
H.264 视频压缩编码格式 存储或传输视频 ✅ 有压缩 .mp4、.flv 文件里的视频流
AAC 音频压缩编码格式 存储或传输音频 ✅ 有压缩 .mp4 文件里的音频流
YUV 原始视频帧格式 显示前的图像 ❌ 无压缩 解码后的视频数据
PCM 原始音频格式 播放前的声音 ❌ 无压缩 解码后的音频数据

🧠 四、为什么解码输出 YUV / PCM?

因为:

  • H.264、AAC 是压缩格式,不能直接显示/播放;

  • 只有解码后得到的:

    • 视频帧 → YUV:每一帧像素数据;

    • 音频帧 → PCM:每个采样点的数据;

播放器用的就是这些原始数据。


💡 五、为什么渲染要转成 RGB 和 Qt 播放?

  • 屏幕显示的颜色模式是 RGB

    而视频解码出来是 YUV ,所以要用 sws_scale()YUV → RGB

  • 音频输出设备(声卡)支持 PCM(采样信号)

    所以 QAudioOutput 直接播放 PCM

🎬 视频流程:H.264 →(解码)→ YUV →(颜色转换)→ RGB → 屏幕显示

🎧 音频流程:AAC →(解码)→ PCM → 声卡播放


⏱️ 六、同步(Audio-Video Sync)

对!你理解得对:

同步就是让解码得到的视频和音频对齐播放。

思路:

  • 每帧音频、视频都有一个显示时间戳(PTS);

  • 播放时比较音频PTS和视频PTS:

    • 如果视频太快 → 等一会再显示;

    • 如果视频太慢 → 丢掉几帧追上音频;

  • 一般以音频为主时钟(因为耳朵比眼睛更敏感)。


✅ 七、最简总结

流程 输入 输出 数据格式
解复用 MP4文件 压缩包 AVPacket H.264 / AAC
解码 AVPacket 原始帧 AVFrame YUV / PCM
同步 比对PTS 保证音画一致 时间对齐
渲染 YUV→RGB / PCM→播放 屏幕 / 声卡输出 RGB / PCM
相关推荐
简鹿视频4 小时前
视频转mp4格式具体作步骤
ffmpeg·php·音视频·实时音视频
一点晖光11 小时前
centos安装ffmpeg环境
linux·ffmpeg·centos
炒毛豆11 小时前
前端直播开发入门:搞懂推流拉流,掌握播放器核心
ffmpeg
八月的雨季 最後的冰吻1 天前
FFmepg-- 32-ffplay源码- PacketQueue 的线程安全机制 以及 serial 字段的作用
安全·ffmpeg
凯新生物1 天前
mPEG-SS-PLGA-DTX:智能药物递送系统
eureka·flink·ffmpeg·etcd
学而知不足~1 天前
字幕转码杂记
ffmpeg
飞睿科技1 天前
ESP Audio Effects音频库迎来专业升级,v1.2.0 新增动态控制核心
人工智能·物联网·ffmpeg·智能家居·语音识别·乐鑫科技·esp
daizhe2 天前
基于JavaCV实现FFmpeg设置视频moov前置以及截取封面图片
ffmpeg·音视频·javacv