在ffmpeg中读取JPEG

时间:2011-08-18 21:57:17

标签: android c++ ffmpeg video-encoding

我正在尝试让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

  

欢迎任何建议!

3 个答案:

答案 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 的代码检查了它。