Shell脚本编写与执行编译ffmpeg库

7.Shell脚本编写与执行编译ffmpeg库

ffmpeg是什么

ffmpeg是一套开源免费跨平台的多媒体框架,他提供了录制,转换以及流化视屏的完整方案

  1. ffmpeg是一套可以用来记录,转换数字音频,视频并且能将其转化为流的开源计算机程序
  2. ffmpeg是一个多媒体处理工具,有非常强大的功能,包括视频采集功能,视频格式转换,视屏抓图,给视屏加水印等。

组成部分

FFmpeg工具

  1. ffmpeg
  2. ffplay
  3. ffprobe

FFmpeg开发库

  1. Libavcodec 编解码器
  2. Libavuitl 工具
  3. libavformat 处理格式
  4. libavdevice 输入输出
  5. libavfilter 过滤器
  6. libswscale 缩放工具
  7. libswresample 采样工具

如何使用

FFmpeg是由c代码编写而成,功能多,代码量大。在Android平台使用需要先编译,后使用,编译可以通过MakeFile语法来进行编译

编译准备

  1. ffmpeg版本:4.0.4 地址

  2. ndk版本 17c 地址

  3. 获取源码

wget xxx(地址)
  1. 配置环境变量
vim /etc/profile  
NDKROOT=~/ndk/android-ndk-r17c
export PATH=$NDKROOT:$PATH

更新环境变量
source /etc/profile  
进行测试
ndk-build

编译

切换到 ffmpeg源码目录,有一个configure。这个是一个shell,用于编译ffmpeg。具体的命令./configure --help,这里由于需要输入的参数比较多,所以这里使用shell脚本的方式来编译ffmpeg
这里定义了一个build.sh 。这里命令比较长,使用\进行命令之间的连接

#!/bin/bash
NDK_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

你可能感兴趣的:(linux)