把ffmpeg库放在一个动态库里

上一篇《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$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,并输入以下内容:

#!/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$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,转载请注明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg一个开源的跨平台音视频处理工具,它提供了一系列的和工具,用于对音视频进行编码、解码、转码、剪切、合并等处理操作。对于Windows系统而言,我们可以使用FFmpeg提供的动态库来进行音视频处理。 在Windows中使用FFmpeg动态库,需要进行以下几个步骤: 1. 下载FFmpeg的静态或动态库文件。可以从官方网站(https://www.ffmpeg.org/)上下载预编译的Windows版本的FFmpeg文件,也可以从其他途径获取。 2. 安装编译环境。为了使用FFmpeg动态库,我们需要使用Visual Studio等开发工具,因此需要事先安装相应的编译环境。 3. 将文件添加到项目中。将下载的FFmpeg文件拷贝到你的项目目录中,并在开发工具中将其添加到项目中。 4. 配置编译选项。在项目的配置文件中,为了能够正确链接FFmpeg动态库,需要设置正确的链接选项和的路径。 5. 编写代码调用函数。根据需求,编写相应的代码调用FFmpeg提供的函数进行音视频处理。例如,可以使用avcodec_open2函数打开一个编码器,使用avcodec_send_frame和avcodec_receive_packet函数将原始音视频数据编码成目标格式。 6. 编译和运行程序。将源代码编译成可执行文件,然后运行程序即可进行音视频处理操作。 需要注意的是,在使用FFmpeg动态库时,需要了解和遵守FFmpeg的许可协议。另外,FFmpeg提供了丰富的API和文档,可以根据具体需求查阅相关资料进行开发和调试。 总结起来,使用FFmpeg动态库可以在Windows系统上进行音视频处理操作,需要下载文件并配置开发环境,然后编写代码调用相应的函数进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值