音视频解码基础知识
一、什么是音视频解码?
音视频解码,就是将经过压缩处理的音视频数据(如H264/H265编码的视频和AAC、MP3编码的音频),还原为原始数据的过程。这些原始数据包括视频的YUV格式和音频的PCM格式。
二、音视频的解码流程
1. 读取文件和解封装
① 需要读取流媒体地址,并获取到相应的音视频数据。
② 对这些数据进行解封装处理,也就是将flv、mpegts等复合流拆分为裸的视频流(如H264/H265视频流)和裸的音频流(如AAC音频流)。这些裸流被分别存入不同的队列中,例如,视频裸流存入VideoPacket Queue,而音频裸流则存入Audio Queue。
2. 提取和解码
将视频裸流队列和音频裸流队列中的数据逐一取出,并送入解码器进行视频和音频的逐帧解码。解码后的数据分别进入视频解码队列和音频解码队列,以备后续处理。
3. 同步处理
从第2步中的解码队列中取出音视频数据,并运用音视频同步算法进行处理。通常,音视频同步以音频为参考时钟,视频则根据音频的节奏进行同步。经过同步处理后,音视频能够达到声音与画面完全一致的效果。
4. 播放数据
同步处理后的视频数据(YUV格式)通过SDL或drm进行显示,而音频数据(PCM格式)则直接送入alsa框架进行播放。