关闭

使用ndk 编译 编译ffmpeg 并使用

54人阅读 评论(0) 收藏 举报
分类:

有句话说得好,工欲善其事,必先利其器
1、 环境 ubuntu 我的是14.04 android-ndk64-r9b
2、下载ffmpeg http://www.ffmpeg.org/download.html 我现在的是最新版本ffmpeg-3.1.3
3、下载ndk 解压,配置好环境
4、创建jni文件夹,把下载好的ffmpeg解压到穿件号的文件夹中,因为ndk默认先编译jni文件中的文件
5

找到 ffmpeg-xxx/configure 找到如下几行:
Java代码  

    SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'  
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'  
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'  
    SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'  

 上面几行会导致libavcodec.so.<version> (e.g. libavcodec.so.57),不会被android承认 ,修改为;
Java代码  

    SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  
    LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'  
    SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  
    SLIB_INSTALL_LINKS='$(SLIBNAME)'  

5、创建解压好的ffmpeg文件中先建一个config.sh执行脚本

#!/bin/bash

#配置NDK路径
export NDK=/home/lilaishun/ndk/android-ndk-r9b
#配置工具链
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt
#配置平台
export PLATFORM=$NDK/platforms/android-8/arch-arm

#配置编译好了之后的文件输出目录,$(pwd)当前目录下
export PREFIX=$(pwd)/androids/
build_one(){
  ./configure --target-os=linux --prefix=$PREFIX \
--enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-gpl --enable-shared --disable-static --enable-nonfree --enable-version3 --enable-small \
--enable-zlib --disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" 
}
build_one
make -j4
make install

6、打开终端,cd到脚本的位置 chmod +x config.sh//给脚本添加执行权限
./config.sh
这是终端会开始执行脚本,并编译大约20多分钟编译停止后
在androids文件会生成也就是我们想要的库文件
.so文件不带数字的是软连接,可以删掉头文件

7.创建android项目并创建一个jni文件夹
把编译好的文件拷贝到jni中,新建Android.mk文件

LOCAL_PATH := $(call my-dir)

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

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

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

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

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

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

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

include $(CLEAR_VARS)
LOCAL_MODULE :=  postproc-54-prebuilt
LOCAL_SRC_FILES :=libpostproc-54.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE    := test_jni
LOCAL_SRC_FILES := test_jni.cpp
LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid
LOCAL_SHARED_LIBRARIES :=avcodec-57-prebuilt avfilter-6-prebuilt avfilter-6-prebuilt avformat-57-prebuilt avutil-55-prebuilt swscale-4-prebuilt postproc-54-prebuilt swresample-2-prebuilt


include $(BUILD_SHARED_LIBRARY)

下面是我编译好的库文件测试可以使用需要的可以去下载
http://download.csdn.net/detail/qq_18144521/9616304

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

MAC系统下利用NDK编译可供Android使用的FFmpeg(3.2.4)库

最近在初步学习播放器,今天编译了FFmpeg库给Android使用。          Step  1:首先在MAC上安装NDK,我这里使用的是ndk-r10e;          St...
  • icewong2011
  • icewong2011
  • 2017-03-18 01:55
  • 288

基于mac,ndk开发,使用android studio 编译ffmpeg(二)

参考资料:1.http://www.jb51.net/article/77720.htm  1.首先前往ffmpeg.org网站,进入download目录下,复制git命令。打开terminal...
  • kemp_chen
  • kemp_chen
  • 2016-05-03 13:17
  • 944

window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库

window环境下使用ndk编译出android studio 能使用的ffmpeg动态库目录window环境下使用ndk编译出android studio 能使用的ffmpeg动态库 ffmepg介...
  • u013252711
  • u013252711
  • 2016-08-20 17:26
  • 1501

Mac下为Android Studio编译Ffmpeg(一)ndk部分

本文参考http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/。 但它只适合做编码,而且没有Android Studio配置的部分。 1、下载n...
  • coloriy
  • coloriy
  • 2015-08-06 14:45
  • 1153

NDK编译FFMPEG所遇问题的解决方法(一)

最近要将FFMPEG v2.1.1移植到我的安卓程序当中去。在NDK变异的过程中遇到了以下的问题: $ $NDK/ndk-build NDK_PROJECT_PATH=$NDK/samples...
  • u014510919
  • u014510919
  • 2014-04-02 23:12
  • 1738

MAC下使用ndk编译ffmpeg

ffmpeg是c语言的库,主要作用是对音视频进行编解码等操作。是android进阶必须要掌握的一门技术。通过使用ffmpeg可以提高对android ndk的认识和熟练度。第一步当然就是编译ffmpe...
  • ZACH_ZHOU
  • ZACH_ZHOU
  • 2017-12-20 17:56
  • 59

二、验证ffmpeg ndk编译出来的so可行的简单例子

1.ffmpeg的编译请参考 一、ffmpeg编译成android使用的so库 2.在ndk路径(如~/android-ndk-r13b/)下创建一个文件夹,如 ffmpegTest ,在ffmpe...
  • sunwutian0325
  • sunwutian0325
  • 2016-12-02 18:23
  • 1008

windows下编译最新版ffmpeg3.3-android,并通过CMake方式移植到Android studio2.3中

windows下编译最新版ffmpeg3.3win下编译: 1.下载安装MinGW:http://sourceforge.net/projects/mingw/files/ 2.下载yasm ht...
  • King1425
  • King1425
  • 2017-04-21 20:34
  • 4337

Windows下使用NDK交叉编译ACE 6.2.0

一. 设置NDK交叉编译环境(ARM平台) 可以参考 NDK主目录下的/docs/STANDALONE-TOOLCHAIN.html 1. 运行Cygwin Terminal 2. 生成NDK sta...
  • hcj116
  • hcj116
  • 2014-02-23 18:13
  • 2586

android ndk开发之一 编译ffmpeg

之所以要在linux下编译ffmpeg,是因为在windows下的坑很多,而且在linux下编译方便快捷。安装现在大部分的电脑都是windows,所以我们可以先装个虚拟机,装个linux系统,这里不详...
  • Loften_93663469
  • Loften_93663469
  • 2017-01-14 14:34
  • 480
    个人资料
    • 访问:95次
    • 积分:35
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    最新评论