x264 Введение:
① H.264 стандартный : H.264 также стандартное кодирование видео , Зависит от ITU и MPEG формулировать ;
② x264 Библиотека с открытым исходным кодом : x264 да H.264 форматировать библиотеку видеокодеков , Зависит от C Языковая реализация ;
③ Официальная страница : доступ x264 Официальная страница сайта ,Должен Библиотека с открытым исходным кодомда Зависит от VLC Поддерживается той же командой ;
④ Прямая загрузка : выше Официальная страница сайтплохой советдоступ , Может Нажмите здесь Прямая загрузка , Также существует ресурс блога "Можетовать" в скачать. ;
⑤ Android Использование : x264 Библиотека очень большая , должен быть кросс-компилирован в ARM Библиотека архитектурных функций ( динамическая библиотека / статическая библиотека ) импортировать в Android Studio Можно использовать только в ;
В отличие от RTMPDump, который только
индивидуальный C код , Может Ставьте прямосуществовать Android Studio Компилировать в проекте ;
Справочный блог : некоторая конфигурация , Обратитесь к тому, что я написал ранее NDK Блоги, посвященные кросс-компиляции ;
1 . Подготовьте среду компиляции : в соответствии с кросс-компиляциясреда действовать , Первый NDK Среда настроена ;
2 . Скопируйте исходный код в Ubuntu : Воля last_x264.tar.bz2 скопировать в Ubuntu в /root/rtmp/ в каталоге ;
3. Разархивируйте исходный код:
tar xvf last_x264.tar.bz2
4 . Конфигурация Makefile документ ( Только для справки ) : и FFMPEG Скомпилированный контент похож на , Не по одному Конфигурация , Прямое исполнение shell Автоконфигурация скрипта ;
--prefix
: Укажите каталог установки ;
--cross-prefix
: обозначениекросс-компиляцияголова ;
--sysroot
: Каталог поиска документов в библиотеке заголовков конфигурации ;
5 . кросс-компиляция Shell Содержимое сценария : Согласно предыдущему FFMPEG компилировать Shell Просто измените скрипт , только если ./configure
генерировать Makefile Варианты разные , Все остальное то же самое ; существовать x264 Каталог исходного кода x264-master Вниз , создавать build.sh , и скопируйте приведенный выше контент ;
#!/bin/bash
# NDK корневой каталог
NDK_ROOT=/root/NDK/android-ndk-r17c
# TOOLCHAIN переменная указывает на gcc g++ Каталог других инструментов кросс-компиляции существует.
ToolCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
# gcc скомпилировать параметры устройства
ФЛАГИ="-isysroot $NDK_ROOT/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -isystem $NDK_ROOT/sources/android/support/include -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fPIC"
# компилироватьрезультат Выходной путь
PREFIX=./android/armeabi-v7a
./configure \
--prefix=$PREFIX \
--disable-cli \
--enable-static \
--enable-pic \
--host=arm-linux \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
--extra-cflags="$FLAGS"
# Очистить предыдущую компилировать содержание
make clean
# начать заново FFMPEG скомпилировать процесс установки
make install
6 . Изменить разрешения скрипта : chmod -R 777 build.sh
Заказ , Исправлять build.sh Разрешения скрипта ;
root@octopus:~/rtmp/x264-master# ls
AUTHORS build.sh config.guess configure doc example.c filters Makefile tools x264.c x264dll.c x264res.rc
autocomplete.c common config.sub COPYING encoder extras input output version.sh x264cli.h x264.h
root@octopus:~/rtmp/x264-master# chmod -R 777 build.sh
7 . осуществлятькомпилировать Скрипт : осуществлять ./build.sh
компилировать Скрипт ,компилироватьназад, результаты, подобные Внизу ;
1 . копироватьдокумент : Скопируйте приведенную выше библиотеку функций «Компилировать хорошие заголовки документов» в Android Studio В разработке , создать каталог без каталога ;
2 . редактировать build.gradle Создать скрипт : Толькосуществоватьгенерироватьизкодпо сути , добавлен abiFilters ‘armeabi-v7a’ содержание ;
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "kim.hsl.rtmp"
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
abiFilters 'armeabi-v7a'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
3 . редактировать CMakeList.txt Создать скрипт : Да src/main/cpp Внизиз CMakeList.txt Создать скрипт ;
cmake_minimum_required(VERSION 3.4.1)
# Связь src/main/cpp/librtmp в каталогеиз Создать скрипт
add_subdirectory(librtmp)
add_library( # Имя библиотеки функций
native-lib
# динамическая библиотекатип SHARED
# источникдокумент native-lib.cpp )
find_library( # Библиотека журналов
log-lib
log )
# Установить путь поиска документа заголовка
include_directories(include)
# Установив опцию компилировать, Установите путь поиска для библиотек функций
# Вот ANDROID_ABI дасуществовать
# build.gradle android->defaultConfig->externalNativeBuild->cmake
# Внизиз abiFilters Средние настройки
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")
target_link_libraries( # Связьдинамическая библиотека
native-lib
# компилироватьиз rtmp статическая библиотека
rtmp
${log-lib} )
1 . кросс-компиляция Android версия библиотеки : существовать Ubuntu При выполнении кросс-компиляции , Использовал android-21 Библиотека функций версии и заголовочный документ ,
# Два перехваченных ролика индивидуальной конфигурации
FLAGS="...-D__ANDROID_API__=21..."
./configure \
...
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
...
2 . Android APP всамый низкий Версия : Android Проект в build.gradle Минимальная совместимая версия, соответствующая Конфигурация. , Тоже хочу да 21 Версия ;
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "kim.hsl.rtmp"
// основной ---------------------------------
minSdkVersion 21
// основной ---------------------------------
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
abiFilters 'armeabi-v7a'
}
}
}
...
}
...
Ubuntu вкросс-компиляция Версия , и Android Минимальная совместимость приложений Версия , Будьте последовательны ;