FFMPAG 在linux下编译 给自己看的 一步步做下来终于OK

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liudao7994/article/details/82746341

[TOC]
- 下载地址 http://ffmpeg.org/olddownload.html
我下载的是3.0.11版本. 备注: 别搞最新的 要最稳定的 免得编译不通过,掉坑里出不来.

注意 NDK版本和FFMPEG的版本 貌似必须对应上 如果对应不上报错

  • 正确对应版本 NDK 14 FFMPEG 3.0 终于成功了

错误 我在这里卡了很久才明白

/bin/sh: ranlib/usr/local/lib/libavdevice.a: No such file or directory
make: *** [install-libavdevice-static] Error 127

我需要下r14的

官方文档

https://trac.ffmpeg.org/wiki/CompilationGuide
我是centos
https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

资料:
http://www.yhao.xyz/2017/08/12/Android%20%E9%9B%86%E6%88%90%20FFmpeg%20%E4%B8%80%20%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86%E5%8F%8A%E7%AE%80%E5%8D%95%E8%B0%83%E7%94%A8/

https://blog.csdn.net/leixiaohua1020/article/details/47191283

  1. 下载源文件.
  2. 命令 wget http://www.ffmpeg.org/releases/ffmpeg-3.0.11.tar.gz
  3. 解压 tar -xzf ffmpeg-3.0.11.tar.gz
  4. 因为ffmpeg 里面很多可执行文件 所以必须给这个文件夹可执行权限 修改权限命令
[root@host ffmpeg]# chmod 777 -R ffmpeg-2.6.9
[root@host ffmpeg]# ll
total 9524
drwxrwxrwx 16 1000 1000    4096 May  2  2016 ffmpeg-3.0.11
-rw-r--r--  1 root root 9744514 May  2  2016 ffmpeg-3.0.11.tar.gz
[root@host ffmpeg]# 

接下来需要把ffmpeg里面的八大模块全部编译成so.怎么编译?
通过Makefile.就想之前的make语法那样,当然肯定不是自己写.
下载ffmpeg里面有一个configure.sh文件
他是一个shell 脚本. 但是里面参数太多了,所以需要自己写一个build_android.sh.里面执行了configure.sh文件.

关系是这样的 build_android.sh 调用 configure.sh 调用 makefile 执行编译命令 得到相关的so文件

  • 这里有个地方注意 如果你在windows下写好build_android.sh 再到linux上编译就编译不通过了. 需要直接在linux上写.

脚本名字随便写也可以不是bulid_android 但是执行的时候需要运行自己定义的名字.

#!/bin/bash
make clean
export NDK=/home/ndk/android-ndk-r16b
export SYSROOT=$NDK/platforms/android-14/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/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
  • NDK=/home/ndk/android-ndk-r16b 是安装ndk 的目录
  • SYSROOT 最小兼容的版本 自己去看下NDK platforms目录下的最小版本 我这里14
  • TOOLCHAIN 指定编译器.需要到你自己的linux的ndk目录下 找到对应的版本(直接去TOOLCHAIN目录下 xftp 拷贝即可)
  • PREFIX 的路径 ( p w d ) / a n d r o i d / CPU 是 当前目录 ffmpeg/android/arm (pwd 当前目录 cpu前面赋值了) 这里都是shell脚本
  • configure 前面说过的ffmpeg里面自带的sh脚本
  • –disable-yasm 清除上一次信息
  • –enable-shared \ 开启动态库
  • -disable-static \ 禁止静态库
  • disable-symver \禁止系统服务
  • –disable-ffmpeg \ 禁止生成 下面的EXE文件
    –disable-ffplay \
    –disable-ffprobe \
    –disable-ffserver \
  • 其他的路径都要核对一下…

    1. 执行 ./build_android.sh 发现少了很多路径
      5.1 . 插一句 修改 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)'

上面的替换主要是为了解决生成 so 文件的命名问题 要不然.so不是作为后缀生成的.

  1. 执行下面三句话
./configure
make
sudo make install
  1. 最后执行./build_android.sh 虽然编译了 但是没成功..

  2. 编译完成之后看下有没有android目录 如果没有就没成功

出现问题

  1. -bash: wget: command not found

解决: yum -y install wget

  1. 出现这个问题 yasm/nasm not found or too old. Use –disable-yasm for a crippled build.
    解决
    https://blog.csdn.net/yzhang6_10/article/details/75635734
# wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
# tar zxvf yasm-1.3.0.tar.gz
# cd yasm-1.3.0
# ./configure
# make && make install
  1. arm-linux-androideabi-gcc is unable to create an executable file.
    解决:
    https://blog.csdn.net/mr_tony/article/details/50758786

  2. ZIP

一、安装支持ZIP的工具

    yum install -y unzip zip

    二、解压zip文件

    unzip 文件名.zip

    三、压缩一个zip文件

     zip 文件名.zip 文件夹名称或文件名称

export TMPDIR=”E:/myroot/bwandroidspace/FFmpeg/jni/temp”

4, 安装 gcc
yum install gcc

  1. ffbuild/config.mak: No such file or directory

  2. nasm/yasm not found or too old. Use –disable-x86asm for a crippled build.

  3. /lib64/libc.so.6: version `GLIBC_2.14’ not found问题
1)下载:wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

2)解压:tar zxvf yasm-1.3.0.tar.gz

3)切换路径: cd yasm-1.3.0

4)执行配置: ./configure

5)编译:make

6)安装:make install

集成到android studio

普通集成so文件那样就行了

猜你喜欢

转载自blog.csdn.net/liudao7994/article/details/82746341