1 概述
FFMPEG是一个C语言开源视音频编解码库。本文将FFMPG4.1.3进行C++封装,形成C++ FFMPG库。
2 架构
架构图如下所示:
架构说明:
- Init 初始化FFMPEG库。
- IStream 输入流,FFMPEG的输入音视频文件。
- Packet 音视频数据包
- Decoder 音视频编码器
- Frame 音视频帧
- FilterGraph 音视频过滤器
- Encoder 音视频解码器
- OStream 输出流,FFMPEG的输出音视频文件。
- Utils 辅助工具函数
3 概要设计
3.1 类图
3.2 模块
划分为如下9个模块
3.2.1 Init
函数列表:
- Init 初始化FFMPEG库
3.2.2 IStream
类型列表:
- Program 节目类型
- IStream 输入流类型
3.2.3 Packet
类型列表:
- Rational 分数类型,表示帧率/时间单位
- Packet 编码后数据包类型
3.2.4 Decoder
类型列表:
- Decoder 解码器类
- VideoDecoder 视频解码器
- AudioDecoder 音频解码器
3.2.5 Frame
类型列表:
- Frame 未编码帧类型
- VideoFrame 构造视频帧类型
- AudioFrame 构造音频帧类型
3.2.6 FilterGraph
类型列表:
- FilterGraph 简单过滤器类型
- ComplexFilterGraph 复合过滤器类型
3.2.7 Encoder
类型列表:
- Encoder 编码器
- VideoEncoder 视频编码器
- AudioEncoder 音频编码器
3.2.8 OStream
类型列表:
- FormatParam 文件格式参数
- EncoderParam 编码参数
- VideoEncParam 视频编码参数
- AudioEncParam 音频编码参数
- OStream 输出流
3.2.9 Utils
函数列表:
- Report 配置是否在命令行输出编解码信息
- Formats 在命令上打印支持的文件格式
- Codecs 在命令上打印支持的编解码格式
- Protocols 在命令上打印支持的协议格式
- Filters 在命令上打印支持的过滤器格式
- PixFmts 在命令上打印支持的像素格式
- SampleFmts 在命令上打印支持的采样格式
- Time 获取时间
- NoPtsValue 返回无效PTS
- ToTime 转换PTS为指定timebasae为单位的时间
- DisplayCardNames 显示显卡名称,确定是否可以使用硬件加速
FFMPEG C++封装(二)