ffmpeg最新版本有些问题,比如jni/liblibavcodec/ac3enc_combined.c在最新的版本中已经没有了,但是又多了一个ac3enc_template.c的文件。虽然更新版本对于开发人员可以使用到更多的功能,但是如果这样乱改的话真的好无语,非常讨厌这种更新版本的不一致性,唉,只是抱怨一下
我使用的还是稍微老一点的版本ffmpeg 0.8.1的,至少老的版本能搜到更多的资料,也比较稳定。
ffmpeg版本:ffmpeg 0.8.1(最新版本是0.10,但是有很多问题)
NDK版本:ndk r6(ndk r7编译的话会出现各种错误)
机器:32位
系统:ubuntu
注意:ndk r6+ffmpeg0.8.1+Android.mk+config.sh是经过测试过的,可以生成。如果你用的其他版本的会出现各种问题
前提:需要你配置好NDK的环境,还是说说吧
一、下载并配置NDK环境变量(ubuntu下,windows下请使用cygwin)
1、到http://developer.android.com/sdk/ndk/index.html下载NDK
这里,ndk r6版本的下载地址是:http://dl.google.com/android/ndk/android-ndk-r6-linux-x86.tar.bz2
2、解压包到/home/loulijun/android/目录下
3、$vim ~/.bashrc 在里面添加如下信息
export NDK=/home/loulijun/android/android-ndk-r6
107 export PATH=${PATH}: $NDK
|
4、$source ~/.bashrc 使其生效
注意:最新r7版本出现了一个关于awk问题,这个awk是64位的,所以如果你是32位机会遇到,具体解决办法见我的上篇博客:
http://www.cnblogs.com/loulijun/archive/2012/02/26/2368787.html
二、下载ffmpeg源码包
如果你想下载ffmpeg0.8.1版本(老版本),请点击这里:http://www.ffmpeg.org/releases/ffmpeg-0.8.1.tar.gz
如果你想下载最新版本,可以到http://ffmpeg.org/download.html下载
使用$git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
但是下载后的虽然是最新且纯净的代码,可能Android.mk文件与之不完全匹配,如果非要用最新版本的话最好修改一下Android.mk吧(工作量有点大)
三、配置ffmpeg环境
可以系统目录下创建一个用于存放ffmpeg的目录,假如我们全部操作都在
~/mywork/ndk/ffmpeg/目录下,将下载好的ffmpeg源码放在ffmpeg目录下,并改目录名字为jni(名字必须位jni,否则会出现如下的错误)。
另外,下面即将要说到的config.sh脚本和Android.mk文件也要放在这个目录下
四、添加config.sh脚本到jni目录中
在jin目录下创建名为config.sh脚本文件,在里面添加如下的内容
这一步很重要,下面的这个脚本主要是用于生成config.h文件和config.mak文件,否则无法build
下面内容就是config.sh文件了。可点击这里下载:
注意:需要修改cross-prefix、extra-cflags、extra-ldflags的路径
. / configure \
- - disable - static \
- - enable - shared \
- - enable - gpl \
- - enable - version3 \
- - enable - nonfree \
- - disable - doc \
- - disable - ffmpeg \
- - disable - ffplay \
- - disable - ffprobe \
- - disable - ffserver \
- - disable - avdevice \
- - disable - avfilter \
- - disable - postproc \
- - enable - small \
- - cross - prefix = / home / loulijun / android / android - ndk - r6 / toolchains / arm - linux - androideabi - 4.4 . 3 / prebuilt / linux - x86 / bin / arm - linux - androideabi - \
- - enable - cross - compile \
- - target - os = linux \
- - extra - cflags = '-I/home/loulijun/android/android-ndk-r6/platforms/android-9/arch-arm/usr/include' \
- - extra - ldflags = '-L/home/loulijun/android/android-ndk-r6/platforms/android-9/arch-arm/usr/lib -nostdlib' \
- - arch = arm \
- - disable - symver \
- - disable - debug \
- - disable - stripping \
sed - i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed - i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed - i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed - i 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed - i 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed - i 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
|
五、执行config.sh脚本
首先需要给config.sh权限使其能够执行
$sudo chmod a+x config.sh
执行config.sh脚本
$./config.sh
如果出现如下的样子就说明脚本执行成功了
下面的WARNING可以不用管,不会对使用有影响
六、添加Android.mk文件到jni目录中
我们还需要在jni目录下添加一个Android.mk文件,使其交叉编译,内容如下。
也可以到https://gist.github.com/1126971下载,一样的
注意:
1、需要给Android.mk和config.h文件权限
$sudo chmod a+x Android.mk
$sudo chmod a+x config.h
2、网上有些Android.mk文件已经不能适应最新版本了,因为ffmpeg最新版本有些问题,比如jni/liblibavcodec/ac3enc_combined.c在最新的版本中已经没有了,但是又多了一个ac3enc_template.c的文件。虽然更新版本对于开发人员可以使用到更多的功能,但是如果这样乱改的话真的好无语,非常讨厌这种更新版本的不一致性,唉,只是抱怨一下
Android.mk文件内容
现在开始编译ffmpeg,编译这步是最最麻烦的,因为会遇到各种各样不同的问题,不同版本的源码包也是遇到不同的问题,总之听纠结的。
编译很简单,进入jni目录下,执行ndk-build命令即可(如果ndk-build命令未找到,说明你NDK环境没有配好),如果编译失败可以用ndk-build clean清理。
$cd jni
$ndk-build 然后开始编译
编译成功后的结果如下,生成了libffmpeg.so动态库
相关推荐
ubuntu下ndk编译ffmpeg0.8.1,详细介绍了如何将ffmpeg移植到linux下,生成的so动态链接库文件可以直接在android里使用。
android-ndk(android-ndk-r26b-windows.zip)适用于Windows系统
./configure --prefix=/usr/local/android --host aarch64-linux-android --with-pic --disable-shared make -j4;make install 在wsl下面用ndk20编译的, aarch64-linux-android29-clang++ aarch64-linux-android-...
android-ndk(android-ndk-r25b-linux.zip)适用于Linux系统
android-ndk-r8b编译最新ffmpeg步骤详解,包括文字说明和具体代码演示,对想学习或者从事这一项流媒体开发的朋友有很好的帮助
用Android_NDK编译FFmpeg,RTSP手机视频
android-ndk(android-ndk-r25b-windows.zip)适用于Windows系统
android-ndk(android-ndk-r25b-darwin.zip)适用于macOS系统
android-ndk(android-ndk-r23b-windows.zip)适用于Windows系统
ubuntu下android ndk编译环境搭建,android应用程序开发,环境编译
ubuntu下 编译 ffmpeg for Android 的配置文件,包含编译出 armv7-a 和编译成 armv8-a的配置文件,仅仅这两个文件
针对之前有的小伙伴说使用hello-jni测试 NDK-r9编译好的最新的FFmpeg2.2的所有so库和头文件 的时候。在使用cygwin编译jni的时候会报错:”undefined reference to 'avcodec_version'“ 的问题,所以现在把本人在...
ffmpeg源码版本:ffmpeg-0.6.1 android ndk版本:android-ndk-r5b-linux-x86 主要是用来了解ffmpeg源码的编译场景和编译过程
详细的描述了Android NDK下编译ffmpeg开源库的步骤。
1、支持arm 2、支持aarch64
针对Android平台编译好的FFmpeg 6.0的动态链接库.so文件,包括armeabi-v7a ,arm64-v8a两个版本.
android-ffmpeg:用于使用Android NDK编译FFmpeg源代码的Android项目
ndk编译ffmpeg修改后的configure文件ndk编译ffmpeg修改后的configure文件ndk编译ffmpeg修改后的configure文件ndk编译ffmpeg修改后的configure文件
64位windows下ndk,方便直接使用。cygwin+ndk+FFmpeg配合使用,编译Android 动态库进行视频编辑。
上面的压缩包是通过R19C版本的NDK编译过的FFMPEG4.2.2的库。 压缩包里是完整的FFMPEG4.2.2源码,包含编译生成的文件目录。带有编译配置脚本。 里面的库可以直接在Android上使用。 库采用64位的编译器编译,适用于...