没有合适的资源?快使用搜索试试~ 我知道了~
首页ffmpeg的编译以及ffmpeg命令行工具在android上的移植
ffmpeg的编译过程详解,ffmpeg命令行工具在android 上的移植,通过ndk-build或者cmake方式在android studio2.2,ndk14(官网下载android studio2.2,然后通过studio上sdk下载ndk-bundle)构建工程项目。使用的ffmpeg是3.3版本,目前为最新的(现在是2017年4月27日)。由于本人花费很长时间做出来的,所以要求分有点高,另外,如果你按照步骤执行仍然不能正确,可能是你操作有误或者编译环境导致。
资源详情
资源评论
资源推荐
在 linux 上编译 ffmpeg
一、ffmpeg 的下载
从网址 https://ffmpeg.org/download.html#releases 下载 ffmpeg 包。
本文使用的是 ffmpeg 3.3 版本
二、ndk 的下载
https://developer.android.google.cn/ndk/downloads/index.html
本文使用的 ndk 是 android-ndk-r10e,是 linux 下 64 位版本
三、开始编译
本文基于 Ubuntu14.04 64 位操作系统进行编译。
1、首先把 android-ndk-r10e 以及 ffmpeg3.3 分别解压到/usr/local/目录下(这是我使用的目
录,如果指定为其他目录则下面 shell 脚本中配置也要是同一个目录)。解压后我的 ndk 以及
ffmpeg 的目录结构为/usr/local/android-ndk-r10e 和/usr/local/FFmpeg-master,分别如下图所
示:
注:上图得 ffmpeg 目录是我已经编译后的目录结构,所以源代码是这个截图中的目录少的。
例如没有第一个 android 文件夹
2、准备需要的 shell 脚本。
建立一个命名为 build_android.sh 的 shell 脚本文件,文件内容如下(--disable-shared 和
--enable-static 这两个配置项,其实在 configure 脚本中是没有的,--enable-shared 和
--disable-static 不配置的情况下,既是编译静态库(.a 的库),不编译成共
享库(.so 的库)。加上不影响编译):
注意:如果你直接复制粘贴这个文件,可能会因为 windows 和 linux 文本结束符不同,造成
shell 无法识别,造成不能执行这个文件。
#!/bin/bash
export NDK_ROOT=/usr/local/android-ndk-r10e
export PATH=$PATH:$NDK_ROOT
# NDK 的路径,根据自己的安装位置进行设置
NDK=/usr/local/android-ndk-r10e
# 编译针对的平台,可以根据自己的需求进行设置
# 这里选择最低支持 android-14, arm 架构,生成的 so 库是放在
# libs/armeabi 文件夹下的,若针对 x86 架构,要选择 arch-x86
PLATFORM=$NDK/platforms/android-14/arch-arm
# 工具链的路径,根据编译的平台不同而不同
# arm-linux-androideabi-4.9 与上面设置的 PLATFORM 对应,4.9 为工具的版本号,
# 根据自己安装的 NDK 版本来确定,一般使用最新的版本
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--target-os=linux \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--arch=arm \
--sysroot=$PLATFORM \
--extra-cflags="-I$PLATFORM/usr/include" \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
--disable-shared \
--enable-runtime-cpudetect \
--enable-gpl \
--enable-small \
--enable-cross-compile \
--disable-debug \
--enable-static \
--disable-doc \
--disable-asm \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-postproc \
--disable-avdevice \
--disable-symver \
--disable-stripping \
make clean
make -j4
make install
$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$PLATFORM/usr/lib \
-L$PLATFORM/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
libavcodec/libavcodec.a \
libavfilter/libavfilter.a \
libswresample/libswresample.a \
libavformat/libavformat.a \
libavutil/libavutil.a \
libswscale/libswscale.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9/libgcc.a
}
# arm v7vfp
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
PREFIX=./android/$CPU-vfp
ADDITIONAL_CONFIGURE_FLAG=
build_one
shell 脚本建立好后,需要通过 chmod 命令对文件进行设置可执行权限,例如 chmod 777
build_android.sh;然后执行此 shell 脚本即可(./ build_android.sh),然后在 ffmpeg 根目录下
就会生成 android 目录,此目录下是 armv7-a-vfp 目录(这里的 android/armv7-a-vfp 目录就是
shell 脚本中 PREFIX 变量设置的),进入 armv7-a-vfp 下就是编译生成的库以及需要的头文件
至此,就可以使用 libffmpeg.so 共享库了。
注:上述中的 shell 脚本是用于生成单个共享库的,如果生成多个模块的共享库。则具体步
骤如下:
a:在源码中,修改 FFmpeg 的 configure 文件(对于合称为一个共享库的情况,此处所述的
修改与否都可以)。原因:由于编译出来的动态库文件名的版本号在.so 之后(例如
“libavcodec.so.5.100.1”),而 android 平台不能识别这样文件名,所以需要修改这种文件名。
在 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)'
由于编译成共享库,则需要对脚本中的配置--disable-shared 和--enable-static 替换成如下
--enable-shared 和--disable-static 。上面中的最下面的红色部分去掉即可。
编译成功后,在 android/armv7-a-vfp/lib 目录下就是各个功能模块的库文件。
剩余16页未读,继续阅读
feixiangsmile
- 粉丝: 45
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2