把ffmpeg库放在一个动态库里
来源:互联网 发布:js正则表达式 match 编辑:程序博客网 时间:2024/06/09 19:41
上一篇《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,并输入以下内容:
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$FLATFORM/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 调用了。
本文链接:http://www.cnblogs.com/lyout/p/3279997.html,转载请注明。
上一篇《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,并输入以下内容:
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$FLATFORM/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 调用了。
本文链接:http://www.cnblogs.com/lyout/p/3279997.html,转载请注明。
- 把ffmpeg库放在一个动态库里
- 把鸡蛋放在一个篮子里了,呜呜。。。!
- 把jar文件放在一个文件夹里
- 把程序中大部分的变量放在一个类里()
- 关于百度地图 把所有覆盖物放在一个视野里的问题
- 把Dialog放在一个控件下面
- 为什么圣诞老人把礼物放在圣诞袜里
- Effective STL - 不要把auto_ptr放在容器里
- 怎样把文件放在Linux内存里
- 怎么把两个公式放在一行里?
- 把工作都放在文档里,解放思想。
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 数学之美 系列十六 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型
- 【数学之美 系列十六】 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- C++程序设计项目开发——银行自动提款机(二)
- jQuery对象与dom对象相互转换
- hibernate使用jtds数据库驱动类利用windows认证方式连接remote sql server
- 查询Oracle正在执行的sql语句
- 黑马程序员------第14天笔记(网络编程)
- 把ffmpeg库放在一个动态库里
- 快速幂算法
- hadoop中什么是slots
- Vb中 继承 多态的实现
- 异常: undefined symbol: lua_setglobal
- ant之build.xml详解
- 黑马程序员------第15天(高新技术篇)
- Foxit Reader 3.0去更新去广告,直接打开带密码的PDF版
- hadoop常见错误总结