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

目录

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

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

[🎨 三、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
相关推荐
aqi005 小时前
FFmpeg开发笔记(九十一)基于Kotlin的Android直播开源框架RootEncoder
android·ffmpeg·kotlin·音视频·直播·流媒体
寻找华年的锦瑟21 小时前
Qt-FFmpeg案例(0基础,包含环境配置)
开发语言·qt·ffmpeg
大新新大浩浩1 天前
amazoncorretto:17镜像中安装ffmpeg
ffmpeg
Industio_触觉智能1 天前
瑞芯微RK3562平台FFmpeg硬件编解码移植及性能测试实战攻略
ffmpeg·视频编解码·瑞芯微·rk3562·触觉智能
八月的雨季 最後的冰吻1 天前
FFmepg--25-h265解码yuv格式
ffmpeg
weixin_462446231 天前
Python 使用 FFmpeg 给视频添加内嵌字幕(SRT)完整教程(含代码示例)
python·ffmpeg·音视频
百***35512 天前
从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
ffmpeg
android_cai_niao2 天前
编译最新版本FFmpeg为so
ffmpeg·freetype·harfbuzz·drawtext·文字水印
feiyangqingyun2 天前
祖传独创/全网唯一/Qt结合ffmpeg实现读取ts文件节目流/动态切换多节目/实时切换不同轨道
qt·ffmpeg·节目流
i***58673 天前
从MySQL5.7平滑升级到MySQL8.0的最佳实践分享
ffmpeg