«12.1.2 Кросс-компиляция библиотеки so, необходимой для Android» в книге «Разработка FFmpeg: от нулевых основ к короткому видео в Интернете» описывает, как кросс-компилировать библиотеку so FFmpeg, необходимую для Android, в среде Windows. В статье также рассказывается, как кросс-компилировать библиотеку so FFmpeg, необходимую Android, в среде Linux. Далее мы расскажем, как кросс-компилировать библиотеку so x265, необходимую Android, в среде Linux.
Выполните следующую команду, чтобы установить cmake
yum install cmake git
Войдите на сервер Linux (например, в систему Эйлера Huawei Cloud) и последовательно выполните следующие команды.
cd /usr/local/src
curl -O https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
unzip android-ndk-r21e-linux-x86_64.zip
Загрузите пакет исходного кода x265 по ссылке ниже. https://bitbucket.org/multicoreware/x265_git/downloads/x265_3.5.tar.gz Разархивируйте пакет исходного кода x265, измените файл crosscompile.cmake в каталоге x265_3.5/build/aarch64-linux и замените следующие две строки.
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
Измените следующие две строки
set(CMAKE_C_COMPILER aarch64-linux-android24-clang)
set(CMAKE_CXX_COMPILER aarch64-linux-android24-clang++)
Войдите в каталог build/aarch64-linux под x265_3.5 и выполните следующую команду для настройки x265:
export PATH=$PATH:/usr/local/src/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin
./make-Makefiles.bash
В интерфейсе параметров, который появляется из командной строки, обратите внимание на следующие три изменения: (1) Измените элемент CMAKE_INSTALL_PREFIX на /usr/local/app_x265 (нажмите стрелку вниз, чтобы найти этот элемент, а затем нажмите клавишу Enter, чтобы отредактировать путь в режиме vi). (2) Измените значение элемента ENABLE_ASSEMBLY на OFF (нажмите стрелку вниз, чтобы найти этот элемент, а затем нажмите клавишу Enter, чтобы изменить значение ON на OFF). (3) Измените значение элемента ENABLE_CLI на OFF (нажмите стрелку вниз, чтобы найти элемент, а затем нажмите клавишу Enter, чтобы изменить значение ON на OFF). Затем нажмите клавишу c, чтобы начать настройку, нажмите клавишу e, чтобы выйти из конфигурации, а затем нажмите клавишу g, чтобы начать генерацию.
Войдите в каталог build/aarch64-linux/CMakeFiles/x265-shared.dir в исходном коде x265_3.5 и обратите внимание на изменение следующих трех файлов: (1) Измените link.txt каталога и замените все «libx265.so.199» в файле на «libx265.so». Также удалите «-lpthread -lrt» в конце файла. (2) Инструкции по изменению файла relink.txt в том же каталоге такие же, как и для файла link.txt. (3) Измените build.make в том же каталоге, замените все «libx265.so.199» в файле на «libx265.so» и замените все «libx265.so» на «libx265.so.199». Обратите внимание, что когда A и B обмениваются именами, вы можете задать третье имя C, например, сначала заменить A на C, затем заменить B на A, а затем заменить C на B.
Войдите в каталог build/aarch64-linux с исходным кодом x265_3.5 и выполните следующие команды для компиляции и установки x265:
make
make install
Измените x265.pc в /usr/local/app_x265/lib/pkgconfig. Удалите «-lrt» из параметра «Libs.private» файла, то есть измените его на следующую строку:
Libs.private: -lc++ -lm -lgcc -ldl -lgcc -ldl -ldl
Файл профиля Linux находится в .bash_profile в исходном каталоге пользователя. Выполните следующую команду, чтобы отредактировать файл профиля текущего пользователя:
cd
vi .bash_profile
Добавьте следующую строку в конец файла .bash_profile:
export PKG_CONFIG_PATH=/usr/local/app_x265/lib/pkgconfig:$PKG_CONFIG_PATH
После сохранения и выхода из .bash_profile выполните следующую команду, чтобы загрузить переменные среды:
source .bash_profile
Затем выполните следующую команду просмотра переменных среды, чтобы убедиться, что переменная среды x265 успешно загружена.
env | grep PKG
Откройте главу 12/config_ffmpeg_full.sh в исходном коде «Разработка FFmpeg: от нулевых основ до короткого видео в Интернете», сохраните файл как config_ffmpeg_x265.sh и добавьте эту строку внутри файла.
--enable-libx264 \
Добавьте следующую строку конфигурации ниже
--enable-libx265 \
Затем загрузите config_ffmpeg_x265.sh в исходный каталог FFmpeg на сервере и выполните следующую команду, чтобы предоставить разрешения на выполнение.
chmod +x config_ffmpeg_x265.sh
Затем выполните следующие команды для настройки, компиляции и установки FFmpeg.
./config_ffmpeg_x265.sh
make clean
make -j4
make install
(1) Скопируйте весь кросс-скомпилированный каталог включения FFmpeg (расположенный в /usr/local/app_ffmpeg/include) в каталог src/main/cpp проекта приложения. (2) Создайте каталог jniLibs в каталоге src\main, создайте подкаталог Arm64-v8a в каталоге jniLibs и скопируйте все 8 кросс-скомпилированных файлов so FFmpeg (расположенных в /usr/local/app_ffmpeg/lib) в Arm64- каталог v8a. (3) В каталог Arm64-v8a также копируются файлы so нескольких сторонних библиотек, включенных в config_ffmpeg_x265.sh, включая x264, x265, mp3lame, freetype и т. д. (4) Добавьте следующую конфигурацию в узел android→defaultConfig→externalNativeBuild→cmake файла build.gradle проекта приложения.
abiFilters "arm64-v8a"
arguments '-DANDROID_STL=c++_shared' // Требуется, когда FFmpeg интегрирует x265.
Если не добавлено, приложение сообщит об ошибке «java.lang.UnsatisfiedLinkError: dlopen error: библиотека «libc++_shared.so» не найдена» при запуске. (5) Скомпилируйте и запустите проект приложения в Android Studio и проверьте, работает ли приложение нормально.