Ubuntu环境下编译FFmpeg的流程

Ubuntu环境下编译FFmpeg的流程

 

  1. 在Windows10系统下,安装Ubuntu系统

   不需要安装虚拟机,使用Window10自带的ubuntu引导程序安装ubuntu系统。

   安装步骤:

  1. ,控制面板->程序->启用或关闭Windows功能 打开 适用于Linux的Windows子系统 选项。

Ubuntu环境下编译FFmpeg的流程_第1张图片

  1. 在Microsoft Store中搜索ubuntu,如果有多个版本,建议选择**.04的版本是最稳定的,除了**.04版本,可能还会有**.10版本。

Ubuntu环境下编译FFmpeg的流程_第2张图片

  1. 选择之后,就进入安装过程。。。,中间要输入用户名密码,等待完成。

 

  1. 环境配置
  1. ,替换软件源,就是把ubuntu默认的国外的源替换成国内的源,如清华、阿里的,目的是更新软件时更快。vim /etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

 

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

 

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

 

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

 

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

可以事先把原来的内容做个备份,这里是更换的阿里的源,需要注意的是要根据ubuntu的不同版本,来替换。

  1. 更新软件库

    sudo apt update

sudo apt upgrad

如果需要中文版,可以去安装中文语言包。如需图形界面,也要另外安装。

  1. 由于win10自带的ubuntu不包含gcc,g++,需要另外安装。

sudo apt install gcc

安装后,可以测试编译下HelloWorld.c,

如不能正常编译:

 

  1. 查看盘符:

Ubuntu下,查看对应window的盘符:/mnt/d,/mnt/c

  Window下查看ubuntu的文件系统:

C:\Users\jianlin\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs

  1. 编译FFmpeg
  1. 下载

   Git clone https://github.com/FFmpeg/FFmpeg.git

   因为要用NDK编译用于android平台的FFmpeg,要下载linux的android sdk

    

  1. 在FFmpeg目录下,创建编译脚本

     build_bash.sh

  1. 编译脚本

这里只编译了arm64-v8a平台的库。

脚本中的编译选择,如要支持那些格式的编解码,要编译静态库,还是动态库,都在FFmpeg目录下的configure文件中。

-extra-cflags 
fPIC,编译共享库时,告诉编译器产生与位置无关的代码,
-mfpu=neon-vfp4  ARM平台的指令编译优化,NEON+VFP结构
-mfloat-abi=hard or softfp,
-marm 
-O0~3	开启编译器优化,-O0为不优化,-O3为最高级别的优化
-mthumb  使编译器生成THUMB指令
-mthumb-interwork 使编译器生成支持ARM和Thumb指令集之间相互调用的代码,默认是-mno-thumb-interwork

以下是脚本代码:

#!/bin/bash

NDK=/home/jianlinwang/android-ndk/android-ndk-r21b
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
API=26

#--enable-debug=3 --disable-debug
function build_android
{
echo "Compiling FFmpeg for $CPU"

./configure \
	--target-os=android \
	--logfile=$FILE \
    --prefix=$PREFIX \
	--bindir=$DIR \
    --enable-neon \
    --enable-hwaccels \
    --enable-gpl \
	--disable-debug \
    --disable-postproc \
    --enable-shared \
    --enable-static \
    --enable-jni \
	--enable-small \
    --enable-mediacodec \
    --enable-decoder=h264_mediacodec \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-avdevice \
    --disable-symver \
    --cross-prefix=$CROSS_PREFIX \
    --arch=$ARCH \
    --cpu=$CPU \
    --cc=$CC \
    --cxx=$CXX \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fPIC -DANDROID -marm $OPTIMIZE_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG 
	make clean
    make
    make install
    echo "The Compilation of FFmpeg for $CPU is completed"
	cp -avx $PREFIX/ /mnt/d/FFmpeg-build/$CPU
	cp -avx $DIR/ /mnt/d/FFmpeg-build/$CPU
	cp -f $FILE /mnt/d/FFmpeg-build/$CPU
}

#armv-7a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mthumb -mfpu=neon -march=$CPU"
FILE=$(pwd)/android/config.log
DIR=$(pwd)/android/bin
build_android

#armv8-a
ARCH=arm64
CPU=armv8-a
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=hard -mfpu=neon-vfp4 -mthumb-interwork -march=$CPU"
FILE=$(pwd)/android/config.log
DIR=$(pwd)/android/bin
#build_android

 

 

  1. 编译结果

Bin目录下是可执行文件(这个需要编译window平台下的版本才好用)

Include 项目中导入ffmpeg库时,需要导入的头文件

Lib 静态库,动态库

Share 使用范例代码

Config.log 编译log,从这里log可以看出,编译出的库对编解码格式的支持情况。

Ubuntu环境下编译FFmpeg的流程_第3张图片

 

你可能感兴趣的:(音视频,android,windows,ffmepg)