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

目录

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

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

[🎨 三、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
相关推荐
VidDown1 天前
自动给视频挑一张能看的封面:帧评分、构图与批量生成
python·ffmpeg·音视频·视频
可乐鸡翅yeah_2 天前
HLS 业务 Referer‑Policy 网页元标签引发播放异常排错
前端·javascript·网络·ffmpeg·php·音视频
开开心心就好3 天前
本地文件搜索工具推荐,占用小速度还快
智能手机·ffmpeg·ocr·word·音视频·网络攻击模型·安全架构
我科绝伦(Huanhuan Zhou)3 天前
oracle坏块导致备份不了
数据库·oracle·ffmpeg
RS迷途小书童3 天前
Python+FFmpeg提取大疆无人机MP4内嵌mov_text遥测SRT字幕并做完整性校验
python·ffmpeg·大疆·srt字幕·dji
开开心心就好3 天前
视频压缩工具推荐,画质效果很能打
智能手机·ffmpeg·ocr·word·排序算法·音视频·散列表
可乐鸡翅yeah_4 天前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
redfred4 天前
HyperFrames 部署教程:5.6 万 Star 开源「写 HTML 出视频」框架,Windows 从零上手(CLI 三条命令 + 7 个避坑)
ffmpeg·开源·自动化·html·音视频
Arcai10244 天前
PostgreSQL数据备份和恢复完全指南
数据库·postgresql·ffmpeg·备份一体机·备份软件·smartstor·智备科技
可乐鸡翅yeah_4 天前
FFmpeg 生成 HLS 独立分片 independent‑segments 参数到底有什么用
javascript·ffmpeg·音视频·safari·m3u8