在Android NDK中使用libffmpeg.so

前面一篇文章介绍了如何在Android NDK中编译FFmpeg,发现感兴趣的朋友很是多吗,而且大家似乎总不成功。

于是我把编译好的so文件发上来,请点击此处下载。注意,这个文件是针对NEON优化编译的,在不支持NEON的ARM处理器上可能无法运行。

似乎很久没写过东西了,下面就介绍下大体的使用方法,希望有点帮助。

首先你要有一个Android项目,把libffmpeg.so放到项目的libs/armeabi-v7a/中。然后要准备FFmpeg的源文件,把它们放到你喜欢的目录,比如jni/ffmpeg/中。

编辑你需要使用libffmpeg.so的项目模块的Android.mk,在合适的位置添加如下内容

LOCAL_C_INCLUDES += $(PATH_TO_FFMPEG_SOURCE)
LOCAL_LDLIBS += -L$(PATH_TO_LIBFFMPEG_SO) -lffmpeg

变量PATH_TO_FFMPEG_SOURCE代表FFmpeg源码的路径,PATH_TO_LIBFFMPEG_SO是到libffmpeg.so的路径。

说明一下,这个so只包含avformat,avcodec和avutil三部分,另外我也把其中的log方法改成了Android适用的。

一切OK,然后你就可以自由的使用FFmpeg了。

另外,这篇文章内容没经过测试,只是意象的内容,不过基本也就是这样了。

推荐FFmpeg新手看看这个http://dranger.com/ffmpeg/ffmpeg.html,我就是从那开始学习的,进阶之后只能自己看代码了~~

不知道大家都用FFmpeg在做什么呢?来汇报下也好啊TOT

51 COMMENTS >>LEAVE<<

  1. imcaptor

    我们想用FFmpeg做流媒体播放,谢谢 a bit 分享。

  2. icyomik

    发现感兴趣的朋友很是多吗,而且大家似乎总不成功。

  3. icyomik

    “发现感兴趣的朋友很是多吗,而且大家似乎总不成功”,很是打击人滴。。。
    还没有接触过Android,不过对其很是有好感。

  4. ABitNo
    @icyomik

    。。。

    你是在说我文笔差吗。。。

  5. ck

    大哥能寫簡單的java code
    來介紹如何調用你so裡面的方法嗎??
    比如說 開個mp4檔案

  6. ABitNo
    @ck

    你如果会用ffmpeg的话,就在NDK里用ffmpeg写个方法,然后你可以参考下这篇文章

    http://abitno.me/a-simple-tutorial-to-android-ndk

  7. LAONB

    Android就像一个出身名门,但又平易近人,善解人意,情窦初开的姑娘。每个男人都想去了解她,每个女人都想去模仿她,而她又喜欢主动与人交往,良好的家教使她不会像Symbian一样容易染病。

  8. xsun33

    大家好:
    小弟最近也在研究这方面,有兴趣共同学习的,加我QQ:191837614

  9. \(^o^)/~

    刚编译了个ffmpeg.so还没开始调用,希望提供个方法

  10. xsun33
    @ABitNo

    你好:
    楼主。还是不太明白你说的。你说的可以自由的使用ffmpeg,是什么意思?可以直接在上层的java里面调用API了吗?是不是还需要自己用jni封装ffmpeg里面的方法来给上层的java调用?
    你的这个libffmpeg.so是干吗用的呢?是不是只是提供一个到源码的连接?我使用编译生成的.a静态库,然后用jni封装一下,再提供给上层java调用,这个思路可以吗?

  11. ABitNo
    @xsun33

    我就说用JNI来调用的,你的程序代码如果不想开源,你就不能用静态库。静态库和动态库使用起来都一样的啊,都是需要你使用JNI调用的。

  12. ck

    照版主用jni寫了
    不過好象没反應
    版主是否再寫篇helloworldffmpeg教學

  13. xsun33
    @ABitNo

    你好:
    谢谢楼主指导。现在明白一些了。正在开发中,以后请楼主多多指导。

  14. caxton

    I would like to decode H264/MPEG4 raw data for live streaming :)

  15. ABitNo
    @caxton

    why not use OpenCore in Android?I think it more efficient to decode H264

  16. Eagle

    想要作播放器的话,应该把开源的sdl也在android上移植一下,建议搂住再点关于编译sdl的,给大家指导一下

  17. caxton

    Dear ABitNO:
    Is it possible to use OpenCore library on Android directly?
    I think OpenCore is encapsulated to Android Classes such as android.media.
    Can you please give me some hints to decode raw data using OpenCore?
    Thanks!!

  18. ohye
    @xsun33

    多交流哈,能留个联系方式么

  19. ohye

    hi everybody

    我建了一个OpenCore的群:23290004,大家一起交流哈

  20. mark

    有沒有人成功使用AbitNo大提供的so文件阿?
    可不可以提供一個簡單的範例?
    謝謝!!

  21. mark

    我按照上面的步驟做完
    System.loadlibrary("ffmpeg")這行就出問題了
    我進adb shell裡面看
    libffmpeg.so沒有被放到data/data/

    <project></project>

    lib裡面阿?
    請問還需要ndk-build一次嗎?

  22. hop

    楼主你好,看了你的几篇文章我总算编译出SO文件了,不过调用的时候总是出错,楼主能不能写个完整的调用FFMPEG的工程分享下.哪怕只调用初始化方法也好

  23. mark
    @hop

    hop大大:

    請問你是如何修改樓主的設定編譯出來的?

    謝謝

  24. xsun33
    @ohye

    我的QQ :191837614
    大家多交流,互相学习。

  25. Lolingew

    老大,偶enable-shared编译完之后还是不对,so1.6k,真郁闷啊,查看了编译的log,感觉只有最后链接出.so的时候出问题,之前的库们都好好的。如果这样的话,会不会是config.sh还有毛病?有些选项没勾上么?

  26. yuan tangfu
    @ABitNo

    博主,你好!看到你写的如何用ndk编译ffmpeg 的文章十分欣慰。
    通过你介绍的方法确实能编译出可用的ffmpeg链接库。但是里面似乎存在一个问题,虽然在config.sh里面已经enable neon,但是生成的config.h里面的ARCH_ARM和HAVE_NEON并没有值1,也就是没有进行neon优化。当手动值1时,编译到libavcodec/aac.c就会出现错误,错误如下。
    Error: thumb conditional instruction not in IT block
    请问这个错误如何解决。
    望博主一定要帮帮忙啊,小弟不胜感激。

  27. halzhang
    @ABitNo

    博主你好,我想问一下如何使用现有的libffmpeg.so库呢?我自己写了一个jni,需要调用到ffmpeg里面的方法,请问要如何导入libffmpeg.so呢?

  28. ss

    测试下js效果,请无视

  29. ss

    测试下js效果,请无视

  30. ss

    测试下js效果,请无视

  31. guo
    @yuan tangfu

    neon指令打开了吗

  32. TLightSky

    居然找到一个翻译版本。。。汗水。。。
    http://odroid.foros-phpbb.com/application-development-f21/ffmpeg-compiled-with-android-ndk-t338.htm

  33. moming

    Build it with cygwin+NDKr4b?

  34. kickan

    你好,我已经写好播放器,就是不能同步,怎么解决啊?能帮我一下吗?

  35. den
    @LAONB

    这话说的好恶心阿,我看Android更想是被google 从linux那里骗来囚禁驯养成的女杀手,不可理喻得封闭畸形。
    MeeGo才是真正的名门之秀。

  36. huppyuy
    @kickan

    神啊~~ 你用到了ffmpge么? 能不能源码发给我一下~~huppyuy@gmail.com 只要能让我知道怎样在android用ffmpge就好了 谢啦 绝对不会侵权的~~

  37. ryu

    Your client does not have permission...

  38. dallas

    多谢分享,请问如何编译出的NEON优化版本?

  39. pxb0420
    @yuan tangfu

    将工程AndroidManifest.xml中的android:debuggable="true"删除应该就可以了。

  40. erlangxiong

    我想知道能不能用ffmpg吧android里面的视频文件即3pg,一帧一帧的转换成图片Bitmap啊.用你编译的这个so可以不!~!楼主麻烦了,方便加QQ或把答案发我邮箱 ,谢谢了!~
    一个被折磨得不行了的小白!~
    QQ:277340241
    email:277340241@qq.com

  41. My Name is Liu

    我想问下博主,ffmpeg 我已经编译成.so了

    然后也能在工程了成功的 LoadLib

    接下来该怎么使用呢? 是否通过我再写一个C文件去调用ffmepg.so 然后通过JNI 去条用 我写的这个C文件来播放视频呢? 请指点...谢谢

  42. laocui

    谁能发给我一个编译好的.so文件啊,编译了几次还是1k.

  43. laocui

    我邮箱是867806949@qq.com,谢谢了

  44. laocui

    那个下载地址需要翻墙,我下不来

  45. pirateme

    楼主,libffmpeg.so放在libs/armeabi-v7a/下不行,ndk-build时会把libffmpeg.so删除

  46. hi
    @yuan tangfu

    你好,你的 NEON 最后成功了吗。

  47. baoer

    真机能运行吗?

  48. chockly
    @kickan

    hi, Kickan. Could u send me a demo that how to use ffmpeg.so?
    thanks advance!

  49. reaper

    这个地址没有so啊,只有ffmpeg的源码。。。

  50. 利剑

    我想用FFmpeg实现支持mms协议的的电台播放功能,及获取电台的伴随信息等。

  51. 利剑

    我的qq:516470705

LEAVE A RESPONSE >>CANCEL<<

loader