FFMPEG中avfilter模块 调用流程
FFMPEG中avfilter模块 调用流程
前言
视频拼接
一、avfilter的调用流程图
二、filter的初始化
./ffmpeg -buffer_size 1024000 -i udp://@224.1.1.3:20000 -i udp://@224.1.1.3:20000 -filter_complex "[0:v]crop=900:900:10:10,scale=1920:1080[v0];[1:v]crop=900:900:10:10,scale=1920:1080[v1];[v0][v1]hstack=2[out]" -pkt_size 1316 -map [out] -f mpegts udp://@239.255.255.250:54546
AVFilterLink对应是描述符(scare:90:90)
三、两个特殊的filter
- 1.buffer filter (处理前中的数据放到这里)
- 2 buffersink filter (滤镜处理完成后放到这里)
四、初始化filter的基本过程
- 1、 创建 graph, avfilter_graph_alloc()
- 2、buffer filter 和buffersink filter
- 3、 分析filter描述符,并构造AVFilterGraph
- 4、使构建好的AVFilterGraph生效
init_filter函数实现
/*
* 初始化过滤器
*/
static int32_t init_filters(const char * filter_desc)
{
int32_t ret = 0;
const AVFilter * buffersrc = ::avfilter_get_by_name("buffer");
const AVFilter* buffersink = ::avfilter_get_by_name("buffersink");
AVFilterInOut * inputs = ::avfilter_inout_alloc();
AVFilterInOut* outputs = ::avfilter_inout_alloc();
if