模块结构
- libavformat:实现在流协议,容器格式及其本地IO访问。多媒体格式解析、解封装、封装。
- libavutil:简化编程的工具函数库。包括随机数生成器,数据结构,数学函数,多媒体核心工具函数等等。
- libavcodec:各种编解码器的封装。自身不做编解码,编解码器是通过插件插入的。
- libavdevice:输入/输出设备接口封装。
- libavfilter:音视频的后期处理。
- libswresample:实现混音和重采样。
- libswscale:用于执行高性能的图像缩放,颜色空间或像素格式转换的库。
FFmpeg处理音视频流程
flowchart LR 输入文件 --demuxer-->编码数据包0 --decoder-->解码后数据帧 --encoder-->编码数据包1 --muxer-->输出文件
分解器把输入的文件(一般为容器媒体),分解为多路流,这些流都是编码数据包。把编码数据包传给解码器(如果选择流拷贝则跳过),解码器产生未压缩的帧(原始视频、PCM音频等)。通过滤镜进一步处理。然后帧被传递到编码器,编码然后输出编码数据包。最后,这些数据传给复用器,把编码的数据写入输出文件。
处理流数据的基本步骤:
flowchart LR 解复用 --> 获取流 --> 读数据包 --> 释放资源