我正在尝试让ffmpeg将几个单独的JPEG图像编码为Android上的视频。我已成功为Android构建它(请参阅本文末尾的配置字符串)。
我可以使用随机生成的帧内容对h.263 +视频进行编码,否则ffmpeg看起来效果不错。
A similar question建议以下代码足以将图片加载到AvFrame
:
// Make sure we have the codecs
av_register_all();
AVFormatContext *pFormatCtx;
int ret = av_open_input_file(&pFormatCtx, imageFileName, NULL, 0, NULL);
if (ret != 0) {
printf("Can't open image file '%s': code %d, %s",
imageFileName, ret, strerror(AVERROR(ret)));
}
以上内容返回正确的绝对文件路径和错误:
失败'/sdcard/DCIM/Camera/IMG083.jpg':代码-1094995529,未知错误:1094995529
顺便提一下,如果我省略av_register_all()
,则会返回错误 2 。
我用以下参数编译了ffmpeg:
./ configure --target-os = linux --prefix = $ PREFIX --enable-交叉编译 --extra-库= “ - lgcc” --arch =臂 --CC = $预建/斌/ ARM-Linux的androideabi-GCC --cross前缀= $预建/斌/ ARM-Linux的androideabi- --nm = $预建/ bin中/臂-Linux的androideabi纳米 --sysroot = $ PLATFORM --extra-cflags =“ - O3 -fpic -DANDROID -DHAVE_SYS_UIO_H = 1 -Dipv6mr_interface = ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit = 300 $ OPTIMIZE_CFLAGS” --enable共享 --enable-静 --extra-ldflags =“ - Wl,-rpath-link = $ PLATFORM / usr / lib -L $ PLATFORM / usr / lib -nostdlib -lc -lm -ldl -llog” - 禁用一切 --enable-分路= MOV --enable-分路= H264 - 禁用ffplay --enable协议=文件 --enable-avformat --enable-avcodec中 --enable解码器= MJPEG --enable解码器= PNG --enable解析器= H264 --enable编码器= H263 --enable编码器= h263p - 禁用网络 --enable-zlib的 - 禁用avfilter --disable-avdevice
欢迎任何建议!
答案 0 :(得分:2)
此错误表明JPEG所需的解码器不是与ffmpeg一起构建的。我认为启用mjpeg
就足以让它发挥作用,但出于挫败感,我只是启用了所有内容并且它有效。
我建议将--enable-decoder=mjpeg
添加到配置字符串并使用NDK for Android重建库。如果这不起作用,请删除--disable-everything
并单独删除不兼容的组件,直到它成功编译(我相信只需添加--disable-indev
适用于Android)。
答案 1 :(得分:2)
注意:除了“mjpeg”muxer / demuxer / parser之外,还需要“image2”muxer / demuxer。
答案 2 :(得分:0)
如 No One 所写,您需要在调用 ./configure
时启用 mjpeg 和 image2
--enable-decoder=mjpeg --enable-demuxer=image2
我刚刚用读取 jpg 的代码检查了它。