ubantu-16+ndk-r14b 编译 ffmpeg-4.0.2+lame_mp3-3.99.5

1、环境和软件版本

ubantu-16.4.1

ndk-r14b

ffmpeg-4.0.2

lame_mp3-3.99.5

2、废话

    因为我也是新手,对linux不熟悉,对编译不熟悉,最喜欢的动作就是拿来主义,研究不深,所以不敢保证本文所有的操作都是一步到位没有问题,再者,即使跑不通,也可以给大家提供个思路。

    根据我上一篇博客(https://my.oschina.net/u/1462828/blog/1860847)的编译步骤,已经可以编译出来Android平台运行的so文件了,但是还存在的问题就是,因为版权问题,所以ffmpeg是不包含MP3的编码器的,所以我们只能是自己再编译一个lamemp3到ffmpeg里面。

    我们可以先尝试编译一个ubantu下可以直接运行的ffmpeg带MP3的,很简单。首先安装lamemp3(ubantu命令:sudo apt-get install libmp3lame-dev),然后下载ffmpeg源码并解压,然后cd到源码目录,运行ubantu命令三部曲:

    1:./configure --enable-libmp3lame

    2:make

    3:make install

    完了之后可以直接运行ffmpeg -version,就可以看到ffmpeg的版本信息了,然后再找个音乐,测试一下命令:ffmpeg -i 1.wav 2.mp3

    命令如果运行成功,成功的生成了2.MP3,那就证明MP3编码器已经集成成功了。

    然后,就这么简单?

    显然,不可能这么简单,如果这么简单的话,我也不用专门写个帖子了。

    我用上一篇博客编译的脚本,加上了--enable-libmp3lame 这一句,然后运行编译,一直在报错:

 

    找到ffbuild/config.log之后,天书……不懂的情况下生啃日志,总是一件让人感到秃顶的事情……

    最后字里行间,找到了一些蛛丝马迹:

    

    于是乎,初步怀疑是ffmpeg没有定位到安装的lameMP3目录的原因,于是乎各种百度,找到的都是“apt-get install libmp3lame-dev”这句,很显然这样是不行的,至于原因后面会说。

    之后,各种骚操作都来了一波,外加中间绝望得放下了键盘,拿起手机打了几把吃鸡游戏。

    脑子清醒了之后再来,终于定位到了问题的关键所在:

    

    -cflags是要定位到include目录,前面加-I(大写i),ldflags是要定位到lib目录,前面加-L

    

    理论上是这样,但是我换了七七四四九种打开的方式和九九八十一个运行命令的姿势,均换回来了一句冷冰冰的:

    ERROR: libmp3lame >= 3.98.3 not found

    无奈,网上的帖子也基本上都是h264+aac的,搞直播的那帮人都不用mp3了,于是只能是找了个ffmpeg的群,群里也不是很活跃,索性还是有大神常驻的,大神虽然没有提供到最直接的帮助,但是也给了一个思路,就是用用ndk编译lamemp3。

    意思是,既然用的ndk编译ffmpeg,是不是需要导入的lame也是需要用ndk来编译。

    说刚就刚……但是,这个怎么用ndk编译lamemp3?直接套用ffmpeg的那个脚本好像也不行,路径上都没有crpss-prefix等标签。

    那就百度吧,没办法的事情,找了好久也没有头绪,后来灵光一闪,ffmpeg+h264+aac不也是一样的道理么?于是乎找了一个帖子,然后把编译aac的脚本搞了下来,魔改了一番,经过了七七四十九种打开方式和九九八十一个不同姿势,终于编译成功了。

    然后在改了一下ffmpeg的-cflags标签,心中无限的憧憬和希望,感觉世界充满了友爱与和谐,唯独比较刺眼的就是那句红色的,冷冰冰的代码:

    

    ……

    再检查了一下过程,原来是cflags、ldflags的路径少了一层,虚惊一场。

    编译完成后,拷贝so包出来,米6真机测试,没问题。

    果然,世界还是友爱的,和谐的。

3、编译过程

1、源码下载

    lamemp3:http://lame.sourceforge.net/download.php

    ffmpeg:http://ffmpeg.org/

    ndk:https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip 

    切记在ubantu环境下下载,我这边的软件解压目录为:

    lamemp3:    /home/xiaoyu/lame-3.99.5

    ndk:    /home/xiaoyu/ndk

    ffmpeg:    /home/xiaoyu/ffmpeg/ffmpeg-4.2.0/

    还是忍不住吐槽一下lame的版本命名,最新版本是3.100,上一版是3.99.5,然后ffmpeg支持的是3.98.3以上的。最开始的时候安装和下载的是3.100,显示已经是最新版本了,这个最新版本是3.1为何ffmpeg那边是要3.9,后来网上找了一下,下载了个3.99.5的,现在回过头一看,这他妈,哪门子3.1,分明是三点一百……

2、编译lamemp3

    下载,解压,略……

    然后是执行编译的脚本build.sh

#!/bin/bash
NDK_HOME=/home/xiaoyu/ndk/android-ndk-r14b
ANDROID_API=android-21
SYSROOT=$NDK_HOME/platforms/$ANDROID_API/arch-arm
ANDROID_BIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/
CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-
export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
 
ARM_INC=$SYSROOT/usr/include
ARM_LIB=$SYSROOT/usr/lib
 
LDFLAGS=" -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack  -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$NDK_HOME/sources/cxx-stl/gnu-libstdc++/libs/armeabi -L$NDK_HOME/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/arm-linux-androideabi/lib -L$ARM_LIB  -lc -lgcc -lm -ldl  "
 
FLAGS="--host=arm-linux --enable-static --disable-shared"
 
export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"
export LDFLAGS="$LDFLAGS"
export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"
CPU=armv7-a
 
./configure $FLAGS \
--prefix=$(pwd)/android/$CPU

    cd到lame-3.99.5目录

    chmod +x build.sh

    ./build.sh

    make  

    make install

    编译完成后,会在lame-3.99.5目录下看到一个android/armv7-a的目录

    

    里面就是我们需要的东西。

2、编译ffmpeg

    build.sh脚本与上一篇博客的基本一致,只是加上了一句--enbale-libmp3lame 和修改了cflags、ldfags标签

#!/bin/bash
NDK=/home/xiaoyu/ndk/android-ndk-r14b
SYSROOT=$NDK/platforms/android-21/arch-arm/
CPU=armv7-a
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "

function build_android
{
./configure \
--prefix=$PREFIX \
--enable-neon \
--enable-hwaccels \
--enable-shared \
--enable-libmp3lame \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--disable-static \
--disable-doc \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--enable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--cpu=armv7-a \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
ADDI_CFLAGS="-I/home/xiaoyu/lame/include"
ADDI_LDFLAGS="-L/home/xiaoyu/llame/lib"
build_android

    老规矩,cd到ffmpeg-4.0.2目录

    chmod +x build.sh

    ./build.sh

    make

    make install

    完成之后会在ffmpeg-4.0.2目录下找到一个android/armv7-a目录

    

    到这里,就大功告成了,自己动手吧,编译好的我就不发出来了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先要升级相关程序 1. yasm-1.2.0 1.1 下载文件 wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz 1.2 安装方法如下 1.2.1. tar -zxvf yasm-1.2.0.tar.gz 1.2.2 cd yasm-1.2.0 1.2.3 ./configure 1.2.4 make 1.2.5 make install 2. 安装autoconf、automake、libtool sudo apt-get install autoconf automake libtool 3. 安装libopencore-amrnb-dev libopencore-amrwb-dev sudo apt-get install libopencore-amrnb-dev libopencore-amrwb-dev 4. 安装gcc sudo apt-get install gcc 5. 其中一个解码器源码头文件错误,根据提示注释掉该头文件错误的函数声明即可 接下来安装各种解码器 1. lame 1.1 下载地址:http://sourceforge.net/projects/lame/files/lame/ 在该地址下下载最新版本的lame. 1.2 下载文件(当前最新版本是3.99.5) wget http://colocrossing.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz 1.3 安装方法如下 1.3.1. tar -zxvf lame-3.99.5.tar.gz 1.3.2 cd lame-3.99.5 1.3.3 ./configure --enable-shared 1.3.4 make 1.3.5 make install 2. libogg 2.1 下载地址:http://www.xiph.org/downloads/ 在该地址下下载最新版本的libogg . 2.2 下载文件(当前最新版本是1.3.1) wget http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz 2.3 安装方法如下 2.3.1. tar -zxvf libogg-1.3.1.tar.gz 2.3.2 cd libogg-1.3.1 2.3.3 ./configure 2.3.4 make 2.3.5 make install 3. libvorbis 3.1 下载地址:http://downloads.xiph.org/releases/vorbis/ 在该地址下下载最新版本的libvorbis . 3.2 下载文件(当前最新版本是1.3.4) wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.4.tar.gz 3.3 安装方法如下 3.3.1. tar -zxvf libvorbis-1.3.4.tar.gz 3.3.2 cd libvorbis-1.3.4 3.3.3 ./configure 3.3.4 make 3.3.5 make install 4. xvid 4.1 下载地址:http://downloads.xvid.org/downloads 在该地址下下载最新版本的xvid. 4.2 下载文件(当前最新版本是1.3.2) wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz 4.3 安装方法如下 4.3.1. tar -zxvf xvidcore-1.3.2.tar.gz 4.3.2 cd xvidcore-1.3.2/build/generic 4.3.3 ./configure 4.3.4 make 4.3.5 make install 5. x264 5.1 下载文件 git clone git://git.videolan.org/x264.git 5.2 安装方法如下 5.2.1 cd x264 5.2.2 ./configure --disable-asm --enable-static --enable-shared 5.2.3 make 5.2.4 make install 6. libdts 6.1 下载地址:http://www.videolan.org/developers/libdca.html 在该地址下下载最新版本的libdts. 6.2 下载文件(当前最新版本是0.0.5)wget http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2 6.3 安装方法如下 6.3.1. tar -jxvf libdca-0.0.5.tar.bz2 6.3.2 cd libdca-0.0.5 6.3.3 ./configure 6.3.4 make 6.3.5 make install 7. a52 7.1 下载地址:http://liba52.sourceforge.net/downloads.html 在该地址下下载最新版本的a52. 7.2 下载文件(当前最新版本是0.7.4) wget http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz 7.3 安装方法如下 7.3.1. tar -zxvf a52dec-0.7.4.tar.gz 7.3.2 cd a52dec-0.7.4 7.3.3 ./configure 7.3.4 make 7.3.5 make install 8. faad2 8.1 下载地址:http://www.audiocoding.com/downloads.html 在该地址下下载最新版本的faad2. 8.2 下载文件(当前最新版本是2.7) wget http://hivelocity.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz 8.3 安装方法如下 8.3.1. tar -zxvf faad2-2.7.tar.gz 8.3.2 cd faad2-2.7 8.3.3 autoreconf -vif 8.3.4 ./configure --with-mp4v2 --enable-shared 8.3.5 make 8.3.6 make install 9. faac 9.1 下载地址:http://www.audiocoding.com/downloads.html 在该地址下下载最新版本的faac. 9.2 下载文件(当前最新版本是1.28) wget http://hivelocity.dl.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz 9.3 安装方法如下 9.3.1. tar -zxvf faac-1.28.tar.gz 9.3.2 cd faac-1.28 9.3.3 ./bootstrap 9.3.4 ./configure 9.3.5 make 9.3.6 make install 10. amr-nb 10.1 下载地址:https://code.google.com/p/ostube/downloads/detail?name=amrnb-10.0.0.0.tar.bz2&can=2&q= 在该地址下下载最新版本的amr-nb. 10.2 下载文件(当前最新版本是10.0.0.0) wget https://ostube.googlecode.com/files/amrnb-10.0.0.0.tar.bz2 10.3 安装方法如下 10.3.1. tar -jxvf amrnb-10.0.0.0.tar.bz2 10.3.2 cd amrnb-10.0.0.0 10.3.3 ./configure 10.3.4 make 10.3.5 make install 11. amr-wb 11.1 下载地址:https://code.google.com/p/hio/downloads/detail?name=amrwb-7.0.0.1.tar.bz2&can=2&q= 在该地址下下载最新版本的amr-wb. 11.2 下载文件(当前最新版本是7.0.0.1) wget https://hio.googlecode.com/files/amrwb-7.0.0.1.tar.bz2 11.3 安装方法如下 11.3.1. tar -jxvf amrwb-7.0.0.1.tar.bz2 11.3.2 cd amrwb-7.0.0.1 11.3.3 ./configure 11.3.4 make 11.3.5 make install 解决:ERROR: libmp3lame >= 3.98.3 not found sudo apt-get install libmp3lame-dev 下载: http://kakola.googlecode.com/files/lame-3.98.4.tar.gz 运行命令: wget http://kakola.googlecode.com/files/lame-3.98.4.tar.gz 安装lame-3.98.4.tar.gz, 以免在第三步的时候出现ERROR: libmp3lame >= 3.98.3 not found错误, 需要提前安装lame. tar zvxf lame-3.98.4.tar.gz cd lame-3.98.4 ./configure --enable-shared make make install 12.修改配置文件,并重新启动计算机 编辑 ld.so.conf vi /etc/ld.so.conf 添加一行 /usr/local/lib 13. 安装ffmpeg 13.1 下载地址:http://ffmpeg.org/releases/ 在该地址下下载最新版本的ffmpeg 13.2 下载文件(当前最新版本是2.1.3) wget http://ffmpeg.org/releases/ffmpeg-2.1.3.tar.bz2 13.3 安装方法如下 13.3.1. tar -jxvf ffmpeg-2.1.3.tar.bz2 13.3.2 cd ffmpeg-2.1.3 13.3.3 ./configure --prefix=/usr/local/ffmpeg2 --disable-static --enable-shared --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffplay 13.3.4 make 13.3.5 make install
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值