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()
| 应用后处理滤镜 |