尝试使用FFMPEG for android。编译但仍无法正常工作

时间:2014-04-04 19:08:35

标签: android android-ndk ffmpeg gradle

所以开始吧...我试图使用ffmpeg将一组图像编译成Android上的视频。

我已经在线阅读了各种教程,并且已经能够为Android编译lib并且仍然需要项目运行。 现在使用的回购可以在这里找到:https://github.com/Batterii/android-ffmpeg-x264

我对setttings.sh做了一些调整,只是为了纠正ndk的位置。除此之外,我按照说明进行操作,似乎完美无瑕。

之后,我将“Project”项目转换为Android stdio库模块。 Screenshot of android studio module

我没有得到任何编译错误,也没有得到任何运行时错误,或者我可以检测到的任何其他错误......在logcat上没什么......但我绝对没有得到任何视频out.mp4。 在特定活动的onCreate中,我正在运行此代码:

Videokit vk = new Videokit();
vk.run(new String[]{"ffmpeg", "-r", "1/5", "-i", "%d.jpg", "-c:v", "libx264", "-r", "30", "-pix_fmt", "yuv420p", project.getProjectDirectory() + "/out.mp4"});

此命令取自此处的命令行示例: https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images

提前感谢所有花时间浏览这篇文章的人...我对此感到非常困惑,因为我找不到任何错误,也没有视频...... 感谢

=============================================== =======================

更新

原来它实际上并没有正确编译......但我找到了一些东西。 这是项目的Eclipse版本的make文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE  := videokit
# These need to be in the right order
FFMPEG_LIBS := $(addprefix ffmpeg/, \
 libavdevice/libavdevice.a \
 libavformat/libavformat.a \
 libavfilter/libavfilter.a \
 libavcodec/libavcodec.a \
 libswscale/libswscale.a \
 libavutil/libavutil.a \
 libswresample/libswresample.a \
 libpostproc/libpostproc.a )
# ffmpeg uses its own deprecated functions liberally, so turn off that annoying noise
LOCAL_CFLAGS += -g -Iffmpeg -Ivideokit -Wno-deprecated-declarations 
LOCAL_LDLIBS += -llog -lz $(FFMPEG_LIBS) x264/libx264.a
LOCAL_SRC_FILES :=  ffmpeg/cmdutils.c ffmpeg/ffmpeg.c videokit/uk_co_halfninja_videokit_Videokit.c
include $(BUILD_SHARED_LIBRARY)

以下是gradle为我自动生成的make文件...感谢Android Studio ...

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := videokit
LOCAL_CFLAGS := -g -Isrc/main/jni/ffmpeg -Isrc/main/jni/videokit -Wno-deprecated-declarations
LOCAL_LDLIBS := \
    -lffmpeg/libavformat/libavformat.a \
    -lffmpeg/libavcodec/libavcodec.a \
    -lffmpeg/libswresample/libswresample.a \
    -lffmpeg/libavfilter/libavfilter.a \
    -lffmpeg/libpostproc/libpostproc.a \
    -lffmpeg/libavdevice/libavdevice.a \
    -lx264/libx264.a \
    -lffmpeg/libavutil/libavutil.a \
    -llog \
    -lz \
    -lffmpeg/libswscale/libswscale.a \

LOCAL_SRC_FILES := \
    Project/Module/src/main/jni/ffmpeg/cmdutils.c \
    Project/Module/src/main/jni/ffmpeg/ffmpeg.c \
    Project/Module/src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c \

LOCAL_C_INCLUDES += Project/Module/src/main/jni/ffmpeg/cmdutils.c
LOCAL_C_INCLUDES += Project/Module/src/main/jni/ffmpeg/ffmpeg.c
LOCAL_C_INCLUDES += Project/Module/src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c
LOCAL_C_INCLUDES += Project/Module/src/arm/jni
LOCAL_C_INCLUDES += Project/Module/src/debug/jni
LOCAL_C_INCLUDES += Project/Module/src/armDebug/jni

include $(BUILD_SHARED_LIBRARY)

最后,这是我的build.gradle

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.1'

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"

        ndk {
            moduleName "videokit"
            stl "stlport_shared"
            ldLibs "log", "z",
                    "ffmpeg/libavdevice/libavdevice.a",
                    "ffmpeg/libavformat/libavformat.a",
                    "ffmpeg/libavfilter/libavfilter.a",
                    "ffmpeg/libavcodec/libavcodec.a",
                    "ffmpeg/libswscale/libswscale.a",
                    "ffmpeg/libavutil/libavutil.a",
                    "ffmpeg/libswresample/libswresample.a",


              "ffmpeg/libpostproc/libpostproc.a",
                "x264/libx264.a"
            cFlags "-g -Isrc/main/jni/ffmpeg -Isrc/main/jni/videokit -Wno-deprecated-declarations"

        }
    }

    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
        jni.srcDirs = ['src/main/jni/ffmpeg/cmdutils.c',
                       'src/main/jni/ffmpeg/ffmpeg.c',
                       'src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c']
    }

    productFlavors {
        x86 {
            versionCode Integer.parseInt("6" + defaultConfig.versionCode)
            ndk {
                abiFilter "x86"
            }
        }
        mips {
            versionCode Integer.parseInt("4" + defaultConfig.versionCode)
            ndk {
                abiFilter "mips"
            }
        }
        armv7 {
            versionCode Integer.parseInt("2" + defaultConfig.versionCode)
            ndk {
                abiFilter "armeabi-v7a"
            }
        }
        arm {
            versionCode Integer.parseInt("1" + defaultConfig.versionCode)
            ndk {
                abiFilter "armeabi"
            }
        }
        fat
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.0.0'
    compile fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
}

正如您所看到的,我的build.gradle生成的内容非常接近原始内容......但不一样。当我尝试运行/编译它时,gradle吐出来

Executing tasks: [:Project:assembleArmDebug]

:Project:compileArmDebugNdkcc1: warning: Project/Module/src/main/jni/ffmpeg/cmdutils.c: not a directory [enabled by default]
cc1: warning: Project/Module/src/main/jni/ffmpeg/ffmpeg.c: not a directory [enabled by default]
cc1: warning: Project/Module/src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c: not a directory [enabled by default]
In file included from Project/Module/src/main/jni/ffmpeg/cmdutils.c:32:0:
Project/Module/src/main/jni/ffmpeg/libavformat/avformat.h:82:32: fatal error: libavcodec/avcodec.h: No such file or directory
compilation terminated.
make: *** [Project/Module/build/ndk/arm/debug/obj/local/armeabi/objs/videokit/Project/Module/src/main/jni/ffmpeg/cmdutils.o] Error 1
 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Project:compileArmDebugNdk'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    android-ndk-r9d/ndk-build NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=Project/Module/build/ndk/arm/debug/Android.mk APP_PLATFORM=android-19 NDK_OUT=Project/Module/build/ndk/arm/debug/obj NDK_LIBS_OUT=Project/Module/build/ndk/arm/debug/lib APP_STL=stlport_shared APP_ABI=armeabi
  Error Code:
    2
  Output:
    cc1: warning: Project/Module/src/main/jni/ffmpeg/cmdutils.c: not a directory [enabled by default]
    cc1: warning: Project/Module/src/main/jni/ffmpeg/ffmpeg.c: not a directory [enabled by default]
    cc1: warning: Project/Module/src/main/jni/videokit/com_t10_project_util_FfmpegHelper.c: not a directory [enabled by default]
    In file included from Project/Module/src/main/jni/ffmpeg/cmdutils.c:32:0:
    Project/Module/src/main/jni/ffmpeg/libavformat/avformat.h:82:32: fatal error: libavcodec/avcodec.h: No such file or directory
    compilation terminated.
    make: *** [Project/Module/build/ndk/arm/debug/obj/local/armeabi/objs/videokit/Project/Module/src/main/jni/ffmpeg/cmdutils.o] Error 1


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 8.184 secs

我现在已经搞乱了几个小时,而且几乎每次,我都在大吼大叫,因为它无法找到一些文件。我开始认为可能是因为我的LOCAL_LDLIBS与原来的顺序不一样......?我不完全确定......有没有其他人有任何想法......?

0 个答案:

没有答案
相关问题