FFMPEG x264编码器Android

时间:2014-09-24 10:08:02

标签: android android-ndk ffmpeg x264 libx264

我已经编译了一个FFMPEG库,可以在Android上使用libx264并使用NDK。

我想对MPEG视频文件进行编码,但在avcodec_open2中打开编码器编解码器时应用程序失败。

我从avcodec_open2收到的FFMPEG日志在下面,函数返回-22。

  • 图片大小%ux%u无效。
  • 忽略无效的宽度/高度值
  • 不支持指定的pix_fmt

在Windows上,这段代码运行正常,只有在Android上才会出现故障。任何想法为什么这会在Android上失败?

if (!(codec = avcodec_find_encoder(AV_CODEC_ID_MPEG1VIDEO)))
    {
        return -1;
    }

    //Allocate context based on codec
    if (!(context = avcodec_alloc_context3(codec)))
    {
        return -2;
    }

    //Setup Context
    // put sample parameters
    context->bit_rate = 4000000;
    // resolution must be a multiple of two
    context->width = 1280;
    context->height = 720;
    // frames per second
    context->time_base = (AVRational){1,25};
    context->inter_quant_bias = 96;
    context->gop_size = 10;
    context->max_b_frames = 1;
    //IDs
    context->pix_fmt = AV_PIX_FMT_YUV420P;
    context->codec_id = AV_CODEC_ID_MPEG1VIDEO;
    context->codec_type = AVMEDIA_TYPE_VIDEO;


    if (AV_CODEC_ID_MPEG1VIDEO == AV_CODEC_ID_H264)
    {
        av_opt_set(context->priv_data, "preset", "slow", 0);
    }

    if ((result = avcodec_open2(context, codec, NULL)) < 0)
    {
        //Failed opening Codec!
    }

1 个答案:

答案 0 :(得分:0)

此问题是由于使用过时的源代码构建FFMPEG引起的。

我从https://www.ffmpeg.org/获得了最新的来源,并以相同的方式编译它,新的库工作正常。

注意:我没有考虑使用libx264的许可证的全部含义。我放弃了它。