在ffmpeg中读取JPEG

Reading JPEG in ffmpeg

本文关键字:JPEG 读取 ffmpeg      更新时间:2023-10-16

我试图让ffmpeg编码几个单独的JPEG图像到Android上的视频。我已经成功地为Android构建了它(参见本文末尾的配置字符串)。

我可以用随机生成的帧内容编码h.263+视频,否则ffmpeg似乎工作得很好。

一个类似的问题表明,以下代码应该足以将图像加载到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)));
}

上面返回正确的绝对文件路径和错误:

Failed '/sdcard/DCIM/Camera/IMG083.jpg': code -1094995529,未知错误:1094995529

顺便说一下,如果我省略av_register_all(),它返回错误2

我用以下参数编译了ffmpeg:

。linux/configure——目标os =——prefix = $前缀——enable-cross-compile——extra-libs = " -lgcc "——拱=手臂预先构建的/bin/arm-linux-androideabi-gcc - cc = $——cross-prefix = $预先构建的/bin/arm-linux-androideabi -——纳米=预先构建的/bin/arm-linux-androideabi-nm美元——sysroot = $平台——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 "——启用共享——静态——extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib - nosdlib -lc -lm -ldl -llog"——disable-everything——enable-demuxer = mov——enable-demuxer = h264——disable-ffplay——enable-protocol =文件——enable-avformat——enable-avcodec——enable-decoder = mjpeg——enable-decoder = png——enable-parser = h264——enable-encoder = h263——enable-encoder = h263p——disable-network——enable-zlib——disable-avfilter——disable-avdevice

欢迎提出任何建议!

此错误表明JPEG所需的解码器没有与ffmpeg一起构建。我相信启用mjpeg足以使其工作,但出于沮丧,我只是启用了所有内容,并且它工作了。

我建议将--enable-decoder=mjpeg添加到配置字符串中,并使用NDK为Android重建库。如果这不起作用,删除--disable-everything并单独删除不兼容的组件,直到它成功编译(我相信只是添加--disable-indev对Android有效)。

注意:除了"mjpeg" muxer/demuxer/解析器外,还需要"image2" muxer/demuxer.

在调用./configure时需要启用mjpeg和image2

--enable-decoder=mjpeg --enable-demuxer=image2

我刚刚检查了我的代码,读取jpg。