`
phenom
  • 浏览: 408900 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

android ffmpeg编译历程

 
阅读更多
这两天在网上搜索了下如何使用ndk来编译ffmpeg,国内软件开发人员的特色,就是c2c,有些就是根本没有试过.
本人还是实践为主,凡事实践过了,才有价值.
主要有几种方法:使用ndk需要编写mk文件,在linux下编译的,生成一个so或.a的库然后再写一些调用的c.

havlenapetr-FFMpeg这个在git上有源码,可以下载来参考下,然后本人觉得所谓原创者,也可能是抄袭该作者的东西,所以这里不会提供引用了"原创"作者的文章.

另一个是www.roman10.net,这个作者的方式有所有不同.目前我只有使用这种方式在git最新版本上编译成功,其它都失败了.
先说第一种方法吧:
大概网上都是这样说的:下载源码,建立工程,把下载的源码放到工程里面的jni目录里面,然后编写一个configure.sh的文件,这算是linux的shell脚本了,脚本的内容大约是:
PREBUILT=/home/dev/toolchain
PLATFORM=/home/dev/android-ndk-r8/platforms/android-8/arch-arm

./configure --target-os=linux \
--arch=arm \
--enable-version3 \
--enable-gpl \
--enable-nonfree \
--disable-stripping \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-ffprobe \
--disable-encoders \
--disable-muxers \
--disable-devices \
--disable-protocols \
--enable-protocol=file \
--enable-avfilter \
--disable-network \
--disable-avdevice \
--enable-cross-compile \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--extra-cflags="-fPIC -DANDROID" \
--disable-asm \
--enable-neon \
--enable-armv5te \
--extra-ldflags="-Wl,-T,$PREBUILT/arm-linux-androideabi/lib/ldscripts/armelf_linux_eabi.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/crtbegin.o $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/crtend.o -lc -lm -ldl"...这样云云.
这个就是在编译前的配置了,重要的就是--arch=arm --target-os=linux就是编译的结果了.
也可以不定义toolchain,直接指定到ndk的对应目录,但是因为ndk的变化,导致一些toolchain不同而无法成功,可以复制一份保留.

然后把这个文件放到ffmpeg的源码目录,不是jni目录.而修改下权限为可执行的,chmod,不会的就不要玩了..
执行它:通常结果是:WARNING: /home/dev/toolchain/bin/arm-linux-androideabi-pkg-config not found, library detection may fail.警告存在,可不影响大局.

然后就是修改config.h,把里面的#define av_restrict restrict去除restrict,因为android的gcc不支持restrict关键字。(无从考证).

改了应该不会有影响.
然后gedit libavutil/libm.h删除所有static方法。我是root用户...

然后:
分别修改libavcodec,libavfilter,libavformat,libavutil,libpostproc,libswscale下的Makefile,把下面两句删除。
include $(SUBDIR)../subdir.mak
include $(SUBDIR)../config.mak新版只有这句。不知道上面这句是不是删除了.

然后在ffmpeg目录建立av.mk,Android.mk
在jni目录建立Android.mk文件.

然后在libavformat,libavcodec,libavfilter、libavutil、libpostproc和libswscale目录建立同样的文件.
这些文件哪里来,一会说.
然后在工程那层开始ndk-build...如果运气好的话就可以成功生成了so文件了.

刚开始我也觉得这些所谓的"原创"者还是相当有才的.懂一大堆我不懂的东西.后来再研究下了havlenapetr-FFMpeg代码发现上面的所有文件在这里都可以找到,首先是config.sh,然后就是一些mk文件.唯一区别的恐怕就是在ffmpeg里面的Android.mk与jni层的mk文件了吧,作者把这两个合在一起.

最终本人还是编译失败,恐怕不是上面的操作不对,是环境的问题吧.


第二种 :
www.roman10.net这个网站有两篇文章是关于ffmpeg的,而且还有个测试的jni文件,由于对ffmpeg的不熟悉,ffmpeg/doc/example的代码运行不成功,而且此作者的代码在ffmpeg-0.8上是成功的,换成git的还是不行,估计接口修改太多了吧.作者提供了源码下载.这些容易操作了,修改下里面的ndk路径就可以了.

先说这些吧.
分享到:
评论
6 楼 phenom 2014-08-11  
liutengt 写道
尼玛,说一堆废话,你倒是把正确的编译方法传上来啊

这位大侠,我没有完成这文章,也不用不着诅咒我啊.
其实我也给出网站了,
http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/
作者已经更新了ndkr9的编译了,以前比较旧.就算英文一般,里面的过程还是比较清晰的.

本人后续 没有作ffmpeg开发或调用相关的工作,所以当时只是编译了.
而且编译环境不同,总是有可能出现各种问题,还需自己一点一点积累,探索.
5 楼 liutengt 2014-07-07  
尼玛,说一堆废话,你倒是把正确的编译方法传上来啊
4 楼 phenom 2012-11-28  
super_we 写道
最新的怎么不行啊!

ffmpeg变化了,不行我也没有办法,我也不是研究这方面的,请谅解
3 楼 super_we 2012-11-23  
最新的怎么不行啊!
2 楼 phenom 2012-10-25  
第一种方法可以在早期的ffmpeg中用,新的或者1.0以上的都是失败。
1 楼 bing_zz 2012-10-25  
另一个是www.roman10.net,这个作者的方式有所有不同.目前我只有使用这种方式在git最新版本上编译成功,其它都失败了.

你说的第一种方法是不是失败了

相关推荐

    ffmpeg6.0 android 编译库

    标题“ffmpeg6.0 android 编译库”表明这是一个针对 Android 平台编译的 FFmpeg 版本 6.0,意味着它已经被配置并构建为适合 Android 应用程序使用的静态或动态库。这个版本可能包含了 FFmpeg 最新的功能和性能优化,...

    Android FFmpeg 编译后的so文件,包含32位和64位so

    分别基于 FFmpeg 5.0.1和FFmpeg 4.3.2,编译后的so文件,用于实现Android快速接入FFmpeg 包括arm64-v8a和armeabi-v7a的libavcodec.so、libavfilter.so、libavformat.so、libavutil.so、libswresample.so、libswscale...

    Android 编译ffmpeg+测试工程

    本项目“Android编译ffmpeg+测试工程”旨在帮助开发者在Android环境中集成并运行FFmpeg,以便进行多媒体处理任务。通过这个项目,我们可以学习到以下关键知识点: 1. **FFmpeg简介**:FFmpeg是一个开源的跨平台...

    android ffmpeg rtsp播放

    在Android上使用FFmpeg,首先需要将源码编译为适用于Android平台的静态或动态库。这通常涉及到以下几个步骤: 1. 获取FFmpeg源码:从FFmpeg官方仓库克隆源码,如GitHub。 2. 配置Android NDK:确保已经安装并配置了...

    android ffmpeg 编译脚本

    使用这个脚本+ffmpeg源码,可以直接编译生成adnroid jni使用的so库文件

    基于ffmpeg4.3.1编译的android动态库--开启了openssl(支持https)

    ffmpeg版本4.3.1,openssl版本1.1.1i, android cup架构支持armeabi-v7a,arm64-v8a,x86,x86_64,ffmpeg和openssl都是基于Android API level 21编译的。自测播放本地视频文件,http视频文件和https视频文件均可正常...

    Android FFmpeg 6.1+FFmpeg 4.0.2

    2. **Android上的FFmpeg**:在Android平台上使用FFmpeg需要进行一些额外的配置工作,包括编译FFmpeg库以适应Android的NDK环境,创建适用于Android的静态或动态库。动态库(.so文件)通常体积较小,但需要在运行时...

    ffmpeg6.1安卓交叉编译库

    ffmpeg6.1安卓交叉编译库 解压查看FFmpegLib/src/main/jniLibs/ 目录下的 arm64-v8a armeabi-v7a x86 x86_64 工程里有调用的示例,可以直接编译。

    android ffmpeg so库 下载

    首先,FFmpeg库在Android上使用时需要编译为特定架构的动态链接库(.so文件),因为Android支持多种处理器架构,例如arm64-v8a、armeabi、armeabi-v7a、x86和x86_64。这些文件夹分别对应了不同的CPU架构,确保了...

    ffmpeg编译过程出错总结.zip_ffmpeg_ffmpeg 编译_ffmpeg编译总结

    在Linux环境下编译FFmpeg时,由于其复杂性和依赖众多,可能会遇到各种问题。这篇文档将详细介绍在Linux系统下编译FFmpeg时可能遇到的常见错误及其解决方案。 1. **依赖库缺失** 在编译FFmpeg前,必须确保系统已...

    android ffmpeg h264编译脚本

    在Android平台上,为了实现对H264编码视频的解码、编码或者流媒体处理,开发者通常需要对FFmpeg进行编译,使其适应Android的不同架构。以下将详细解释如何在Android上编译FFmpeg以及H264的相关知识点。 1. **FFmpeg...

    ffmpeg编译.zip

    x264 x265 ffmpeg和aac的源码和编译工具。以下是文件夹的内容 编译的其他代码:包含编译的x264 x265和aac的代码 编译好的包:为最终ffmpeg编译过的代码 另一人编译:...

    AndroidFFmpeg,安卓系统.zip

    在实际开发中,开发者需要配置NDK环境,编写JNI代码,将FFmpeg库编译为适用于Android的动态或静态链接库,然后在Java层定义对应的接口,实现音视频处理的调用。 在“美术/流媒体.gif”中,可能展示了AndroidFFmpeg...

    ExoPlay扩展ffmpeg编译so库

    "ExoPlay扩展ffmpeg编译so库"这个项目就是将FFmpeg编译为适用于Android的.so文件,以便ExoPlayer能够利用这些库来解码上述提及的非标准或复杂编码格式的媒体文件。 在编译FFmpeg的过程中,开发者需要考虑以下几个...

    android ffmpeg x264编译脚本

    这篇我们将深入探讨如何在Android环境中编译FFmpeg并集成x264。 首先,你需要理解Android的NDK(Native Development Kit),这是一个用于开发原生C/C++代码的工具集,使得我们可以在Android平台上使用像FFmpeg这样...

    Android ffmpeg .a .so库(ffmpeg 4.4.1)

    1. **编译FFmpeg**:首先,你需要在Ubuntu环境下编译FFmpeg以生成适用于Android的库文件。这通常涉及到设置NDK路径、指定目标平台、选择合适的编译选项等步骤。使用`./configure`脚本可以定制配置,如添加或移除特定...

    最新版ffmpeg编译生成android使用的so

    最新版ffmpeg编译生成android使用的so 最新版ffmpeg编译生成android使用的so 最新版ffmpeg编译生成android使用的so 最新版ffmpeg编译生成android使用的so

    FFMPEG开发QTonAndroid的工程(QT5.12),附带FFMPEG库,可以直接编译到Android设备进行开发

    FFMPEG开发QTonAndroid的工程(QT5.12),附带FFMPEG库,可以直接编译到Android设备进行开发。 FFMPEG使用NDK_R19C编译。 这是一个简单的DEMO工程,可以直接使用QT打开,编译部署到Android设备运行。 注意: 这个工程...

    Android studio CMake 编译ffmpeg SO库 头文件 和 CMakeLists

    本文将详细讲解如何使用Android Studio和CMake编译FFmpeg库,生成SO共享库,并处理相关的头文件和CMakeLists配置。 首先,我们需要在Android Studio项目中引入CMake构建系统。打开`build.gradle`(Module级别)文件...

Global site tag (gtag.js) - Google Analytics