美文网首页
Android编译FFmpeg

Android编译FFmpeg

作者: 火烛明 | 来源:发表于2017-05-29 08:24 被阅读0次

最近一直在忙公司的项目,抽空研究了一下FFmpeg, 期间遇到了一些问题,难受了一个星期,总算弄出来了。在此记录一下,以便后面用时参考。

第一步:要在As中集成NDK插件,并且配置环境变量, 并编写Hellojni项目尝试写一个hello-jni

可以参考
http://blog.csdn.net/tongseng/article/details/53005123
http://blog.csdn.net/u011368551/article/details/50897874
http://www.jianshu.com/p/f3229ed57da9
这些文章

mac下编译 ffmpeg 参考http://www.jianshu.com/p/a1fe55d5683b

第二步:下载FFmpeg

https://ffmpeg.org/download.html#build-windows

第三步:编写build_android.sh脚本

注意:


Paste_Image.png

后来 我写成了我的ndk的全路径了
export TMPDIR="D:/ffmpeg-3.3/jni/temp"
NDK=F:\Local\Android\sdk\ndk-bundle
SYSROOT=F:/Local/Android/sdk/ndk-bundle/platforms/android-21/arch-arm
TOOLCHAIN=F:/Local/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
function build_one
{
./configure
--prefix=$PREFIX
--enable-shared
--disable-static
--disable-doc
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--disable-avdevice
--disable-doc
--disable-symver
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
--target-os=linux
--arch=arm
--enable-cross-compile
--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_one

第四步:下载mingw和msys批处理软件
http://download.csdn.net/detail/gedongli/9847433

http://download.csdn.net/download/gedongli/9847507

第五步:在msys命令框中执行build_android.sh脚本进行批处理文件
注意:要在下载的ffmepeg文件路径下执行build_andorid.sh

image.png

到此为止,幸运的话就会看到下载的ffmpeg文件夹下多出android文件夹

image.png image.png image.png image.png

第六步:从ffmpeg生成的android的lib文件和include文件夹copy到android工程jni目录下

image.png

第七步:编写demo.c文件、Android.mk文件、Application.mk文件

1.编写Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := avcodec
LOCAL_SRC_FILES := libavcodec-57.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avfilter
LOCAL_SRC_FILES := libavfilter-6.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avformat
LOCAL_SRC_FILES := libavformat-57.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avutil
LOCAL_SRC_FILES := libavutil-55.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := swresample
LOCAL_SRC_FILES := libswresample-2.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := swscale
LOCAL_SRC_FILES := libswscale-4.so
include $(PREBUILT_SHARED_LIBRARY)

#######Program

include $(CLEAR_VARS)
LOCAL_MODULE := demo
LOCAL_SRC_FILES := demo.c
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
LOCAL_LDLIBS := -llog -lz
LOCAL_SHARED_LIBRARIES := avcodec avfilter avformat avutil swresample swscale
include $(BUILD_SHARED_LIBRARY)

注意# Program下的编写, 在集成的时候,因为不注意# Program 造成编译时总是找不到文件

2.编写Application.mk
Application.mk文件下就2行

APP_ABI := armeabi-v7a
APP_PLATFORM := android-14
3.编写demo.c文件

#######include <string.h>
#######include <jni.h>
#######include "libavcodec/avcodec.h"
JNIEXPORT jstring JNICALL Java_news_com_android_ffmpegdemo_MainActivity_getStrFromJNI(JNIEnv *env, jclass type){

char info[10000] = { 0 };
sprintf(info, "%s\n", avcodec_configuration());

return (*env)->NewStringUTF(env, info);

}

第八步:

image.png

编译后会发现libs包下有相关的ffmepg的.so文件生成

image.png

第九步:编写MainActivity并运行

image.png image.png

相关文章

网友评论

      本文标题:Android编译FFmpeg

      本文链接:https://www.haomeiwen.com/subject/xalyxxtx.html