Замечания по разработке FFmpeg (16) Кросс-компиляция Linux библиотеки OpenSSL для Android
Замечания по разработке FFmpeg (16) Кросс-компиляция Linux библиотеки OpenSSL для Android

Подпрограммы в книге «Практика разработки FFmpeg: от нулевых основ к короткому онлайн-видео» в основном проверяют локальные аудио- и видеофайлы. Конечно, из соображений безопасности многие онлайн-видео используют https-адреса. Если FFmpeg хочет получить доступ к https-видео, он должен интегрировать стороннюю библиотеку openssl, но openssl по умолчанию отключен при компиляции FFmpeg. Чтобы приложение могло воспроизводить онлайн-видео по протоколу https, его необходимо скомпилировать, установить и включить с помощью openssl.

При кросс-компиляции библиотеки so Android на сервере Linux подробные шаги по интеграции openssl в FFmpeg следующие:

1. Кросс-компиляция OpenSSL

Адрес хостинга исходного кода openssl — https://github.com/openssl/openssl, а страница загрузки каждой версии openssl — https://github.com/openssl/openssl/releases/. Например, openssl-3.2.0 выйдет в ноябре 2023 года. Эту версию пакета исходного кода openssl можно скачать по ссылке ниже:

Язык кода:javascript
копировать
https://github.com/openssl/openssl/releases/download/openssl-3.2.0/openssl-3.2.0.tar.gz

Загрузите пакет исходного кода openssl на сервер Linux, распакуйте его и войдите в каталог исходного кода, то есть выполните следующую команду.

Язык кода:javascript
копировать
tar zxvf openssl-3.2.0.tar.gz
cd openssl-3.2.0

Подтвердите, что ndk размещен на сервере, затем создайте сценарий компиляции build_openssl.sh и заполните следующее содержимое сценария (обратите внимание, что android-arm64 означает компиляцию 64-битной библиотеки so, а no-shared означает только компиляцию статических библиотек и не динамические библиотеки):

Язык кода:javascript
копировать
#!/bin/bash

NDK_HOME=/usr/local/src/android-ndk-r21e
SYSTEM=linux-x86_64
HOST=aarch64-linux-android
API=24

export PATH=$NDK_HOME/toolchains/llvm/prebuilt/$SYSTEM/bin:$NDK_HOME/toolchains/$HOST-4.9/prebuilt/$SYSTEM/bin:$PATH
export ANDROID_NDK_ROOT=$NDK_HOME

echo "config for openssl"
./Configure android-arm64 no-shared --prefix=/usr/local/app_openssl -D__ANDROID_API__=$API
echo "config for openssl completed"

make -j4
make install

Сохраните и закройте build_openssl.sh и выполните следующие команды для компиляции и установки openssl.

Язык кода:javascript
копировать
chmod +x build_openssl.sh
./build_openssl.sh

2. Загрузите переменные среды openssl.

Первым шагом является установка openssl в /usr/local/app_openssl и загрузка пути pkgconfig openssl в переменную среды PKG_CONFIG_PATH. Файл профиля системы Linux находится в .bash_profile в исходном каталоге пользователя. Выполните следующую команду, чтобы отредактировать файл профиля текущего пользователя:

Язык кода:javascript
копировать
cd
vi .bash_profile

Добавьте следующую строку в конец файла .bash_profile:

Язык кода:javascript
копировать
export PKG_CONFIG_PATH=/usr/local/app_openssl/lib/pkgconfig:$PKG_CONFIG_PATH

После сохранения и выхода из .bash_profile выполните следующую команду, чтобы загрузить переменные среды:

Язык кода:javascript
копировать
source .bash_profile

Затем выполните следующую команду просмотра переменных среды, чтобы убедиться, что переменные среды openssl успешно загружены.

Язык кода:javascript
копировать
env | grep PKG

3. Перекомпилируйте FFmpeg и включите openssl.

Откройте главу 12/config_ffmpeg_full.sh в исходном коде «Разработка FFmpeg: от нулевых основ до короткого видео онлайн», сохраните файл как config_ffmpeg_openssl.sh и добавьте эту строку внутрь файла.

Язык кода:javascript
копировать
  --enable-libx264 \

Добавьте следующую строку конфигурации ниже

Язык кода:javascript
копировать
  --enable-openssl \

Затем загрузите config_ffmpeg_openssl.sh в исходный каталог FFmpeg на сервере и выполните следующую команду, чтобы предоставить разрешения на выполнение.

Язык кода:javascript
копировать
chmod +x config_ffmpeg_openssl.sh

Затем выполните следующие команды для настройки, компиляции и установки FFmpeg.

Язык кода:javascript
копировать
./config_ffmpeg_openssl.sh
make clean
make -j4
make install

4. Импортируйте файл so в проект приложения.

(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_openssl.sh, включая x264, x265, mp3lame, freetype и т. д. (4) Откройте код cpp проекта приложения, измените адрес онлайн-видео, которое будет воспроизводиться, на ссылку https, перекомпилируйте и установите приложение, и видео https можно будет воспроизводить в обычном режиме.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода