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

目录

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

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

[🎨 三、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
相关推荐
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之av_dump_format调用流程与实战(十一)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Android系统攻城狮1 小时前
Linux FFmpeg深度解析之avcodec_find_decoder调用流程与实战(十二)
linux·运维·服务器·ffmpeg·1024程序员节·音视频进阶
Hommy881 小时前
【直播切片工作台】第23章:媒体探测与转码:ffprobe 与 ffmpeg 封装
人工智能·ffmpeg·直播切片
码匠许师傅1 小时前
【C++三方组件】FFmpeg:音视频处理的瑞士军刀
c++·ffmpeg·音视频
全栈探索者20 小时前
从素材到成片:ffmpeg 拼接、转码与字幕,一条流水线交付
macos·ffmpeg·aigc·comfyui·视频剪辑
扶尔魔ocy1 天前
【QT+FFmpeg】知识点编目及传送门
qt·ffmpeg
甜到心里的蛋糕2 天前
AI 生成 MV 音频异响排查:频谱定位、片段替换与 Nginx 缓存
人工智能·python·nginx·ffmpeg·音视频·音频处理
白搞电子4 天前
ESP-Mosaico 音乐驱动动画:节拍检测、RMS 包络与预制动作编排
ffmpeg
FlightYe4 天前
视界原理之3D视频(三):解码和显示
android·linux·3d·ffmpeg·音视频·android runtime
FlightYe4 天前
linux系统编程(十七):内存管理基础
android·linux·ffmpeg·音视频·android runtime