FFmpeg 1.2 for Android 生成一個動態庫


上一篇《FFmpeg 1.2 for Android 編譯動態庫里沃特跟大家介紹了如何編譯動態庫,但當時所生成的動態庫總共包含10個so文件,這樣要是加載起來會嚴重影響軟件的啟動速度,后面有很多熱心的童鞋說需要生成單個動態庫(僅生成 libffmpeg.so),由於前一段時間工作比較忙,沒時間去弄,在此向各位說聲抱歉。

 

其實生成單個動態庫版本比生成多個動態庫的版本還要簡單,就只要一個 config.sh 就可以搞定,里沃特不敢有保留,現在分享給大家。具體該啟用和禁用哪些自己再另行修改。

1.首先創建目錄 ffmpeg,然后解壓 ffmpeg-1.2 到 ffmpeg 目錄正面:tar xvf ffmpeg-1.2.1.tar.gz -C ./ffmpeg

2.然后重命名 ffmpeg-1.2.1 為 jni:cd ffmpeg && mv ffmpeg-1.2.1 jni

3.在jni 目錄創建 config.sh,並輸入以下內容:

#!/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 對應地址。

5.執行 ./config.sh,喝杯茶,過10-30分鍾即可以 ffmpeg/libs/armeabi 目錄下載找到 libffmpeg.so 文件,大概5M多。

6.恭喜你,可以寫自己的 jni 調用了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM