1. 基本概念
- 多媒体文件是一个容器
- 在容器里面有很多流(Stream/Track),比如音频流,视频流,字幕流。
- 每一种流是有不同编码器编码的
- 从流读出的数据简成包
- 在一个包里面包含着一个或者多个帧
2.几个重要的结构体
- AVFormatContext 格式上下文
他是连接多个ffmpegAPI的一个桥梁。
比如:在处理流的时候就要传入这个结构体,有了这个上下文,我就知道我要处理的是这一个多媒体文件,而不是其他的多媒体文件。 - AVSteam
通过这个结构体来获取流。 - AVPacket
有了流就可以读取流中一个个的包,拿到包我们就可以获取到包里的帧。有了帧我们就可以使用解码器获得一些原始数据的音频、视频等。在行车记录仪项目中,就是使用这些原始数据在使用OpenGL绘制出来的。
3.FFmpeg操作流数据的基本步骤
首先我们拿到一个MP4文件,然后进行解复用,再进行获取流,读取数据包,释放资源。