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-r25b-windows.zip”包含了NDK的第25个版本,专为Windows操作系统设计。NDK的主要功能是让开发者能够在Android应用中使用原生代码,例如C、C++,以实现高性能计算或利用硬件加速等功能。 **...
Android-ndk-r23b包含了一系列的编译器、链接器和其他工具,用于将C/C++源代码编译成可以在Android设备上运行的机器码。这个版本可能包含以下组件: 1. **交叉编译工具链**:这些工具链允许你在Windows环境下构建...
这个“android-ndk-r25b-linux.zip”文件是NDK的一个特定版本,即r25b,专为Linux操作系统设计。在Android应用开发中,NDK扮演着至关重要的角色,它允许开发者使用原生代码(如C和C++)来编写部分应用,以提高性能、...
FFmpeg 包含了多种音视频编解码器、过滤器和协议,使得开发者能够轻松地处理各种多媒体数据。它的核心组件包括 libavcodec(编码解码库)、libavformat(容器格式处理库)、libavfilter(视频滤镜库)和 libavutil...
Ubuntu20系统,Android NDK-r21e 编译 FFmpeg4.2.4; 编译出libavcodec.so libavdevice.so、libavfilter.so、libavformat.so、libavutil.so、libswresample.so、libswscale.so;
综上所述,"ubuntu下 编译 ffmpeg for Android armv7-a armv8-a"涉及到的知识点包括Ubuntu环境、FFmpeg项目、Android架构、交叉编译、NDK、配置脚本以及硬件加速等。通过这样的编译过程,我们可以创建针对Android...
这个压缩包“android-ndk-r26b-windows.zip”包含了NDK的第26个版本,专为Windows操作系统设计。通过这个工具,开发者可以利用原生代码编写高性能、低级别的应用模块,比如图形处理、物理模拟或音频处理等。 在...
1. 配置CMake或NDK-Build:根据项目需求选择合适的构建系统,CMake是Android Studio默认支持的,而NDK-Build适用于老项目。 2. 跨平台兼容性:NDK支持多个CPU架构,如armeabi-v7a、arm64-v8a、x86和x86_64,需要为...
这篇教程主要介绍了如何使用`android-ndk-r8b`编译最新版本的FFmpeg,并将其应用于Android应用程序。以下是对整个过程的详细解释: 1. **FFmpeg的安装**: 首先,你需要在Ubuntu 10.04 LTS环境中安装Git,以便克隆...
FFmpeg是一款强大的跨平台音视频处理工具集,能够为开发者提供一系列用于录制、转换以及流化音视频内容的功能。本文将详细介绍如何通过Android NDK(Native Development Kit)编译FFmpeg,并在Android平台上实现RTSP...
Android NDK,全称为Native Development Kit,是Google提供的一款用于Android平台的C和C++原生代码开发...在macOS环境下,"android-ndk-r26b-darwin.zip"为开发者提供了在原生环境中构建和调试Android原生代码的平台。
本文将深入探讨Android NDK R20B版本,特别是其在64位Windows环境下的应用,以及如何与cygwin、FFmpeg等工具协同工作,实现视频编辑功能的动态库编译。 Android NDK是Google提供的一个开源工具集,它允许开发者在不...
3. **交叉编译**:NDK包含了一系列的交叉编译工具链,使得开发者可以在Linux主机上编译出针对不同Android架构(如armeabi-v7a, arm64-v8a, x86, x86_64等)的原生库。 4. **性能优化**:对于计算密集型或资源敏感的...
本教程将详细介绍如何在NDK9环境下编译FFmpeg,以生成适用于Android平台的动态库和静态库。 首先,你需要准备以下环境: 1. 安装Android NDK r9,这是Android原生开发工具包,提供了在本地编写C/C++代码并运行在...
./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-r23b-linux.zip”文件是NDK的一个特定版本,即r23b,专为Linux操作系统设计。在Android应用开发中,NDK扮演着至关重要的角色,它允许开发者使用原生代码(如C和C++)来编写部分应用,以提升性能或...
- 在Android环境中,可能需要使用`ndk-build`命令来编译FFmpeg,该命令会自动调用`make`并应用Android特定的构建规则。 5. **FFmpeg的集成**: - 编译完成后,将生成的静态库(`.a`文件)或动态库(`.so`文件)...
针对之前有的小伙伴说使用hello-jni测试 NDK-r9编译好的最新的FFmpeg2.2的所有so库和头文件 的时候。在使用cygwin编译jni的时候会报错:”undefined reference to 'avcodec_version'“ 的问题,所以现在把本人在...