Mac 上编译 ffmpeg 方法

准备工作

下载最新的 ffmpeg 下载地址为:

https://www.ffmpeg.org

下载 ndk 下载地址为 :

http://developer.android.com/ndk/downloads/index.html

下载后文件在 Mac 中的存放路径如下:

ChendeMacBook-Pro:compileFF chenzongwen lsandroidndkr11bffmpeg3.0ChendeMacBookPro:compileFFchenzongwen pwd
/Users/chenzongwen/compileFF
ChendeMacBook-Pro:compileFF chenzongwen$

编译 ffmpeg

首先进入 ffmpeg-3.0文件夹 ,在文件夹中增加 编译脚本 ffmpegConfig 文件如下图 :

ChendeMacBook-Pro:ffmpeg-3.0 chenzongwen$ ls
COPYING.GPLv2    RELEASE_NOTES   config.h    ffmpeg_filter.c     ffprobe.c   libavutil
COPYING.GPLv3    VERSION     config.log  ffmpeg_filter.d     ffprobe.d   libpostproc
COPYING.LGPLv2.1    arch.mak     config.mak  ffmpeg_filter.o     ffprobe.o   library.mak
COPYING.LGPLv3   cmdutils.c  configure   ffmpeg_g    ffprobe_g   libswresample
CREDITS  cmdutils.d  doc     ffmpeg_opt.c    ffserver.c  libswscale
Changelog    cmdutils.h  ffmpeg  ffmpeg_opt.d    ffserver_config.c  presets
INSTALL.md   cmdutils.o  ffmpeg.c    ffmpeg_opt.o    ffserver_config.h  tests
LICENSE.md   cmdutils_common_opts.h ffmpeg.d     ffmpeg_qsv.c    libavcodec  tools
MAINTAINERS  cmdutils_opencl.c  ffmpeg.h     ffmpeg_vdpau.c  libavdevice     version.sh
Makefile     common.mak  ffmpeg.o    ffmpeg_videotoolbox.c  libavfilter
README.md    compat  ffmpegConfig    ffplay.c    libavformat
RELEASE  config.fate     ffmpeg_dxva2.c  ffprobe     libavresample
ChendeMacBook-Pro:ffmpeg-3.0 chenzongwen$ 

ffmpegConfig文件内容如下:


#!/bin/bash

NDK=/Users/chenzongwen/compileFF/android-ndk-r11b
export PATH=$PATH:$NDK
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64


function build_one
{
bash  ./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffserver \
    --enable-cross-compile \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --extra-libs=-lgcc \
    --sysroot=$SYSROOT \
    --enable-asm \
    --enable-neon \
    --extra-cflags="-O3 -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm -mfpu=neon"
build_one
~                                                                                                                                                            
~                                                                                                                                                           

然后在当前文件夹下执行如下命令:

1、chenzongwen ./ffmpegConfig2chenzongwen make -j4 //4 为 用4个cup进行编译
3、chenzongwen$ make install

命令执行完之后会在当前文件夹下生成一个android 文件夹 android/arm 文件夹中的内容如下几个文件夹 : bin include lib share

include 中存放的是头文件, lib 中存放的是 so 文件 整个编译过程结束 。

如何使用 ffmpeg

1、 在跟 anroid-ndk-r11b ffmpeg-3.0 同级的目录下 创建 jni 文件夹

如下 :

ChendeMacBook-Pro:compileFF chenzongwen mkdirjniChendeMacBookPro:compileFFchenzongwen ls
android-ndk-r11b ffmpeg-3.0 jni
2、将之前编译的头文件(在 include 文件夹下)拷贝到 jni 文件夹下 并且在 jni 文件夹下创建prbuilt文件夹 并将之前生成的 so(在 lib 文件夹下)拷贝到 prebuilt 文件夹下, 拷贝完成后如下图:

ChendeMacBook-Pro:jni chenzongwen$ ls
libavcodec  libavdevice libavfilter libavformat libavutil   libswresample   libswscale  prebuild
ChendeMacBook-Pro:jni chenzongwen$ ls prebuild/
libavcodec-57.so    libavfilter-6.so    libavutil-55.so  libswscale-4.so
libavdevice-57.so   libavformat-57.so   libswresample-2.so  libswscale.so
ChendeMacBook-Pro:jni chenzongwen$ 

3、调用 so 方法 在当前文件夹下添加两个文件 Android.mk 和 Application.mk 内容分别如下 Android.mk 内容

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := avcodec-56-prebuilt
LOCAL_SRC_FILES := prebuilt/libavcodec-57.so
include $(PREBUILT_SHARED_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE := avdevice-56-prebuilt
#LOCAL_SRC_FILES := prebuilt/libavdevice-57.so
#include $(PREBUILT_SHARED_LIBRARY)

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

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

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

include $(CLEAR_VARS)
LOCAL_MODULE :=  avswresample-1-prebuilt
LOCAL_SRC_FILES := prebuilt/libswresample-2.so
include $(PREBUILT_SHARED_LIBRARY)

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

include $(CLEAR_VARS)

Application.mk 的内容如下 :

ChendeMacBook-Pro:jni chenzongwen$ vim Application.mk 
APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := android-10

编写调用文件 在当前文件夹下创建 com.owenchan.Test.c 文件 测试内容如下:

#include <math.h>

#include <libavutil/opt.h>

#include <libavcodec/avcodec.h>

#include <libavutil/channel_layout.h>

#include <libavutil/common.h>

#include <libavutil/imgutils.h>

#include <libavutil/mathematics.h>

#include <libavutil/samplefmt.h>

#include <libavformat/avformat.h>

#include <libswscale/swscale.h>

#include <libavutil/pixfmt.h>

#include <stdio.h>

#include <wchar.h>

#include <jni.h>

#include <android/bitmap.h>

#include <string.h>



/*for android logs*/

#include <android/log.h>



#ifdef __cplusplus

extern "C" {

#endif



#if DEBUG

#  define  D(x...)  __android_log_print(ANDROID_LOG_INFO, "h264decoder", x)

#else

#  define  D(...)  do {} while (0)

#endif

JNIEXPORT jint JNICALL Java_com_owenchan_Test_sum

  (JNIEnv * env, jobject obj,jint w, jint h)

{

    return w * h;

}

#ifdef __cplusplus

}

#endif

开始编译 在 jni 目录下执行 :

ChendeMacBook-Pro:jni chenzongwen$ ../android-ndk-r11b/ndk-build

最后将 如下目录下的so 拷贝到工程中就可以使用了。

ChendeMacBook-Pro:armeabi chenzongwen$ pwd
/Users/chenzongwen/compileFF/libs/armeabi
ChendeMacBook-Pro:armeabi chenzongwen$ ls
libavcodec-57.so    libavutil-55.so  libswscale-4.so
libavfilter-6.so    libowenchan_Test.so
libavformat-57.so   libswresample-2.so
ChendeMacBook-Pro:armeabi chenzongwen$ 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值