android - 在 ffmpeg 中读取 JPEG

标签 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)));
}

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

Failed '/sdcard/DCIM/Camera/IMG083.jpg': code -1094995529, Unknown error: 1094995529

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

我已经使用以下参数编译了 ffmpeg:

./configure --target-os=linux --prefix=$PREFIX --enable-cross-compile --extra-libs="-lgcc" --arch=arm --cc=$PREBUILT/bin/arm-linux-androideabi-gcc --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- --nm=$PREBUILT/bin/arm-linux-androideabi-nm --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-shared --enable-static --extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" --disable-everything --enable-demuxer=mov --enable-demuxer=h264 --disable-ffplay --enable-protocol=file --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 for Android 重建库。如果这不起作用,请删除 --disable-everything 并单独删除不兼容的组件,直到它成功编译(我相信只需添加 --disable-indev 就可以为 Android 工作) .

关于android - 在 ffmpeg 中读取 JPEG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7114629/

相关文章:

android - 使用 android gradle 插件版本 7.0.0-alpha15 时无法使用 kotlin-gradle-dsl 脚本

android从appwidget获取屏幕宽度

c++ - 为什么要避免在 C++ 中使用单例

java - jni 字符串转 *char 和 java.lang.UnsatisfiedLinkError :

ffmpeg - 多次执行相同的ffmpeg命令时出现问题

php 和 ffmpeg 500 内部服务器错误

ffmpeg 在指定的起始位置剪切视频

android - react 原生无法构建Android APK。 gradlew clean和…命令失败

安卓布局 : How to keep right-most text element and ellipsize left-most text element as it grows?

c++ - 如何在 C++ QT 中使用 google-diff-match-patch 库?