Android FFmpeg 编译.so库

Android FFmpeg系列——0 编译.so库
Android FFmpeg系列——1 播放视频
Android FFmpeg系列——2 播放音频
Android FFmpeg系列——3 C多线程使用
Android FFmpeg系列——4 子线程播放音视频
Android FFmpeg系列——5 音视频同步播放
Android FFmpeg系列——6 Java 获取播放进度
Android FFmpeg系列——7 实现快进/快退功能

编译了好几天,算是把它搞出来了!!

环境准备

博主尝试在win7使用Cygwin编译,按照网上的说法,结果出现各种莫名其妙的错,比如 “找不到\r命令” 之类,大家可以尝试一下,反正我是怕了,所以博主决定在linux下编译。

编译环境:Linux(博主是在VMware搭建的Centos环境)

这里再做一下笔记,关于在VMware中window和linux文件共享的。

(1)安装好Linux后,关掉Linux,挂载darwin.iso

(2)开启Linux虚拟机,点击VMware菜单【虚拟机】–> 【安装VMware Tools】

此时VMWare下会出现一个浅黄色的提示,根据提示,点击【我已安装】按钮。

(3)在Linux安装vmware tools

  1. 在/mnt创建cdrom目录:

cd /mnt
mkdir cdrom

  1. 挂载CD

mount /dev/cdrom /mnt/cdrom

  1. 在/home创建个人目录,比如johan

cd /home
mkdir johan

  1. 将/mnt/cdrom下的VMwareTools-xxxx复制到个人目录中

cp /mnt/cdrom/VMwareTools-xxx /home/johan

  1. 解压VMwareTools

cd /home/johan
tar -zxvf VMwareTools-xxx

  1. 进入解压文件夹,安装vmware工具

cd vmware-tools-distrib
./vmware-install.pl

如果提示没有perl命令,使用yum install perl命令安装即可。

安装好VMwareTool之后,点击VMware菜单,【虚拟机】–> 【设置】,启动共享菜单

此时,我们可以在/mnt/hgfs下看到共享文件夹了

博主之前不小心用了window下的NDK,当然编译时不通过的,会报以下错:
arm-xxxx-gcc is unable to create an executable file.
C compiler test failed.
然后进入ffbuild,查看config.log,发现则直接是 “arm-xxxx-gcc, No such file or directory”
但是我设置的路径是正确
最后才发现我用的是window下的NDK

NDK:android-ndk-r13b-linux-x86_64.zip

博主之前编译的是版本4.x,不知道怎么配置config,虽然可以从help看出,但是博主还是想编个版本出来再说
之后我选了3.4.x,在编译过程中,报错:
./libavutil/timer.h:38:31: fatal error: linux/perf_event.h: No such file or directory
根据 http://www.ffmpeg-archive.org/ffmpeg-3-4-1-with-android-td4682624.html 这个反馈,改了之后,果然没有报错,但是限制了最低版本为Android-21,这不是我想要的,好像还有一种办法,说是注释掉

include ‘<‘linux/perf_event.h’>’

读者可以尝试

FFmpeg版本:ffmpeg-3.2.1.tar.gz

配置文件

在window下载好文件之后,通过共享文件夹,使用cp复制命令,把android-ndk-r13b-linux-x86_64.zip和ffmpeg-3.2.1.tar.gz复制到个人文件夹中(博主这里是/home/johan)。

然后使用tar命令解压这两个文件:

修改configure文件

修改这个文件,主要是为了修改so命名规则。

vim configure

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

更改为

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

提示:在vim中,可以使用/SLIBNAME_WITH_MAJOR查找对应位置

记得修改完后,退出键,输入:wq保存。

编写编译脚本

vim build_android.sh

输入以下内容:

#!/bin/bash
make clean
#填写你具体的ndk解压目录(改为自己的目录)
export NDK=/android/ndk/android-ndk-r13b
#定义android最低版本,必须低于目标手机使用版本
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export CPU=arm
#编译后的文件会放置在 当前路径下的android/arm/下
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
#./configure 即为ffmpeg 根目录下的可执行文件configure
#你可以在ffmpeg根目录下使用./configure --hellp 查看 ./configure后可填入的参数。
./configure --target-os=linux \
        --prefix=$PREFIX --arch=arm \
        --disable-doc \
        --enable-shared \
        --disable-static \
        --disable-yasm \
        --disable-symver \
        --enable-gpl \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-ffserver \
        --disable-doc \
        --disable-symver \
        --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
        --enable-cross-compile \
        --sysroot=$SYSROOT \
        --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
        --extra-ldflags="$ADDI_CFLAGS" \
        $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install

在linux中输入这么一段应该相当可怕,所以我在window新建一个文件build_android.sh,直接将内容复制进去,保存之后,通过共享文件复制到解压的ffmpeg文件中。

但是注意的是,我在window下创建文件,复制内容后,可能在linux下有特殊符号,可能会报 “没有找到\r命令”,所以保存的格式要改一下(博主用的是notepad++)。

编译.so库

先把build_android.sh添加可执行权限

chmod +x build_android.sh

执行build_android.sh脚本开始编译

./build_android.sh

没什么意外的话,10分钟左右编译完成,在ffmpeg文件夹下会多一个android文件夹,进入android文件夹下,就是我们编译出来的库文件。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AndroidFFmpeg.so是一个用于处理音视频的开源。它提供了丰富的功能和接口,可以让开发者在Android平台上进行音视频的录制、转码、剪辑、编解码等操作。 首先,AndroidFFmpeg.so是FFmpeg项目的一部分,它是一个非常流行的开源音视频处理。通过将FFmpeg的源代码编译成动态链接,开发者可以在Android应用中调用其中的函数来实现各种音视频处理的功能。 其次,FFmpeg.so提供了丰富的功能接口。开发者可以使用它来进行音视频的录制和播放,实现各种常见的媒体格式的转码,还可以对音视频流进行剪辑、编辑和拼接等操作。同时,FFmpeg.so还支持多种音视频编解码格式,包括常见的MP3、AAC、H.264等,使开发者可以在Android平台上进行广泛的音视频处理工作。 此外,FFmpeg.so还具有跨平台的特性。由于FFmpeg是一个跨平台的项目,因此基于FFmpeg.so开发的功能在Android平台上可以很容易地移植到其他平台上,比如iOS、Windows等。这样一来,开发者可以通过使用FFmpeg.so来实现跨平台的音视频处理需求,方便快捷地进行开发工作。 综上所述,AndroidFFmpeg.so是一个强大且功能丰富的音视频处理,可以帮助开发者实现各种音视频处理的需求。通过使用FFmpeg.so,开发者可以在Android平台上进行音视频的录制、转码、剪辑、编解码等操作,同时还可以享受到跨平台开发的便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值