FFmpeg使用第一步,编译FFmpeg源码 –> .so 库。
编译环境
- Mac OS X Capitan 10.11.3
- NDK-r10e (64-bit)
- FFmpeg 3.0
准备工作
编译过程
下载FFmpeg源代码之后,首先需要对源代码中的configure文件进行修改。由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android平台不能识别这样文件名,所以需要修改这种文件名。
找到 ffmpeg-3.0/configure 文件,找到以下几行:
1
2
3
4
|
SLIBNAME_WITH_MAJOR=
'$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD=
'$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME=
'$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS=
'$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
|
替换为下面内容:
1
2
3
4
|
SLIBNAME_WITH_MAJOR=
'$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD=
'$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME=
'$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS=
'$(SLIBNAME)'
|
编写脚本文件
modified:2016-05-16
新建脚本文件 ffmpeg-3.0/build_android.sh,保存下面脚本。
新建临时文件夹 ffmpeg-3.0/ffmpegtemp,将脚本中的 TMPDIR 改为自己的临时文件夹。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#!/bin/bash
export TMPDIR=/Users/hubin/Desktop/ffmpeg-3.0/ffmpegtemp
NDK=~/Applications/android-sdk/ndk-bundle
PLATFORM=
$NDK/platforms/android-14/arch-arm
TOOLCHAIN=
$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
./configure \
--prefix=
$PREFIX \
--target-os=linux \
--cross-prefix=
$TOOLCHAIN/bin/arm-linux-androideabi- \
--arch=arm \
--sysroot=
$PLATFORM \
--extra-cflags=
"-I$PLATFORM/usr/include" \
--cc=
$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--nm=
$TOOLCHAIN/bin/arm-linux-androideabi-nm \
--enable-shared \
--enable-runtime-cpudetect \
--enable-gpl \
--enable-small \
--enable-cross-compile \
--disable-debug \
--disable-static \
--disable-doc \
--disable-asm \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-postproc \
--disable-avdevice \
--disable-symver \
--disable-stripping \
$ADDITIONAL_CONFIGURE_FLAG
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
sed -i
''
's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
sed -i
''
's/HAVE_RINT 0/HAVE_RINT 1/g' config.h
make clean
make -j4
make install
}
CPU=armv7
-a
OPTIMIZE_CFLAGS=
"-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
PREFIX=./android/
$CPU-vfp
ADDITIONAL_CONFIGURE_FLAG=
build_one
|
执行build_android.sh:
1
|
$ chmod +x build_android.sh
|
我编译时有一个警告:
1
|
****/arm-linux-androideabi-pkg-config not found, library detection may fail.
|
不影响编译,如果你知道原因,分享一下吧 3Q~
等待几分钟,不出意外的话会报错的。这时就是讨论时间了。。。
如果编译成功了。。。如下图
在 ffmpeg-3.0/android 目录下就能找到编译好的文件:
这里是 可直接编译的源码 可以免去自己配置的麻烦。
这里有 编译好的SO文件 需要的可以直接下载使用。
写这篇博客时我也是刚开始要接触FFmpeg,编译的过程也是从Google和stackoverflow上找的,难免写得不够细致详尽,如有遗漏、错误请告知。
参考资料