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

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: (创建于2018/1/4)ffmpeg完整的编译过程1.ls 显示所有目录文件2.mkdir root 创建文件夹root //将Android文件夹下的所有强制删除 rm -rf android 3.

(创建于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文件:


img_f7d1798560c9df237789c7d63015dfa3.png
4399046.png
img_48f99aaf71daa677800eaffcfd6129bc.png
3130062.png
                                                            图1
img_185d102704295d02927c202ae285d319.png
4110281.png
                                                             图2

至此,编译成功!

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
14天前
|
消息中间件 安全 Unix
SSH配置多台服务器之间的免密登陆以及登陆别名
SSH配置多台服务器之间的免密登陆以及登陆别名
26 1
|
29天前
|
弹性计算
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
2024年阿里云服务器的优惠价格新鲜出炉,有特惠云服务器也有普通优惠价格,本文为大家整理汇总了2024年阿里云服务器的优惠价格,包含特惠云服务器和其他配置云服务器的优惠价格。以便大家了解自己想购买的云服务器选择不同实例规格和带宽情况下的价格,仅供参考。
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
|
3天前
|
监控 安全 Linux
Linux系统之安装ServerBee服务器监控工具
【4月更文挑战第22天】Linux系统之安装ServerBee服务器监控工具
41 2
|
9天前
|
JavaScript 前端开发 UED
Vue工具和生态系统: Vue.js和服务器端渲染(SSR)有关系吗?请解释。
Vue.js是一个渐进式JavaScript框架,常用于开发单页面应用,但其首屏加载较慢影响用户体验和SEO。为解决此问题,Vue.js支持服务器端渲染(SSR),在服务器预生成HTML,加快首屏速度。Vue.js的SSR可手动实现或借助如Nuxt.js的第三方库简化流程。Nuxt.js是基于Vue.js的服务器端渲染框架,整合核心库并提供额外功能,帮助构建高效的应用,改善用户体验。
12 0
|
12天前
|
存储 弹性计算 安全
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
2核2G、2核4G配置是很多个人和企业建站以及部署中小型的web应用等场景时首选的云服务器配置,这些配置的租用价格也是用户非常关心的问题,本文为大家整理汇总了2024年阿里云服务器2核2G、2核4G配置不同实例规格及地域之间的收费标准,同时整理了这些配置最新活动价格,以供大家参考和选择。
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
|
14天前
|
域名解析 网络协议 应用服务中间件
阿里云服务器配置免费https服务
阿里云服务器配置免费https服务
|
17天前
|
安全 关系型数据库 MySQL
国产麒麟服务器等保二级 配置规范(一)
国产麒麟服务器等保二级 配置规范(一)
33 0
|
17天前
|
数据采集
robots.txt配置 减小服务器压力
robots.txt配置 减小服务器压力
13 0
|
28天前
|
网络协议 Linux 网络安全
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
17 0
|
30天前
|
弹性计算 网络安全 虚拟化
ECS数据问题之升级配置预防数据丢失如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集: