gpt4 book ai didi

android - 如何在 Android Studio (ver 2.1.2) 上构建 FFmpeg (ver 3.1.1)

转载 作者:行者123 更新时间:2023-12-04 23:16:06 27 4
gpt4 key购买 nike

我尝试在 Android Studio 上构建和使用 FFmpeg 库。
我的环境
Windows 7 64 位、Cygwin64、Android Studio 2.1.2、FFmpeg 3.1.1、Android NDK r12b
引用。页
http://www.roman10.net/2013/08/18/how-to-build-ffmpeg-with-ndk-r9/我关注这个页面。
我在 Cygwin 上使用 ./build_android.sh 成功构建了 FFmpeg 库
所以我尝试在 Android Studio 上使用 FFmpeg 库。
设置 Android Studio 以使用 FFmpeg
我的项目路径/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)
我的 jni/Application.mk APP_ABI := armeabi-v7a 我的项目路径/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();
}
我的项目路径/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
我的项目路径/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'
}
我的 project_path/jni 文件夹
enter image description here
我建立我的项目。
但是,失败并打印此消息。
enter image description here
我无法解决我的问题。如何在 Android Studio 上构建和使用 FFmpeg 库。
不要告诉我其他使用 FFmpeg 的库。

最佳答案

我从来没有在 Android Studio 本身中构建过 ffmpeg,我使用原生构建来将库和头文件安装在自己的目录中以供使用。

这是我的构建脚本,它启用了 gpl,因此我可以访问 yadif deinterlace 过滤器:

#!/bin/bash

NDK=$HOME/Android/Sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-

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

我在 Android Studio 中的 gradle 脚本可能会帮助您启动并运行:
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'
}

编辑:在 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"

关于android - 如何在 Android Studio (ver 2.1.2) 上构建 FFmpeg (ver 3.1.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com