ffmpeg2.6.2在Ubuntu下使用NDK编译成.so文件
2015-05-15 10:19
531 查看
参考blog:http://www.cnblogs.com/wainiwann/p/3785485.html
由于需要做视频播放器,编解码部分需要用到ffmpeg,没办法只能编译ffmpeg.so
接下来就是参考网上多个ffmpeg的编译过程,在多次尝试后终于编译成功,记录下过程方便以后查询,同时也跟大家分享下!
ps:不喜勿喷!
-------------------------------------------------------------------------
配置环境:
1、 安装Ubuntu 10.04.4(32位)
2、下载ffmpeg-2.6.2.tar.bz2
3、下载android-ndk-r9d-linux-x86.tar.bz2(32位)
---------------------------------------------------------------------
4、ndk解压目录:/home/xxx/android-ndk-r9d (xxx:就是你的个人文件夹)
(1.) 配置NDK的环境变量:
终端内执行:“ gedit ~/.bashrc ”
在打开的文件末尾添加如下内容:
NDK=/home/xxx/android-ndk-r9d
export NDK
(2.)在当前bash环境下读取并执行 ~/.bashrc 中的命令:
终端执行:" source ~/.bashrc "
(3.)查看是否生效:
终端执行: " echo $NDK "
结果:/home/xxx/android-ndk-r9d
(4.)测试NDK编译JNI工程:
到android-ndk-r9d 的sample目录的hello-jni 目录里
终端执行:“ $NDK/ndk-build ”
如果环境配置成功会生成so库的。
-----------------------------------------------------------------
5、解压ffmpeg-2.6.2.tar.bz2
将ffmpeg-2.2.tar.gz解压后拷贝到任意目录,本例是拷贝到.../android-ndk-r9d/sample/ffmpeg2.6.2
在ffmpeg2.6.2文件下添加"
build_android.sh "文件:(ps:下面代码直接复制,如需修改注意“--prefix=$PREFIX
\”前面的空格位)
修改configure文件:
很多ffmpeg编译资料上面说要修改configure文件 ,说的原因是 如果不修改的话,在android上 System.loadLibrary("xxx"); 的时候个别so库无法加载的问题。
打开 ffmpeg源码内 configure 文件进行如下修改:
6、在ubuntu 32位下进行编译ffmpeg源码以得到android平台 arm下能使用的那几个so库
---------------------------------------------------------------------
等待编译,这个过程可能需要10~20分钟,最后会在ffmpeg 2.6.2文件夹下的/android/arm/include+lib2个文件夹。
在lib文件夹下会有以下8个.so,最后我们需要的就是libavutil-54.so、libavcodec-56.so、libswresample-1.so、libavformat-56.so
libswscale-3.so、libpostproc-53.so、libavfilter-5.so、libavdevice-56.so。
得到这些so后,我们接下来的工作就是需要在android下使用,在下一篇文章中会接着说明。
由于需要做视频播放器,编解码部分需要用到ffmpeg,没办法只能编译ffmpeg.so
接下来就是参考网上多个ffmpeg的编译过程,在多次尝试后终于编译成功,记录下过程方便以后查询,同时也跟大家分享下!
ps:不喜勿喷!
-------------------------------------------------------------------------
配置环境:
1、 安装Ubuntu 10.04.4(32位)
2、下载ffmpeg-2.6.2.tar.bz2
3、下载android-ndk-r9d-linux-x86.tar.bz2(32位)
---------------------------------------------------------------------
4、ndk解压目录:/home/xxx/android-ndk-r9d (xxx:就是你的个人文件夹)
(1.) 配置NDK的环境变量:
终端内执行:“ gedit ~/.bashrc ”
在打开的文件末尾添加如下内容:
NDK=/home/xxx/android-ndk-r9d
export NDK
(2.)在当前bash环境下读取并执行 ~/.bashrc 中的命令:
终端执行:" source ~/.bashrc "
(3.)查看是否生效:
终端执行: " echo $NDK "
结果:/home/xxx/android-ndk-r9d
(4.)测试NDK编译JNI工程:
到android-ndk-r9d 的sample目录的hello-jni 目录里
终端执行:“ $NDK/ndk-build ”
如果环境配置成功会生成so库的。
-----------------------------------------------------------------
5、解压ffmpeg-2.6.2.tar.bz2
将ffmpeg-2.2.tar.gz解压后拷贝到任意目录,本例是拷贝到.../android-ndk-r9d/sample/ffmpeg2.6.2
在ffmpeg2.6.2文件下添加"
build_android.sh "文件:(ps:下面代码直接复制,如需修改注意“--prefix=$PREFIX
\”前面的空格位)
#!/bin/bash SYSROOT=$NDK/platforms/android-19/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86 function build_one { ./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --enable-gpl \ --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
修改configure文件:
很多ffmpeg编译资料上面说要修改configure文件 ,说的原因是 如果不修改的话,在android上 System.loadLibrary("xxx"); 的时候个别so库无法加载的问题。
打开 ffmpeg源码内 configure 文件进行如下修改:
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)'替换为:
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS='$(SLIBNAME)'
6、在ubuntu 32位下进行编译ffmpeg源码以得到android平台 arm下能使用的那几个so库
sudo chmod +x build_android.sh ./build_android.sh
---------------------------------------------------------------------
等待编译,这个过程可能需要10~20分钟,最后会在ffmpeg 2.6.2文件夹下的/android/arm/include+lib2个文件夹。
在lib文件夹下会有以下8个.so,最后我们需要的就是libavutil-54.so、libavcodec-56.so、libswresample-1.so、libavformat-56.so
libswscale-3.so、libpostproc-53.so、libavfilter-5.so、libavdevice-56.so。
得到这些so后,我们接下来的工作就是需要在android下使用,在下一篇文章中会接着说明。
相关文章推荐
- 使用ubuntu14和ndk 编译ffmpeg在android平台的so动态库
- Android 使用 FFmpeg (一)——编译生成.so文件
- linux中使用NDK编译ffmpeg的android平台的可执行文件
- 【Android】NDK编译ffmpeg(基于使用Ubuntu15.10)
- android studio中使用ndk编译.so文件,调用C/C++代码(jni编程)
- android studio 使用ndk编译.C文件生成so文件
- ubuntu_14.04_LTS使用NDK编译FFMPEG_2.7.2
- ubuntu_16.04_LTS使用NDK编译FFMPEG_3.1.1
- android ndk第一步使用ndk和Cmake编译.so文件
- ubuntu64,ndk-r9 编译 ffmpeg 2.1.1的config文件
- ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
- 【转】ubuntu64,ndk-r9 编译 ffmpeg 2.1.1的config文件
- ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
- 使用NDK编译C/C++为.so文件
- 使用Eclipse+NDK编译arm64-v8a CPU架构的speex.so文件
- ubuntu下使用NDK 生成so库文件时MK文件的编写
- ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
- Ubuntu下为AndroidStudio编译并使用FFmpeg(一)ndk部分
- 使用Eclipse+NDK编译arm64-v8a CPU架构的speex.so文件