Come build FFmpeg (ver 3.1.1) su Android Studio (versione 2.1.2)

Cerco di build e utilizzare la libreria FFmpeg su Android Studio.

I miei ambienti

Windows 7 64bit, Cygwin64, Android 2.1.1, FFmpeg 3.1.1, Android NDK r12b

  • Perché viene visualizzato un errore "sqlite3: non trovato" in un Nexus One radicato quando tento di aprire un database utilizzando la shell adb?
  • Imansible trovare la class 'com.google.android.gms.location.internal.ParcelableGeofence', indicata dal metodo gls.a
  • EditText che mostra i numbers con 2 decimali in each momento
  • Android - Mescolare più forms statiche in una singola AudioTrack
  • Come sincronizzare il database SQLite in un'applicazione Android, quando i dati cambiano su MySql Database Server
  • Scegli l'image L'intento causa l'exception nullpointer
  • Ref. Pagina

    http://www.roman10.net/2013/08/18/how-to-build-ffmpeg-with-ndk-r9/ Segui questa pagina.

    Rileggono la libreria di FFmpeg usando ./build_android.sh su Cygwin

    quindi cerco di utilizzare la libreria di FFmpeg su Android Studio.

    Impostare Android Studio per utilizzare FFmpeg

    il mio project_path / jni / Android.mk

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := ffmpeg_trim LOCAL_SRC_FILES := ffmpeg_trim.c LOCAL_LDLIBS := -lz -ljnigraphics LOCAL_SHARED_LIBRARIES := libavformat libavcodec libavutil libswscale libswresample LOCAL_EXPORT_C_INCLUDES := ($LOCAL_PATH)/include include $(BUILD_SHARED_LIBRARY) $(call import-module,ffmpeg-3.1.1/android/arm) 

    il mio jni / Application.mk

    APP_ABI := armeabi-v7a

    il mio project_path / jni / ffmpeg_trim.c

     #include "my_package_util_TrimUtil.h" #include <libavformat/avformat.h> JNIEXPORT void JNICALL Java_my_package_videoeditor_util_TrimUtil_registerAll(JNIEnv *env, jobject obj) { av_register_all(); } 

    il mio path_progetto / jni / ffmpeg_trim.h

     /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class my_package_videoeditor_util_TrimUtil */ #ifndef _Included_my_package_videoeditor_util_TrimUtil #define _Included_my_package_videoeditor_util_TrimUtil #ifdef __cplusplus extern "C" { #endif /* * Class: my_package_videoeditor_util_TrimUtil * Method: registerAll * Signature: ()V */ JNIEXPORT void JNICALL Java_my_package_util_TrimUtil_registerAll (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif 

    il mio project_path / build.gradle

     apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "24.0.0" defaultConfig { applicationId "my.package.videoeditor" minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { mp4parser { applicationIdSuffix ".mp4parser" } ffmpeg { applicationIdSuffix ".ffmpeg" ndk { moduleName "ffmpeg_trim" cFlags "-std=c99 -I${project.buildDir}/../src/ffmpeg/jni/include" } sourceSets.main { jni.srcDirs = [] jniLibs.srcDir 'src/ffmpeg/libs' } } } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.googlecode.mp4parser:isoparser:1.1.21' } 

    la mia cartella project_path / jni

    immettere qui la descrizione dell'immagine

    Costruisco il mio progetto.

    Ma, fallito e printingre questo messaggio.

    immettere qui la descrizione dell'immagine

    Non riesco a risolvere il mio problema. Come build e utilizzare la libreria FFmpeg su Android Studio.

    Non dirmi altre librerie usando FFmpeg.

  • + Webview Android - come eseguire la scansione automatica di una pagina?
  • Webview di Android all'interno di un servizio?
  • Android Studio non distribuisce le modifiche app
  • Applicazione non disponibile per Nexus 7 su Google Play
  • Come rilevare la suoneria di allarme o altre applicazioni utilizzando l'altoparlante?
  • Come accedere a res / drawable / "folder"
  • One Solution collect form web for “Come build FFmpeg (ver 3.1.1) su Android Studio (versione 2.1.2)”

    Non ho mai costruito ffmpeg in Android Studio stesso, ho usato la build nativa per quella che installa le libs e le intestazioni nelle proprie directory pronte per essere utilizzate.

    Ecco il mio script di generazione che consente a gpl di accedere al filter deinterlacciamento yadif:

     #!/bin/bash NDK=$HOME/Android/Sdk/ndk-bundle SYSROOT=$NDK/platforms/android-19/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androidabi-4.9/prebuilt/linux-x86_64 CPREFIX=$TOOLCHAIN/bin/arm-linux-androidabi- function build_it { ./configure \ --prefix=$PREFIX \ --disable-static \ --enable-shared \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-avdevice \ --disable-doc \ --disable-symver \ --cross-prefix=$CPREFIX \ --target-os=linux \ --arch=arm \ --enable-cross-compile \ --enable-gpl \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make clean make make install } CPU=arm PREFIX=$(pwd)/android/$CPU ADDI_CFLAGS="-marm" build_it 

    Il mio script di gradi in Android Studio potrebbe aiutare a farti funzionare:

     apply plugin: 'com.android.model.application' model { android { def ffmpeg = "src/main/android/armeabi-v7a/include" buildToolsVersion "23.0.1" compileSdkVersion 23 defaultConfig.with { minSdkVersion.apiLevel = 19 } ndk { moduleName = "ffplayer2jni" ldLibs.addAll("log", "android", "GLESv2", "dl", "atomic", "EGL", "z", "stdc++", "OpenSLES") cppFlags.addAll("-std=c++11", "-fexceptions", '-I'+file(ffmpeg), "-D __cplusplus=201103L", "-frtti", "-D __GXX_EXPERIMENTAL_CXX0X__") CFlags.add('-I'+file(ffmpeg)) stl = "gnustl_static" //stl = "stlport_shared" abiFilters.addAll("armeabi-v7a") } } android.buildTypes { release { minifyEnabled false proguardFiles.add(file('proguard-android.txt')) } } repositories { def loc = "src/main/jniLibs/armeabi-v7a/" libs(PrebuiltLibraries) { libavutil { binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file(loc + "libavutil.so") } } libavcodec { binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file(loc + "libavcodec.so") } } libavformat { binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file(loc + "libavformat.so") } } libavfilter { binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file(loc + "libavfilter.so") } } libpostproc { binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file(loc + "libpostproc.so") } } libswresample { binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file(loc + "libswresample.so") } } libswscale { binaries.withType(SharedLibraryBinary) { sharedLibraryFile = file(loc + "libswscale.so") } } } } android.sources { main { jni { dependencies { library "libavformat" linkage "shared" library "libavcodec" linkage "shared" library "libavfilter" linkage "shared" library "libavutil" linkage "shared" library "libswscale" linkage "shared" library "libswresample" linkage "shared" library "libpostproc" linkage "shared" } } } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.3.0' } 

    EDIT: includere le intestazioni in un progetto cpp

     #define __STDC_LIMIT_MACROS #define __STDC_CONSTANT_MACROS #ifndef INT64_C #define INT64_C(c) (c ## LL) #define UINT64_C(c) (c ## ULL) #endif #ifdef __cplusplus extern "C" { #endif #include <libavutil/frame.h> #include <libavfilter/buffersink.h> #include <libavfilter/buffersrc.h> #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" #include "libavutil/pixfmt.h" #include "libavutil/mathematics.h" #include "libavutil/samplefmt.h" #include "libavfilter/avfilter.h" #include "libavfilter/avfiltergraph.h" #ifdef __cplusplus } #endif #include <string> #include <list> #include <vector> #include "pthread.h" #include "sched.h" #include "unistd.h" #include "stdio.h" #include "time.h" 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.