音视频的硬件采集设备比如摄像头、麦克风、音视频采集卡采集到的视频信息都是未经编码的原始数据,一般来说视频采集的是YUV数据,音频采集的是PCM数据。由于未经编码压缩原始的音视频数据都比较大,非常不利于传输,所以在日常工作生活中,我们一般都会将YUV和PCM数据封装成特定的视频格式来进行传输,常见的格式包括mp4,flv等等。这里就介绍一下如何通过FFmpeg将YUV视频数据和PCM音频数据封装成特定的视频格式。
FFmpeg封装YUV数据和PCM数据的流程图如下图所示:
为了封装原始的音视频数据,我们首先实现音视频编码器,编码器负责对YUV数据和PCM数据进行封装。通常情况下视频编码器采用的编码格式是H264,音频编码器采用的是AAC。对应的实现如下所示:
音频编码器
//audio_encoder.h
#ifndef _AUDIO_ENCODER_H_
#define