3

그래서 시작하려면 ... 안드로이드에서 비디오의 이미지 배열을 컴파일 ffmpeg를 사용하려고합니다.

나는 온라인에서 다양한 튜토리얼을 따라 왔고 안드로이드 용 lib를 컴파일 할 수있는 한 아직까지 프로젝트를 실행해야했습니다. 현재 사용중인 repo는 다음에서 찾을 수 있습니다.https://github.com/Batterii/android-ffmpeg-x264

나는 ndk 위치를 정정하기 위해 setttings.sh에 몇 가지 비틀기를 만들었다. 그 외에, 나는 지시를 따랐다. 그리고 그것은 완전하게 작동하는 것처럼 보였다.

그 후, 나는 "프로젝트"프로젝트를 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

이 게시물을 보면서 시간을내어 주셔서 미리 감사드립니다 ... 나는 아무런 오류도없고 비디오도 없으므로이 시점에서 꽤 당황 스럽습니다 ... 감사

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

최신 정보

실제로 제대로 컴파일되지는 않지만 ... 몇 가지를 발견했습니다. 다음은 이클립스 버전의 프로젝트 파일이다.

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)

그리고 마지막으로 여기에 제 빌드가 있습니다.

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가 원본과 동일한 순서로 있지 않기 때문에 아마도 그럴 것이라고 생각하기 시작했습니다 ...? 완전히 확실하지 않은 Im ... 다른 누군가는 어떤 생각을 가지고 있냐? ..?


  • project.getProjectDirectory () - 시작 무엇입니까? " / sdcard / "에서 하드 코드를 제거하십시오. 대신에 작업을 알기 전까지는 그런 다음 매니페스트에 WRITE_EXTERNAL_STORAGE 권한이 있는지 확인하십시오. 또한 프로젝트에서 ffmpeg.c 파일을보고 av_log () 함수를 사용하는 장소를 검색하고 LOGI ()를 호출하여 유사한 메시지를 기록 할 것을 제안합니다. 그러면 logcat에 더 많은 출력을 보내고 문제를 찾을 수 있습니다. - themightyjon
  • project.getProjectDirectory ()는 현재 ' 프로젝트 ' 나는 이것이 정확하게 이미지를 저장하고 있기 때문에 이미이 작품을 알고있다. av_log 및 LOGI에 관해서는 그 정보를 추가하고 더 많은 정보를 얻을 수 있는지 확인합니다. - Austin Mueller
  • 파일을 디렉토리 (jni.srcDirs에 있음)로 지정한 3 가지 경고가 표시되고 ffmpeg 헤더 파일이 포함 경로에없는 것 같아서 주어진 장소는 그들이 생각하는 곳에 상대적이지 않습니다. 다른 곳과 비교하여 메이크 파일을 생성하는 경로가 있다고 가정했을 때 가능성이 높습니다. - themightyjon
  • " 프로젝트 / 모듈 / " 비트를 포함 경로의 앞부분에 표시하거나 지금 절대 지정하고 작동하는지 확인하십시오. " 정보 "로 gradle을 실행할 수 있다는 것을 잊지 마십시오. 또는 "- debug" 커맨드 라인에서 어떤 일이 일어 났는지에 대한 더 많은 정보를 얻고, jn 디렉토리에서 생성 된 makefile에 대해 V = 1로 ndk-build를 실행하여 그 자세한 정보를 만들 수있다. - themightyjon

연결된 질문


관련된 질문

최근 질문