一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

ubuntu 12.04 编译Android下的ffmpeg 1.2步骤

时间:2015-07-10 编辑:简简单单 来源:一聚教程网


编译环境:ubuntu 12.04

NDK版本:android-ndk-r8d

ffmpeg版本:1.2

新建Android工程,在工程目录中创建jni文件夹

1、在jni目录下添加如下文件Android.mk ,内容如下:

include $(all-subdir-makefiles)
 

2.在jni/ffmpeg下添加Android.mk内容如下:

 

3.在jni/ffmpeg下添加av.mk

4.在jni/ffmpeg/libavformat下添加Android,mk内容如下:

5. 在jni/ffmpeg/libavcodec下添加Android,mk内容如下:

6.在jni/ffmpeg/libavutil libpostproc libswscale libswresample 下添加Android,mk内容如下:

7.在jni/ffmpeg 下添加可执行文件config.sh, 内容如下

上面PREBUILT PLATFORM的路径自己根据NDK的路径自己更改,并增加可执行权限,命令如下:

chmod +x config.sh

4、命令行到jni/ffmpeg目录下执行

./config.sh

5、修改

a、删除 libavformat libavcodec libavutil libpostproc libswscale libswresample 目录下Makefile下的

include $(SUBDIR)../config.mak

b、删除libavcodec libavutil libswresample目录下Makefile下的

log2_tab.o \

c、修改jni/ffmpeg/config.h下的

#define avrestrict restrict为#define restrict

e、把 ffmpeg/libavutil/time.h更名为avtime.h,

同时修改下面文件中的引用libavutil/time.h为libavutil/avtime.h

ffmpeg/libavformat/avformat.h:211

ffmpeg/libavformat/avio.c:25

ffmpeg/libavformat/hls.c:33

ffmpeg/libavformat/mux.c:39:30

ffmpeg/libavformat/utils.c:40

ffmpeg/libavutil/time.c:36

 

6、接下来就是编译了

cd ..

命令行到项目project目录下执行

$NDK/ndk-build

 

问题一:

Install        : libffplay.so => libs/armeabi-v7a/libffplay.so
Install        : libiptv_media_player_jni.so => libs/armeabi-v7a/libiptv_media_player_jni.so
/home/rds/share/xiongms/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: warning: hidden symbol '__aeabi_atexit' in ./obj/local/armeabi-v7a/libgnustl_static.a(atexit_arm.o)
is referenced by DSO ./obj/local/armeabi-v7a/libffplay.so
/home/rds/share/xiongms/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libswscale.a(swscale.o): in function swScale:jni/libffmpeg/libswscale/swscale.c:426:
error: undefined reference to 'av_get_cpu_flags'
/home/rds/share/xiongms/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libswscale.a(utils.o): in function sws_init_context:jni/libffmpeg/libswscale/utils.c:917:
error: undefined reference to 'av_get_cpu_flags'
/home/rds/share/xiongms/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi-v7a/libswresample.a(resample.o): in function multiple_resample:jni/libffmpeg/libswresample/resample.c:315:
error: undefined reference to 'av_get_cpu_flags'

将Android.mk中的

LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale libswresample libmediaplayer

改为

LOCAL_WHOLE_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale libswresample libmediaplayer

热门栏目