我已经编译了一个FFMPEG库,可以在Android上使用libx264并使用NDK。
我想对MPEG视频文件进行编码,但在avcodec_open2中打开编码器编解码器时应用程序失败。
我从avcodec_open2收到的FFMPEG日志在下面,函数返回-22。
在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!
}
答案 0 :(得分:0)
此问题是由于使用过时的源代码构建FFMPEG引起的。
我从https://www.ffmpeg.org/获得了最新的来源,并以相同的方式编译它,新的库工作正常。
注意:我没有考虑使用libx264的许可证的全部含义。我放弃了它。