上一篇《FFmpeg 1.2 for Android 编译动态库》里沃特跟你们介绍了如何编译动态库,但当时所生成的动态库总共包含10个so文件,这样要是加载起来会严重影响软件的启动速度,后面有不少热心的童鞋说须要生成单个动态库(仅生成 libffmpeg.so),因为前一段时间工做比较忙,没时间去弄,在此向各位说声抱歉。html
其实生成单个动态库版本比生成多个动态库的版本还要简单,就只要一个 config.sh 就能够搞定,里沃特不敢有保留,如今分享给你们。具体该启用和禁用哪些本身再另行修改。linux
1.首先建立目录 ffmpeg,而后解压 ffmpeg-1.2 到 ffmpeg 目录正面:tar xvf ffmpeg-1.2.1.tar.gz -C ./ffmpegandroid
2.而后重命名 ffmpeg-1.2.1 为 jni:cd ffmpeg && mv ffmpeg-1.2.1 jnibash
3.在jni 目录建立 config.sh,并输入如下内容:ide
#!/bin/bash export PREBUILT=$NDK_HOME/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 export PLATFORM=$NDK_HOME/platforms/android-8/arch-arm function build_one { ./configure --target-os=linux \ --arch=arm \ --enable-version3 \ --enable-gpl \ --enable-nonfree \ --disable-stripping \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffserver \ --disable-ffprobe \ --disable-symver \ --enable-encoders \ --enable-decoders \ --enable-muxers \ --disable-devices \ --disable-protocols \ --enable-protocol=file \ --enable-avfilter \ --enable-network \ --enable-avdevice \ --disable-asm \ --enable-cross-compile \ --enable-runtime-cpudetect \ --sysroot=$PLATFORM \ --disable-everything \ --disable-doc \ --enable-avresample \ --enable-demuxer=rtsp \ --enable-muxer=rtsp \ --enable-protocol=rtp \ --enable-hwaccels \ --enable-zlib \ --prefix=$PLATFORM/usr \ --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ --extra-cflags="-I$PLATFORM/usr/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \ --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 $PLATFORM/usr/lib/crtbegin_dynamic.o $PLATFORM/usr/lib/crtend_android.o -lc -lm -ldl" \ make -j4 install rm -rf ../libs && mkdir ../libs && mkdir ../libs/armeabi $PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o $PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PLATFORM/usr/libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a cp $PLATFORM/usr/libffmpeg.so ../libs/armeabi } build_one
4.修改 PREBUILT 和 PLATFORM 两个变量为你的 NDK 对应地址。post
5.执行 ./config.sh,喝杯茶,过10-30分钟便可以 ffmpeg/libs/armeabi 目录下载找到 libffmpeg.so 文件,大概5M多。ui
6.恭喜你,能够写本身的 jni 调用了。url