功能概要:
- 功能概述:简化ffmpeg调用流程,让ffmpeg命令开发与ffmpeg库开发结合
- 操作系统:Windows、Linux、各种操作系统可定向编译
- 适用场景:开发者(免费)
EasyAVFilter本质上就是将ffmpeg.exe改造成了动态库, 方便应用程序集成ffmpeg的各项功能;
函数名称 |
说明 |
EasyAVFilter_Create |
创建句柄 |
EasyAVFilter_Release |
释放句柄 |
EasyAVFilter_SetCallback |
设置回调函数和自定义指针 |
EasyAVFilter_AddInput |
添加输入参数(源) |
EasyAVFilter_AddFilter |
添加中间参数,如:转码 |
EasyAVFilter_SetOutput |
设置输出参数(目标) |
EasyAVFilter_GetFilters |
获取所有参数 |
EasyAVFilter_Start |
开始工作 |
EasyAVFilter_Stop |
停止工作 |
所有API的int类型返回值, 为0则表示成功,否则为失败;
EasyAVFilter_Create
输入: 无
输出: 句柄
返回值: 0:成功other:失败
说明: 创建句柄
EasyAVFilter_SetCallback
输入: handle: 句柄
callback: 回调函数
userPtr: 用户自定义指针
输出: 无
说明: 设置回调函数和用户自定义指针
EasyAVFilter_AddInput
输入:
handle: 句柄
inputUrl:源地址
connectType: 连接类型 1:tcp other:udp
输出: 无
返回值: 0:成功 other: 失败
说明: 添加输入源
EasyAVFilter_AddFilter
输入:
handle: 句柄
filterCommand: 中间参数,如转码
用法1: 在调用EasyAVFilter_AddInput添加了参数后,再调用EasyAVFilter_AddFilter添加的便为中间参数,本质上就是将EasyAVFilter_AddInput、EasyAVFilter_AddFilter和EasyAVFilter_SetOutput的参数组合成一条完整的命令
用法2:直接调用EasyAVFilter_AddFilter命令将ffmpeg完整命令输入,随后直接调用EasyAVFilter_Start;
输出: 无
返回值: 0:成功 other: 失败
说明: 添加中间处理参数
EasyAVFilter_SetOutput
输入:
handle: 句柄
outputUrl: 输出地址,即目标地址.如rtmp://xxx 或 d:/12.mp4
transCodeType:
0:自动 1:强制转码为H264
输出: 无
返回值: 0:成功 other: 失败
说明: 设置输出地址
EasyAVFilter_GetFilters
输入:
handle: 句柄
输出: outFilterCommand: 完整命令
返回值: 0:成功 other: 失败
说明: 获取所有参数
EasyAVFilter_Start
输入:
handle: 句柄
loop: 1: 循环执行 0:执行过程中如有异常或执行完成则终止
connectTimeoutSecs:
连接超时时长(秒)
readTimeoutSecs:读取数据超时时长(秒)
输出: 无
返回值: 0:成功 other: 失败
说明: 开始工作
EasyAVFilter_Stop
输入:
handle: 句柄
输出: 无
返回值: 0:成功 other: 失败
说明: 停止工作
EasyAVFilter_Release
输入:
handle: 句柄
输出: 无
返回值: 0:成功 other: 失败
说明: 释放句柄
Linux链接库
-lpthread -ldl -lva -lva-drm -lm
因产品中主要用到了拉转推,调用如下:
int main(intargc, char** argv) { Easy_HandleavFilterHandle = NULL; EasyAVFilter_Create(&avFilterHandle); #if 0 // 用法1 EasyAVFilter_AddInput(avFilterHandle[i], "rtsp://admin:12345@192.168.1.100", 1); EasyAVFilter_AddFilter(avFilterHandle[i], "-vcodec copy -acodec aac"); EasyAVFilter_SetOutput(avFilterHandle[i], "rtmp://192.168.1.200:1935/live/ch1", 0); #else // 用法2 //const char* pCommand = "-rtsp_transporttcp -i rtsp://admin:12345@192.168.1.100 -vcodec copy -acodec copy -f flv rtmp://192.168.1.200:1935/live/ch1"; char command[512] = { 0 }; char* pCommand = (char*)command; for (inti = 1; i<argc; i++) { pCommand += sprintf(pCommand, " %s", argv[i]); } EasyAVFilter_AddFilter(avFilterHandle, command); #endif charfilterCommand[256] = { 0 }; EasyAVFilter_GetFilters(avFilterHandle, filterCommand); printf("command: %s\n", filterCommand); EasyAVFilter_Start(avFilterHandle, 1, 8, 10); getchar(); EasyAVFilter_Stop(avFilterHandle); EasyAVFilter_Release(&avFilterHandle); return 0;