FFmpeg的基本结构
FFmpeg框架可以简单分为两层,上层是以ffmpeg、ffplay、ffprobe为代表的命令行工具;其底层支撑是一些基础库,包含AVFormat、AVCodec、AVFilter、AVDevices、AVUtils等模块库。
常用函数如下:
1. AVFormat
封装/解封装模块
avformat_open_input() | 打开输入媒体文件或流,读取文件头并初始化相关信息。 |
avformat_find_stream_info() | 查找媒体流的信息,如音视频流的参数、编解码器等。 |
avformat_close_input() | 关闭输入文件并释放相关资源。 |
avformat_alloc_output_context2() | 为输出文件分配格式上下文。 |
avio_open() | 打开一个输出流或文件进行写入操作。 |
avformat_write_header() | 向输出文件写入头部信息(如流信息、编码设置等)。 |
av_write_frame() | 向输出文件写入音频或视频数据帧。 |
av_write_trailer() | 向输出文件写入尾部数据(如流结束标记)。 |
avformat_new_stream() | 在 AVFormatContext 中创建一个新的音视频流。 |
avformat_get_stream_info() | 获取流信息,通常在读取文件后调用,提供音视频流的详细数据。 |
av_read_frame() | 从输入文件中读取一个数据包(音频或视频帧)。 |
av_seek_frame() | 在输入媒体文件中定位到特定的时间点或帧。 |
avformat_seek_file() | 在文件中根据时间戳进行精确查找。 |
av_strerror() | 获取错误码的详细描述信息。 |
2. AVCodec
编/解码模块
avcodec_register_all() | 注册所有解码器 |
avcodec_find_decoder() | 查找解码器 |
avcodec_find_encoder() | 查找编码器 |
avcodec_alloc_context3() | 分配解码器上下文 |
avcodec_open2() | 打开解码器 |
avcodec_close() | 关闭解码器 |
avcodec_receive_frame() | 接收解码后的帧 |
avcodec_send_packet() | 发送编码数据包 |
avcodec_encode_video2() | 编码视频帧 |
avcodec_receive_packet() | 获取编码数据包 |
3. AVFilter
滤镜模块
avfilter_register_all() | 注册所有滤镜 |
avfilter_graph_alloc() | 分配滤镜图 |
avfilter_graph_free() | 释放滤镜图 |
avfilter_graph_config() | 配置滤镜图 |
avfilter_graph_create_filter() | 创建滤镜 |
avfilter_link() | 连接滤镜 |
avfilter_graph_parse() | 解析滤镜链描述 |
avfilter_graph_parse_ptr() | 解析滤镜链指针 |
avfilter_init_dict() | 初始化滤镜字典 |
av_buffersrc_add_frame() | 向源滤镜添加帧 |
4. AVDevice
设备模块
avdevice_register_all() | 注册所有设备 |
avdevice_capabilities_create() | 创建设备能力列表 |
avdevice_find_input_format() | 查找输入设备格式 |
avdevice_find_output_format() | 查找输出设备格式 |
avdevice_list_devices() | 列出设备信息 |
avdevice_input_create() | 创建输入设备 |
avdevice_output_create() | 创建输出设备 |
avdevice_set_input_format() | 设置输入设备格式 |
avdevice_set_output_format() | 设置输出设备格式 |
5. swscale
图像转换模块
sws_getContext() | 创建转换上下文 |
sws_scale() | 执行图像转换 |
sws_freeContext() | 释放转换上下文 |
sws_isSupportedInput() | 检查输入格式支持 |
sws_isSupportedOutput() | 检查输出格式支持 |
sws_setColorspaceDetails() | 设置色彩空间转换 |
6. swresample
音频转换模块
swr_alloc() | 分配重采样上下文 |
swr_alloc_set_opts() | 设置重采样选项 |
swr_init() | 初始化重采样上下文 |
swr_convert() | 执行音频重采样 |
swr_free() | 释放重采样上下文 |
swr_get_out_samples() | 获取输出样本数 |
swr_get_delay() | 获取延迟值 |
7. postproc
视频后处理模块
pp_get_context() | 创建后处理上下文 |
pp_free_context() | 释放后处理上下文 |
pp_postprocess() | 执行后处理操作 |
pp_set_parameter() | 设置后处理参数 |
pp_get_parameter() | 获取后处理参数 |
pp_init() | 初始化后处理 |
pp_close() | 关闭后处理 |
pp_apply_filter() | 应用后处理滤镜 |