ChinaFFmpeg

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6186|回复: 2

overlay时,filter输出端get到数据时总是提示AVERROR(EAGAIN)

[复制链接]
发表于 2019-4-28 18:18:51 | 显示全部楼层 |阅读模式
代码在两个mp4文件做overlay的时候可以正常工作;但将其中的一路换成Usb口的数据流时,filtersink获取数据的时候就出现AVERROR(EAGAIN);一直到mp4文件到最后一帧,才可以正常的获取。
filter的创建如下:

        sprintf_s(args, sizeof(args),
                "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d:sws_param=flags=%d:frame_rate=%d/%d",
                input_dec_ctx->width, input_dec_ctx->height, input_dec_ctx->pix_fmt,
                video_st->time_base.num, video_st->time_base.den,
                input_dec_ctx->sample_aspect_ratio.num, input_dec_ctx->sample_aspect_ratio.den,
                SWS_BILINEAR + ((video_st->codec->flags&AV_CODEC_FLAG_BITEXACT) ? SWS_BITEXACT : 0),
                video_st->r_frame_rate.num, video_st->r_frame_rate.den);

        printf("video_config_input_filter args = %s\n", args);
        ret = avfilter_graph_create_filter(input_filter_ctx, filter, "src_in", args, NULL, filter_graph);

      .......
    ret = avfilter_link(*input_filter_ctx, 0, first_filter, pad_idx);
////////////////////////////////////////////////////
ret = avfilter_graph_request_oldest(filter_graph);  //filter执行的一个过程
av_buffersink_get_frame_flags(buffersink_ctx, filtered_frame,AV_BUFFERSINK_FLAG_NO_REQUEST);  //filtersink端获取数据
av_buffersrc_add_frame_flags(buffersrc_ctx, mVideoFrame, AV_BUFFERSRC_FLAG_PUSH)//filter src端发送数据

扒拉几天了还没有扒拉出来,非常感谢


回复

使用道具 举报

发表于 2019-5-4 20:33:22 | 显示全部楼层
mp4的话,moov是在mdat前面不
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-6 13:39:01 | 显示全部楼层
moov 是在mdata后边,我找了个转换函数,把moov放在mdata前生成了一个新的mp4,暴风影音就播放不了这个文件,然后avformat_open_input时就失败了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Archiver|ChinaFFmpeg

GMT+8, 2024-12-27 01:14 , Processed in 0.060144 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表