09.阿里云服务器(Ubantu系统)配置ndk 编译ffmpeg

(创建于2018/1/4)

ffmpeg完整的编译过程
1.ls
 显示所有目录文件

2.mkdir root
 创建文件夹root
 
 //将Android文件夹下的所有强制删除
 rm -rf android  
 
3.touch ren.txt
 创建文件ren.txt

4.apt-get update         //Advanced Package Tool,是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统,定期运行这一命令以确保您的软件包列表是最新的
更新

5.sudo apt-get install vim-gtk  //vim:文本编辑器
安装vim

6.:q! 强制退出
在INSERT状态下(编辑模式),先按esc(进入命令模式) 然后输入:q! 回车,例如:vim ren.txt  然后:q!退出,没有进行保存

7.保存退出
vim ren.txt 然后按i进入编辑模式,写一段文字,按Esc进入命令模式
按Shift z z保存退出,写入的内容被保存

8.vim命令打开vim配置文件
vim /etc/vim/vimrc

9.在配置文件状态下(8操作之后的状态)
对vim进行配置,按i进入编辑模式
输入
set nu   显示行号
set tabstop  
set ruler  在右下角显示光标位置
set cursorline 设置高亮显示当前行
按Esc进入命令模式,然后按Shift zz保存设置退出 

10.命令模式下进行删除
按x键删除单个,dd键删除行

在操作之前将ndk和ffmpeg上传到阿里云服务器指定目录,我这里是根目录的user目录下存放ndk,在跟ndk同级目录创建renzhenming文件夹,在renzhenming中存放ffmpeg

11.设置权限
chmod 777 -R ndk  //设置ndk目录下的所有东西最高操作权限,这样,原本不可执行的ndk文件编程绿色的,可以执行

12.解压ndk文件
ndk已经成为了可执行文件,所以我们接下来可以执行解压,输入命令
./android-ndk-r10e-linux-x86_64.bin
这里有一个小技巧,输入androi之后后边比较长,我不想一个一个的输入,这个时候按tab键会自动补全,也就是所谓的联想功能(linux下)

13.配置ndk环境变量
vim ~/.bashrc   //就相当于进入一个文件, ~大概就表示用户根目录

然后在编辑模式下滑倒最低端,加入这两行配置

export NDKROOT=/user/ndk/android-ndk-r10e
export PATH=$NDKROOT:$PATH 

保存退出,更新环境变量
source ~/.bashrc

14.解压ffmpeg
需要安装zip,输入命令

sudo apt-get install zip

安装成功后使用zip解压ffmpeg,

unzip ffmpeg-2.6.9(ffmpeg是zip压缩文件,ndk是bin文件,所以解压方式不同)

15.编译ffmpeg
shell脚本文件(已经写好),将这个文件上传到ffmpeg根目录下
在Windows下编写的脚本文件,直接上传到服务器上执行,有可能会报文件找不到的问题,这就需要用到一个命令
dos2unix +文件名
如果dos2unix不存在需要先安装,执行命令
apt-get install dos2unix
然后使用dos2unix进行格式转换


处理这种格式问题有两种方法
a:在云服务器上创建脚本文件,然后传输到windows上,将脚本内容拷贝进去再上传到服务器进行覆盖,然后通过dos2unix转换格式在执行就可以了

    在ffmpeg根目录下:touch build_android.sh 创建文件,双击传输到桌面,打开复制原本的脚本内容到这个文件中,保存为utf-8无bom格式,然后上传到ffmpeg根目录进行覆盖,执行./bulid_android.sh提示文件不存在,这时候执行命令 dos2unix build_android.sh 进行格式转换,然后再执行./bulid_android.sh,这时候仍然可能无法编译,看看报错提示中有没有一个关于permission的问题,说config permission denied,这说明,这个config文件不是可执行文件,需要赋予权限,退到上一级目录,执行chmod 777 -R ffmpeg..xx 设置ffmpeg文件夹中所有文件可执行的权限,这时候再次执行脚本 ./build_android.sh就可以开始正常编译了

b:

编译ffmpeg的步骤:
1)编写shell脚本
2)给文件设置权限:chmod 7777 build_android.sh
   给ffmpeg下所有文件设置权限chmod 777 -R ffmpeg..xx
dos2unix build_android.sh
4).执行ffmpeg文件夹中的configure脚本
./configure --disable-yasm  (执行./configure,如果提示让去掉yasm,再加上后边的)
3)执行脚本  ./build_android.sh

16.修改存在的问题
编译完成后会在ffmpeg根目录生成一个android文件夹,这里边就是生成的一系列的so文件和c文件,但是
这样直接编译出来的so文件是有问题的,我们打开lib可以看到如图1,每一个so文件后边都在.so之后还有一些数字,这样的文件Android是无法识别的,所以我们需要编译成数字在前,.so在最后的形式,这时需要修改configure文件中的配置,将下边注释的四行代码修改为新的四行,注:从configure 2779行开始,重新编译后,生成的so如图2

#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)'

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

build_android.sh脚本:

#!/bin/bash
make clean
export NDK=/user/ndk/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"

./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_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install

修改后的configure文件:


09.阿里云服务器(Ubantu系统)配置ndk 编译ffmpeg
4399046.png
09.阿里云服务器(Ubantu系统)配置ndk 编译ffmpeg
3130062.png
                                                            图1
09.阿里云服务器(Ubantu系统)配置ndk 编译ffmpeg
4110281.png
                                                             图2

至此,编译成功!

上一篇:android View的一些学习记录


下一篇:希拉里电邮门继续:33000份电子邮件可能根本没有丢失