zoukankan      html  css  js  c++  java
  • 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 调用了。

  • 相关阅读:
    关于C#静态构造函数的几点说明
    《JavaScript高级程序设计》读书笔记之一:几个与原始类型等价的引用类型的常用方法和属性
    Ajax 简介
    如何优化JavaScript脚本的性能
    摆脱混沌,建立个人能力体系——病症四起【from csdn】
    JMX理解与实例
    苹果电脑不为人所知的第三个创始人
    一些AS3中常用到的公式
    JavaScript 随笔
    解决IE6 JSONP无响应的问题。
  • 原文地址:https://www.cnblogs.com/lyout/p/3279997.html
Copyright © 2011-2022 走看看