[Разработка Android FFMPEG] Конфигурация проекта Android Studio FFMPEG (упаковка динамической библиотеки | копирование файла заголовка и библиотеки функций | конфигурация сценария CMake)
[Разработка Android FFMPEG] Конфигурация проекта Android Studio FFMPEG (упаковка динамической библиотеки | копирование файла заголовка и библиотеки функций | конфигурация сценария CMake)

Каталог статей

Язык кода:txt
копировать
        - [I. Кросс-скомпилированная библиотека функций FFMPEG и файлы заголовков.](https://cloud.tencent.com/developer)
        - [II. Статическая библиотека FFMPEG, упаковывающая динамическую библиотеку (только для справки).](https://cloud.tencent.com/developer)
        - [III. Создайте проект Android Studio.](https://cloud.tencent.com/developer)
        - [IV. Заголовочный файл FFMPEG и копия статической библиотеки.](https://cloud.tencent.com/developer)
        - [V. CMakeList.txt настраивает файл заголовка FFMPEG и библиотеку функций.](https://cloud.tencent.com/developer)
        - [VI. Код С++.](https://cloud.tencent.com/developer)
        - [VII. Ресурсы блога.](https://cloud.tencent.com/developer)
I. Кросс-скомпилированная библиотека функций FFMPEG и файлы заголовков.

1 . компилировать FFMPEG библиотека функций : 【Android FFMPEG Разработка】FFMPEG кресткомпилировать Конфигурация ( скачать | Скрипт конфигурации | Выходной путь | библиотека функций Конфигурация | Конфигурация программы | Конфигурация компонентов | Конфигурация кодирования и декодирования | кресткомпилировать Конфигурация | окончательный сценарий )

компилироватьвнеизстатическая библиотекасуществоватьвышеблогиз Файл ресурсовсерединаскачать ; Скриншот ниже находится в Ubuntu серединакресткомпилироватьвнеиз 6 статическая библиотека , общий 86 MB ;

2. Описание размера статической библиотеки:

① отладочная информация : компилироватьвнеиз 6 статическая библиотекаиметь 86MB , Это да, потому что когда компилировать , Будет отладочная Информация также включена в подписку. , Легко отлаживать ;

② Размер упаковки : Наконец упаковано в APK после , весь APK В файле меньше 10MB размер ,

II. Статическая библиотека FFMPEG, упаковывающая динамическую библиотеку (только для справки).

Статические библиотеки упаковываются в динамические библиотеки. ( Только для справки ) : Поместите выше 6 статическая библиотека Пакетприезжать динамическая библиотека середина ; упакованный libffmpeg.so существоватьблогресурссередина Можетскачать ;

① настраивать кресткомпилироватьустройство Временные переменные среды :

export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc

② настраиватьобозначение заголовочный файлибиблиотека функций из Временные переменные среды :

export C_FLAGS="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"

③ Команда пакета статической библиотеки:

CC C_FLAGS -shared -o libffmpeg.so -Wl,--whole-archive libavcodec.a libavformat.a libswresample.a libavfilter.a libavutil.a libswscale.a -Wl,--no-whole-archive

④ Процесс упаковки:

Язык кода:javascript
копировать
root@octopus:~/FFMPEG/ffmpeg-4.0.2/android/armeabi-v7a/lib# export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
root@octopus:~/FFMPEG/ffmpeg-4.0.2/android/armeabi-v7a/lib# export C_FLAGS="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
root@octopus:~/FFMPEG/ffmpeg-4.0.2/android/armeabi-v7a/lib# 
root@octopus:~/FFMPEG/ffmpeg-4.0.2/android/armeabi-v7a/lib# $CC $C_FLAGS -shared -o libffmpeg.so -Wl,--whole-archive libavcodec.a libavformat.a libswresample.a libavfilter.a libavutil.a libswscale.a -Wl,--no-whole-archive
root@octopus:~/FFMPEG/ffmpeg-4.0.2/android/armeabi-v7a/lib# ls
libavcodec.a  libavfilter.a  libavformat.a  libavutil.a  libffmpeg.so  libswresample.a  libswscale.a  pkgconfig
root@octopus:~/FFMPEG/ffmpeg-4.0.2/android/armeabi-v7a/lib# ll
Общая дозировка 129336
drwxr-xr-x 3 root root     4096 февраль  19 22:30 ./
drwxr-xr-x 5 root root     4096 февраль  18 22:19 ../
-rw-r--r-- 1 root root 60104544 февраль  18 22:18 libavcodec.a
-rw-r--r-- 1 root root   763728 февраль  18 22:14 libavfilter.a
-rw-r--r-- 1 root root 25221538 февраль  18 22:15 libavformat.a
-rw-r--r-- 1 root root  1609508 февраль  18 22:19 libavutil.a
-rwxr-xr-x 1 root root 41509960 февраль  19 22:30 libffmpeg.so*
-rw-r--r-- 1 root root   401316 февраль  18 22:18 libswresample.a
-rw-r--r-- 1 root root  2807636 февраль  18 22:19 libswscale.a
drwxr-xr-x 2 root root     4096 февраль  18 22:19 pkgconfig/
III. Создайте проект Android Studio.

создавать Android Studio проект : создать один Native C++ тип Android проект ; ( Здесь нет базовых операций с чернилами. )

IV. Заголовочный файл FFMPEG и копия статической библиотеки.

Копирование файлов заголовков и файлов статических библиотек : будет генерировать include и lib два каталога , скопировать в app/src/main/cpp в каталоге ;

динамическая библиотекаскопировать в jniLibs/armeabi-v7a в каталоге , Статические библиотеки могут скопировать впроизвольный Кусочекнабориспользовать ;

V. CMakeList.txt настраивает файл заголовка FFMPEG и библиотеку функций.

1 . заголовочный файл Найти путьнастраивать : использовать include_directories обозначение FFMPEG Каталог поиска заголовочных файлов , CMAKE_SOURCE_DIR Относится к текущему адресу файла ;

Язык кода:javascript
копировать
# IV . обозначение FFMPEG Каталог поиска заголовочных файлов
#           CMAKE_SOURCE_DIR Относится к текущему адресу файла
include_directories(${CMAKE_SOURCE_DIR}/include)

2 . библиотека функцийнастраивать : библиотека функцийсуществовать cpp/lib середина , здесьиспользовать -L параметробозначениебиблиотека функции найти путь ;

Язык кода:javascript
копировать
# V . обозначение FFMPEG статическая библиотека
# CMAKE_CXX_FLAGS Сказал, что это будет C++ из параметров передаются компилирующему устройству
# CMAKE_C_FLAGS Сказал, что это будет C Параметры передаются компилирующему устройству

# параметрнастраивать : передача CMAKE_CXX_FLAGS C+= Когда параметры передаются компилируемому устройству , существовать За этим параметром следует обозначение библиотеки по пути.
#   CMAKE_SOURCE_DIR Относится к текущему адресу файла
#   -L параметробозначениединамическая библиотекаиз найти путь
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/lib")

3 . библиотека функций Связьнастраивать : Обратите внимание, что здесь есть ссылка FFMPEG из 6 статическая библиотека , не пропусти ;

Язык кода:javascript
копировать
# V . Ссылка на библиотеку функций
#       параметр 1 : Этот скрипт сборки для создания издинамического библиотека Цель
#       параметр 2 ~ ... : позжеда Предварительныйкомпилироватьиздинамическая библиотекаилистатическая библиотека , илипредставлятьиздинамическая библиотека
target_link_libraries(
        native-lib

        # FFMPEG статическая библиотека
        avcodec
        avfilter
        avformat
        avutil
        swresample
        swscale

        # Библиотека журналов
        ${log-lib})

4. Полный сценарий сборки:

Язык кода:javascript
копировать
# I . обозначение CMake Минимальная версия
cmake_minimum_required(VERSION 3.4.1)

# II . настраиватьбиблиотека функцийкомпилировать
add_library( # параметр 1 : настраиватьгенерироватьиздинамическая библиотекаимя        native-lib

        # параметр 2 : настраиватьгенерироватьизбиблиотека функцийтип : ① статическая библиотека STATIC ② динамическая библиотека SHARED
        SHARED

        # параметр 3 : источникдокументация для составления конфигурации
        native-lib.cpp)

# III . Искать в каталоге по умолчанию log Библиотека , Назначьте найденный путь log-lib
#       Этот путь да NDK из ndk-bundle\platforms\android-29\arch-arm\usr\lib\liblog.so
#       другой Android номер версии и CPU Архитектура Искать нужно в соответствующем из каталога середина. , Хереда 29 Версия 32 Кусочек ARM Архитектураиз Библиотека журналов
#
# Можетбез Конфигурация :
#       Данную Конфигурацию выполнять не обязательно, прямойсуществоватьпозжеиз target_link_libraries середина Связь log Не могу ошибиться
find_library(
        log-lib

        log)


# IV . обозначение FFMPEG Каталог поиска заголовочных файлов
#           CMAKE_SOURCE_DIR Относится к текущему адресу файла
include_directories(${CMAKE_SOURCE_DIR}/include)

# V . обозначение FFMPEG статическая библиотека
# CMAKE_CXX_FLAGS Сказал, что это будет C++ из параметров передаются компилирующему устройству
# CMAKE_C_FLAGS Сказал, что это будет C Параметры передаются компилирующему устройству

# параметрнастраивать : передача CMAKE_CXX_FLAGS C+= Когда параметры передаются компилируемому устройству , существовать За этим параметром следует обозначение библиотеки по пути.
#   CMAKE_SOURCE_DIR Относится к текущему адресу файла
#   -L параметробозначениединамическая библиотекаиз найти путь
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/lib")


# V . Ссылка на библиотеку функций
#       параметр 1 : Этот скрипт сборки для создания издинамического библиотека Цель
#       параметр 2 ~ ... : позжеда Предварительныйкомпилироватьиздинамическая библиотекаилистатическая библиотека , илипредставлятьиздинамическая библиотека
target_link_libraries(
        native-lib

        # FFMPEG статическая библиотека
        avcodec
        avfilter
        avformat
        avutil
        swresample
        swscale

        # Библиотека журналов
        ${log-lib})
VI. Код С++.

1 . Представляем заголовочные файлы : представлять libavcodec/avcodec.h заголовочный файл , FFMPEG да C Разработка ,существовать C++ серединаиспользоватьнуждатьсяиспользовать extern “C” для совместимости ;

Язык кода:javascript
копировать
// Уведомление FFMPEG да C Разработка , существовать C++ серединаиспользоватьнуждатьсяиспользовать extern "C" для совместимости
extern "C"{
    #include <libavcodec/avcodec.h>
}

2 . Как получить номер версии : вызов av_version_info() можно получить FFMPEG номер версии , Прямо сейчас “4.0.2” , Перенесите эту строку в основной интерфейс для отображения. ;

3. Полный код:

Язык кода:javascript
копировать
#include <jni.h>
#include <string>

// Уведомление FFMPEG да C Разработка , существовать C++ серединаиспользоватьнуждатьсяиспользовать extern "C" для совместимости
extern "C"{
    #include <libavcodec/avcodec.h>
}


extern "C" JNIEXPORT jstring JNICALL
Java_kim_hsl_ffmpeg_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {
    std::string hello = "Hello from C++";

    return env->NewStringUTF(av_version_info());
}

4. Результаты выполнения:

VII. Ресурсы блога.

Ресурсы, связанные с блогом:

① CSDN Адрес блога : [Разработка Android FFMPEG] Конфигурация проекта Android Studio FFMPEG (упаковка динамической библиотеки | копирование файла заголовка и библиотеки функций | конфигурация сценария CMake)

② блогресурсскачатьадрес : https://download.csdn.net/download/han1202012/12173019

③ Пример кода GitHub адрес : https://github.com/han1202012/010_FFMPEG

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose