avant-propos
Cet article est un résumé de quelques méthodes et pit records lorsque j'ai compilé FFmpeg. Il y a plus ou moins de problèmes avec les scripts de compilation utilisés dans de nombreux tutoriels sur Internet. Je fais principalement quelques optimisations sur la base des prédécesseurs. Les questions sont les bienvenues discuter
Configuration de l'environnement
Je n'en dirai pas plus à ce sujet.
Système d'exploitation : Ubuntu 20.04.4
NDK r24
FFmpeg 5.0
ndk Je l'ai téléchargé directement via Android Studio, ou il peut être téléchargé séparément.
Ensuite, je dois configurer l'environnement NDK. C'est aussi relativement simple, mais je vais entrer dans les détails.
vim etc/profile
#输入你自己的ndk路径
export NDK_HOME=/Android/Sdk/ndk/24.0.8215888
复制代码
test:
ndk-build -v
复制代码
L'invite suivante s'affiche pour indiquer la réussite :
En cas d'échec, vous devrez peut-être accorder des autorisations de dossier :
chmod 751 -r 目录名称
复制代码
Compiler FFmpeg
Allez sur le site officiel pour télécharger la version 5.0, décompressez-la et autorisez le changement de répertoire. Après cela, nous commençons à écrire le script de compilation
. Exécutez la commande :
vim ffbuild.sh
复制代码
Entrez ce qui suit :
#!/bin/bash
#此处 NDK_HOME 为环境变量
#我的路径是 /Android/Sdk/ndk/24.0.8215888
NDK_ROOT=$NDK_HOME
echo "<<<<<<<<<<<<<基于NDK24编译 FFmpeg 5.0 64位硬件解码版本>>>>>>>>>>>>>>"
#设置编译平台的相关参数
CPU=armv8-a
ARCH=arm64
OS=android
PLATFORM=aarch64-linux-android
OPTIMIZE_CFLAGS="-march=$CPU"
#指定输出路径
PREFIX=$(pwd)/android/aarch64
#此处 TOOLCHAIN 为环境变量
#我的路径是 /Android/Sdk/ndk/24.0.8215888/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/llvm-
#CROSS_PREFIX=$TOOLCHAIN/bin/$PLATFORM-
ANDROID_CROSS_PREFIX=$TOOLCHAIN/bin/${PLATFORM}21-
echo "开始编译 $CPU"
#该脚本命令中不能插入注释,每行命令必须以 \ 结尾
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-gpl \
--enable-neon \
--enable-hwaccels \
--enable-postproc \
--enable-jni \
--enable-small \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffplay \
--disable-avdevice \
--disable-debug \
--disable-static \
--disable-doc \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=$OS \
--arch=$ARCH \
--cpu=$CPU \
--cc=${ANDROID_CROSS_PREFIX}clang \
--cxx=${ANDROID_CROSS_PREFIX}clang++ \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fPIC $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
make clean
#编译
make
#安装
make install
echo "编译完成 $CPU"
复制代码
Avant de l'utiliser, vous devez remplacer le chemin spécifié par le script par votre propre chemin ndk. Après cela, il est préférable de s'assurer que gcc et yasm ont été installés sur votre système (ceux qui sont installés peuvent être ignorés) et d'exécuter le commande suivante :
#更新
sudo apt-get update
#安装工具包
sudo apt-get install yasm
sudo apt-get install build-essential
复制代码
Voici quelques remarques sur le script :
1. Le chemin doit être modifié par le chemin sous votre propre ndk
2. Les paramètres de configuration de ./configure peuvent être définis en fonction de vos propres besoins. Plus précisément, vous pouvez cliquer sur le dossier après décompression de ffmpeg 3. Si vous avez
besoin de compiler la version 32 bits, modifiez les paramètres correspondants
ARCH=arm
CPU=armv7-a
PLATFORM=armv7a-linux-androideabi
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
复制代码
exécuter le script
Placez le script dans le répertoire ffmpeg et exécutez la commande pour exécuter
sh ffbuild.sh
复制代码
Ensuite, il commencera à compiler ffmpeg
Fosses rencontrées lors de la compilation
1、xxxx-clang est incapable de créer un fichier exécutable.
Il s'agit généralement d'un problème de chemin, assurez-vous de vérifier si la configuration du chemin est correcte
2. -- Commande XX : introuvable
Vérifiez si la commande dans le script \
se termine par , ou s'il y a d'autres caractères inutiles dans la commande
3, ./configre : xxxxxxx-nm not found ou xxxx-strip not found, etc.
Lorsque quelque chose comme ci-dessus apparaît, nous pouvons observer qu'il n'y a pas d'outil correspondant dans le chemin qu'il imprime, mais nous pouvons trouver des llvm
outils avec des préfixes dans le répertoire, tels que llvm-nm
, llvm-strip
etc. Les préfixes de ces outils sont spécifiés par la --cross-prefix=
commande . De nombreux scripts sur Internet utilisent des préfixes tels que armv7a-linux-android, qui ne doivent pas être trouvés. Cela devrait être la pratique de la version précédente, donc je l'ai changé en ceci dans le script de compilation que j'ai donné $TOOLCHAIN/bin/llvm-
, donc il n'y a pas de problème. .
Bien sûr, si untel introuvable apparaît toujours, nous pouvons également spécifier le chemin de l'outil séparément,
comme xxx-strip not found, nous pouvons ajouter une instruction pour spécifier le chemin de l'outil de bande, comme suit :
STRIP=$TOOLCHAIN/bin/bin/llvm-strip
./configure \
.... \
--strip=$STRIP \
复制代码
Résumer
Cet article n'est que quelques modifications et optimisations apportées sur la base des prédécesseurs et de quelques pit records. Si vous avez besoin d'une introduction plus détaillée, vous pouvez vous rendre sur la compilation # One-click du grand gars de FFmpeg 32/64 bits 4.2.2