系列文章目录:

NDK实践(一)在linux环境下编译ffmpe

NDK实践(二)将编译的ffmpeg静态库集成到Android工程

最近开始接触学习ndk开发,本着边学习边实践的原则,计划完成视频编辑库ffmpeg的集成和集成过程的学习笔记,下面开始集成的第一步:在linux环境下编译ffmpe源码

首先我们先做一些准备:

(1)Linux系统环境,大家可以本地装linux系统或使用远程linux服务器(我选用后者)

(2)ffmpeg源码为4.0.4  ffmpeg下载地址

(3)ndk环境Android NDK 17c   NDK下载地址

下面我们正式开始:

(1)用xshell连接linux服务器,进入一个路径

(2)下载ffmpeg源码

使用wget命令下载源码

下载成功后进行解压

解压命令:

tar -zxvf ffmpeg-4.0.4.tar.gz

查看解压后的文件

到此我们完成了ffmpeg源码的下载

(3)配置ndk环境

1.继续使用wget命令下载ndk(要下载对应linux系统的):

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

2.然后解压:

unzip android-ndk-r17c-linux-x86_64.zip

3.接下来我们给ndk配置环境变量:

打开文件:vim  /etc/profile

输入命令:source  /etc/profile,是配置的环境变量生效

输入命令: ndk-build

如有这样的提示信息则说明配置成功

(4)万事具备,开始编译

进入ffmpeg-4.0.4文件夹,新建一个build.sh文件

我们写入以下内容,都是一些编译的控制参数

#!/bin/bash
NDK_ROOT=/root/ndk/android-ndk-r17c
#TOOLCHAIN 变量指向ndk中的交叉编译gcc所在的目录
TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/
#FLAGS与INCLUDES变量 可以从AS ndk工程的.externativeBuild/cmake/debug/armeabi-v7a/build.ninja中拷贝,需要注意的是**地址**
FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11  -O0 -fPIC"
INCLUDES="-isystem $NDK_ROOT/sources/cxx-stl/llvm-libc++/include -isystem $NDK_ROOT/sources/android/support/include -isystem $NDK_ROOT/sources/cxx-stl/llvm-libc++abi/include"#执行configure脚本,用于生成makefile
#--prefix : 安装目录
#--enable-small : 优化大小
#--disable-programs : 不编译ffmpeg程序(命令行工具),我们是需要获得静态(动态)库。
#--disable-avdevice : 关闭avdevice模块,此模块在android中无用
#--disable-encoders : 关闭所有编码器 (播放不需要编码)
#--disable-muxers :  关闭所有复用器(封装器),不需要生成mp4这样的文件,所以关闭
#--disable-filters :关闭视频滤镜
#--enable-cross-compile : 开启交叉编译(ffmpeg比较**跨平台**,并不是所有库都有这么happy的选项 )
#--cross-prefix: 看右边的值应该就知道是干嘛的,gcc的前缀 xxx/xxx/xxx-gcc 则给xxx/xxx/xxx-
#disable-shared enable-static 不写也可以,默认就是这样的。
#--sysroot:
#--extra-cflags: 会传给gcc的参数
#--arch --target-os :#这个是生成静态库的路径
PREFIX=./android/armeabi-v7a2
./configure \
--prefix=$PREFIX \
--prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
--extra-cflags="$FLAGS $INCLUDES" \
--extra-cflags="-isysroot $NDK_ROOT/sysroot" \
--arch=arm \
--target-os=android make clean
make install

保存后运行命令:

sh build.sh

编译成功后,我们打开生成的静态库的路径(在build.sh中配置的PREFIX=./android/armeabi-v7a2)

这就是我们编译生成的三个文件夹啦。里面有android所需的ffmpeg静态库以及头文件,就等待小伙伴自己去看啦

到此,我们的任务就完成啦,成功的编译了android环境下的ffmpeg的静态库啦,下一节将学习并记录如何把生成的静态库集成到android项目中。

NDK实践(一)在linux环境下编译ffmpe相关推荐

  1. Linux环境下编译并执行ava helloworld程序

    http://blog.lupaworld.com/home-space-uid-24466-do-blog-id-2578.html 已经学会怎样在Windows下怎样编辑,编译和运行Java程序了 ...

  2. linux环境下编译部署php生产环境

    linux环境下编译部署php生产环境 版本控制 php:7.2.4 nginx:1.9.9 部分插件版本 xlswriter:1.3.3.2 redis:3.1.3 一.安装php 1.安装依赖(之 ...

  3. linux编译ice,linux环境下编译安装ICE

    前面我们讲过了在linux环境下通过rpm的方式来安装ICE,这种安装方式可以是比较简单的,自己在安装过程中发现后面PHP无法装在IcePHP.sp模块,也有可能自己在安装过程中某个地方出错了.又尝试 ...

  4. 在虚拟机linux环境下编译windows版adb fastboot

    原文出自:http://blog.chinaunix.net/uid-20546441-id-1746200.html 我根据虚拟机编译遇到的问题进行一些添加 [前提条件] Linux Android ...

  5. 安卓和Linux动态库一样吗,在Linux环境下编译Android下的最新版ffmpeg+x264单个动态库(.so)...

    最近在mac下用ndk交叉编译最ffmpeg出问题,总是显示用系统的gcc而不是ndk的toolchain的交叉编译gcc来编译的.之前明明没问题的,可能是由于最近升级macOS导致的.由于对这方面实 ...

  6. linux环境下编译Qt源码

    环境配置:Ubuntu-16.04 1) 下载源码 在官方网站:http://download.qt.io/archive/qt/5.12/5.12.5/single/上下载qt-everywhere ...

  7. 分布式缓存技术memcached学习(一)——linux环境下编译memcahed

    安装依赖工具 [root@localhost upload]# yum install gcc make cmake autoconf libtool 下载并上传文件 memcached 依赖于 li ...

  8. linux环境下编译llvm源码

    环境配置:Ubuntu-16.04 1) 下载依赖 sudo apt-get install cmake sudo apt-get install xz-utils sudo apt-get inst ...

  9. Kettle【实践 01】Linux环境下使用Azkaban定时调用Kettle的KJB或KTR脚本实现自动化数据处理(完整流程实例分享:包含sql+ktr+shell+flow相关文件云资源)

    资源链接在文章末尾,包含文件: 1. 说明 Kettle 的 KJB 或 KTR 调用使用的 shell 脚本,小伙伴可能会想,可以用 Linux 的 crontab 进行任务的调度啊,为什么需要 A ...

最新文章

  1. SQL查找是否存在,别再count了!
  2. 常对象成员和常成员函数
  3. 后台服务系统之编写服务提供方实现
  4. 2020年11月3日 星期二 工作日志 github登陆不了了,晕
  5. 51 NOD 1407 and and and and !!
  6. mysql的dql_Mysql-DQL
  7. lisp怎么改成vlx_如何用CAD自带的VLisp修改Lisp文件并且生成vlx文件??
  8. 蓝桥杯C语言基础题---01字串
  9. 飞思卡尔单片机是用c语言写吗,飞思卡尔单片机需要注意的引脚说明
  10. 在线UTF-8转换成GBK工具
  11. Python-图像-伪彩色图像处理
  12. 网页保存到mysql数据库_把网页数据保存到数据库
  13. jsonDB使用手册
  14. alpha对冲(股票+期货)
  15. 钛资本研究院:保险科技行业现状及趋势分析
  16. 如何采集苏宁易购买家订单?
  17. Flak——跨域问题解决
  18. python自动化交易 期货_一只股票一天可以撤单单几次
  19. 【转】这些JavaScript编程黑科技,装逼指南,高逼格代码,让你惊叹不已
  20. nexus7 刷成kali linux,Nexus 6p 刷入Kali Linux Nethunter 2019.4方法

热门文章

  1. vue项目使用域名部署(一个域名多个项目)
  2. 【算法基础六】敲代码遇到VScode多行与单行注释的快捷操作
  3. 如何计算股票程序化交易系统的收益率?
  4. Arthas Spring Boot Starter工程启动报错
  5. 解决Ubuntu18.04版本高分辨率下导致字体过小问题
  6. 原料奶巨头在下一盘中国乳业资本大棋
  7. sqlserver 2008 Express离线安装包
  8. 理光M2004文件服务器,理光mp2014打印机怎么连接到电脑
  9. 修饰数码相机图像以便用于 CMYK 打印作业
  10. html页面标尺,canvas实现标尺.html