ijkplayer使用ffmpeg为视频添加水印avfilter_graph_parse_ptr返回Invalid data found when processing input

在确定代码逻辑和流程没有问题过后返回这个问题,通过多方验证确定是avfilter_graph_parse_ptr第二个参数导致的,此处我的输入参数是

const char *strFilter="movie=/storage/emulated/0/logo.png[wm];[in][wm]overlay=0:0,scale=400:400[out]"

,通过android studio 后台日志打印出现

 

然后我一直以为这里是logo_text1.png图片的问题,然后确定了路径文件有效,然后确定当前目录有权限,当然文件无效的话会返回其它错误。后面卡了好久开始怀疑是库不支持png格式解析。

后面我突然想到直接用

const char* = "/storage/emulated/0/logo_text1.png";
int ret = avformat_open_input(&m_pFormatContext, pUrl, NULL,NULL);
    if (0 != ret)
    {
        char errbuf[128];
        av_strerror(ret, errbuf, sizeof(errbuf));
        return 0;
    }

去打开这个地址,用过ffmpeg开发的人都清楚这个接口不仅可以打开rtmp,rtsp,本地文件等音视频流也可以打开,png,gif,jpeg等格式的图片,果然用这个接口打开时发现也是返回的同样的错误-1094995529 "Invalid data found when processing input" 这进一步的确定了问题所在,应该是编译ffmpeg时缺少了 png相关格式的配置选项,所以我用ffmpeg在windows下打开一个png格式的图片可以看到相关信息为:

 png_pipe  这个格式,然后去ffmpeg源码目录下在linux使用

./configure --list-demuxers

命令可以查看到

image_png_pip 这个编译选项然后去ffmpeg编译里面添加这个编译选项,编译成功过后的ffmpeg 库加入到工程里面重新运行,果然可以成功的运行了,并实现了添加水印的功能,当然如果是jpeg格式的同理加入 image_jpeg_pipe这个选项就OK了。这个是ffmpeg移植到android下为了节省空间去掉许多编译选项容易出现的问题,这个难点就需要我们精确的确定是代码问题还是库的问题,在此记录一下。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值