From 20f314f03bddf798a89b280be0b962dcbef3cb94 Mon Sep 17 00:00:00 2001 From: anilbeesetti Date: Thu, 21 Sep 2023 16:43:31 +0530 Subject: [PATCH 1/7] feat: add mbedtls to support http,tcp,rtmp etc --- ffmpeg/setup.sh | 58 +++++++++++++++++++++++++++++++++++--- media3ext/build.gradle.kts | 1 + mediainfo/build.gradle.kts | 1 + 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/ffmpeg/setup.sh b/ffmpeg/setup.sh index f2c13bc..f19101c 100755 --- a/ffmpeg/setup.sh +++ b/ffmpeg/setup.sh @@ -2,6 +2,7 @@ # Versions VPX_VERSION=1.13.0 +MBEDTLS_VERSION=3.4.1 FFMPEG_VERSION=6.0 # Directories @@ -11,9 +12,11 @@ OUTPUT_DIR=$BASE_DIR/output SOURCES_DIR=$BASE_DIR/sources FFMPEG_DIR=$SOURCES_DIR/ffmpeg-$FFMPEG_VERSION VPX_DIR=$SOURCES_DIR/libvpx-$VPX_VERSION +MBEDTLS_DIR=$SOURCES_DIR/mbedtls-$MBEDTLS_VERSION # Configuration ANDROID_ABIS="x86 x86_64 armeabi-v7a arm64-v8a" +ANDROID_PLATFORM=21 ENABLED_DECODERS="vorbis opus flac alac pcm_mulaw pcm_alaw mp3 amrnb amrwb aac ac3 eac3 dca mlp truehd h264 hevc mpeg2video mpegvideo libvpx_vp8 libvpx_vp9" JOBS=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || sysctl -n hw.pysicalcpu || echo 4) @@ -30,24 +33,38 @@ msys) ;; esac +# Build tools TOOLCHAIN_PREFIX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/${HOST_PLATFORM}" +CMAKE_EXECUTABLE=${ANDROID_SDK_HOME}/cmake/3.22.1/bin/cmake +MAKE_EXECUTABLE=${ANDROID_NDK_HOME}/prebuilt/${HOST_TAG}/bin/make + mkdir -p $SOURCES_DIR function downloadLibVpx() { pushd $SOURCES_DIR echo "Downloading Vpx source code of version $VPX_VERSION..." VPX_FILE=libvpx-$VPX_VERSION.tar.gz - curl -L https://github.com/webmproject/libvpx/archive/refs/tags/v$VPX_VERSION.tar.gz -o $VPX_FILE + curl -L "https://github.com/webmproject/libvpx/archive/refs/tags/v${VPX_VERSION}.tar.gz" -o $VPX_FILE tar -zxf $VPX_FILE rm $VPX_FILE popd } +function downloadMbedTLS() { + pushd $SOURCES_DIR + echo "Downloading mbedtls source code of version $MBEDTLS_VERSION..." + MBEDTLS_FILE=mbedtls-$MBEDTLS_VERSION.tar.gz + curl -L "https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${MBEDTLS_VERSION}.tar.gz" -o $MBEDTLS_FILE + tar -zxf $MBEDTLS_FILE + rm $MBEDTLS_FILE + popd +} + function downloadFfmpeg() { pushd $SOURCES_DIR echo "Downloading FFmpeg source code of version $FFMPEG_VERSION..." FFMPEG_FILE=ffmpeg-$FFMPEG_VERSION.tar.gz - curl -L https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.gz -o $FFMPEG_FILE + curl -L "https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz" -o $FFMPEG_FILE tar -zxf $FFMPEG_FILE rm $FFMPEG_FILE popd @@ -110,12 +127,37 @@ function buildLibVpx() { ${EXTRA_BUILD_FLAGS} make clean - make -j"$JOBS" + make -j$JOBS make install done popd } +function buildMbedTLS() { + pushd $MBEDTLS_DIR + + for ABI in $ANDROID_ABIS; do + + CMAKE_BUILD_DIR=mbedtls_build_${ABI} + rm -rf ${CMAKE_BUILD_DIR} + mkdir ${CMAKE_BUILD_DIR} + pushd ${CMAKE_BUILD_DIR} + + ${CMAKE_EXECUTABLE} .. \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_ABI=$ABI \ + -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake \ + -DCMAKE_INSTALL_PREFIX=$BUILD_DIR/external/$ABI \ + -DENABLE_TESTING=0 + + make -j$JOBS + make install + + popd + done + popd +} + function buildFfmpeg() { pushd $FFMPEG_DIR EXTRA_BUILD_CONFIGURATION_FLAGS="" @@ -194,6 +236,8 @@ function buildFfmpeg() { --enable-avformat \ --enable-libvpx \ --enable-protocol=file,http,https,mmsh,mmst,pipe,rtmp,rtmps,rtmpt,rtmpts,rtp,tls \ + --enable-version3 \ + --enable-mbedtls \ --extra-ldexeflags=-pie \ --disable-debug \ ${EXTRA_BUILD_CONFIGURATION_FLAGS} \ @@ -202,7 +246,7 @@ function buildFfmpeg() { # Build FFmpeg echo "Building FFmpeg for $ARCH..." make clean - make -j"$JOBS" + make -j$JOBS make install OUTPUT_LIB=${OUTPUT_DIR}/lib/${ABI} @@ -223,6 +267,11 @@ if [[ ! -d "$OUTPUT_DIR" && ! -d "$BUILD_DIR" ]]; then downloadLibVpx fi + # Download MbedTLS source code if it doesn't exist + if [[ ! -d "$MBEDTLS_DIR" ]]; then + downloadMbedTLS + fi + # Download Ffmpeg source code if it doesn't exist if [[ ! -d "$FFMPEG_DIR" ]]; then downloadFfmpeg @@ -230,5 +279,6 @@ if [[ ! -d "$OUTPUT_DIR" && ! -d "$BUILD_DIR" ]]; then # Building library buildLibVpx + buildMbedTLS buildFfmpeg fi diff --git a/media3ext/build.gradle.kts b/media3ext/build.gradle.kts index bf52963..581a249 100644 --- a/media3ext/build.gradle.kts +++ b/media3ext/build.gradle.kts @@ -50,6 +50,7 @@ android { val ffmpegSetup by tasks.registering(Exec::class) { workingDir = file("../ffmpeg") // export ndk path and run bash script + environment("ANDROID_SDK_HOME", android.sdkDirectory.absolutePath) environment("ANDROID_NDK_HOME", android.ndkDirectory.absolutePath) commandLine("bash", "setup.sh") } diff --git a/mediainfo/build.gradle.kts b/mediainfo/build.gradle.kts index f106949..ece0dd0 100644 --- a/mediainfo/build.gradle.kts +++ b/mediainfo/build.gradle.kts @@ -50,6 +50,7 @@ android { val ffmpegSetup by tasks.registering(Exec::class) { workingDir = file("../ffmpeg") // export ndk path and run bash script + environment("ANDROID_SDK_HOME", android.sdkDirectory.absolutePath) environment("ANDROID_NDK_HOME", android.ndkDirectory.absolutePath) commandLine("bash", "setup.sh") } From 455823a19d4de6d866246f8171956f1f2da5a611 Mon Sep 17 00:00:00 2001 From: anilbeesetti Date: Fri, 22 Sep 2023 15:41:21 +0530 Subject: [PATCH 2/7] refactor: change cmake build dir variable --- ffmpeg/setup.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ffmpeg/setup.sh b/ffmpeg/setup.sh index f19101c..577aff7 100755 --- a/ffmpeg/setup.sh +++ b/ffmpeg/setup.sh @@ -138,10 +138,10 @@ function buildMbedTLS() { for ABI in $ANDROID_ABIS; do - CMAKE_BUILD_DIR=mbedtls_build_${ABI} + CMAKE_BUILD_DIR=$MBEDTLS_DIR/mbedtls_build_${ABI} rm -rf ${CMAKE_BUILD_DIR} - mkdir ${CMAKE_BUILD_DIR} - pushd ${CMAKE_BUILD_DIR} + mkdir -p ${CMAKE_BUILD_DIR} + cd ${CMAKE_BUILD_DIR} ${CMAKE_EXECUTABLE} .. \ -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ @@ -153,7 +153,6 @@ function buildMbedTLS() { make -j$JOBS make install - popd done popd } From 28278231dcedb9e10445a68a1449f5533115f738 Mon Sep 17 00:00:00 2001 From: anilbeesetti Date: Fri, 22 Sep 2023 17:41:19 +0530 Subject: [PATCH 3/7] build mbedtls first --- ffmpeg/setup.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/ffmpeg/setup.sh b/ffmpeg/setup.sh index 577aff7..2c304b9 100755 --- a/ffmpeg/setup.sh +++ b/ffmpeg/setup.sh @@ -36,7 +36,6 @@ esac # Build tools TOOLCHAIN_PREFIX="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/${HOST_PLATFORM}" CMAKE_EXECUTABLE=${ANDROID_SDK_HOME}/cmake/3.22.1/bin/cmake -MAKE_EXECUTABLE=${ANDROID_NDK_HOME}/prebuilt/${HOST_TAG}/bin/make mkdir -p $SOURCES_DIR @@ -261,23 +260,23 @@ function buildFfmpeg() { } if [[ ! -d "$OUTPUT_DIR" && ! -d "$BUILD_DIR" ]]; then - # Download Vpx source code if it doesn't exist - if [[ ! -d "$VPX_DIR" ]]; then - downloadLibVpx - fi - # Download MbedTLS source code if it doesn't exist if [[ ! -d "$MBEDTLS_DIR" ]]; then downloadMbedTLS fi + # Download Vpx source code if it doesn't exist + if [[ ! -d "$VPX_DIR" ]]; then + downloadLibVpx + fi + # Download Ffmpeg source code if it doesn't exist if [[ ! -d "$FFMPEG_DIR" ]]; then downloadFfmpeg fi # Building library - buildLibVpx buildMbedTLS + buildLibVpx buildFfmpeg fi From dd2cee34076d5f1ece951163a03b11566b3658f4 Mon Sep 17 00:00:00 2001 From: anilbeesetti Date: Sun, 24 Sep 2023 10:48:34 +0530 Subject: [PATCH 4/7] jitpack install cmake before build --- jitpack.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/jitpack.yml b/jitpack.yml index 1e41e00..720877c 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,2 +1,4 @@ -jdk: - - openjdk17 \ No newline at end of file +before_install: + - yes | sdkmanager "cmake;3.22.1" + - sdk install java 17.0.8-open + - sdk use java 17.0.8-open From 50052d71eda3644b88bc1245bbfafd0991ff31b7 Mon Sep 17 00:00:00 2001 From: anilbeesetti Date: Sun, 24 Sep 2023 11:15:33 +0530 Subject: [PATCH 5/7] use jdk8 to install cmake --- jitpack.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/jitpack.yml b/jitpack.yml index 720877c..8e280c4 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,4 +1,6 @@ +jdk: + - openjdk8 before_install: - yes | sdkmanager "cmake;3.22.1" - - sdk install java 17.0.8-open - - sdk use java 17.0.8-open + - sdk install java 17.0.8-tem + - sdk use java 17.0.8-tem From 0f8d1e84bed593e2de79063bc07da52acce1035a Mon Sep 17 00:00:00 2001 From: anilbeesetti Date: Sun, 24 Sep 2023 11:37:50 +0530 Subject: [PATCH 6/7] add checks after libraries downloaded --- ffmpeg/setup.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ffmpeg/setup.sh b/ffmpeg/setup.sh index 2c304b9..6a08166 100755 --- a/ffmpeg/setup.sh +++ b/ffmpeg/setup.sh @@ -44,6 +44,7 @@ function downloadLibVpx() { echo "Downloading Vpx source code of version $VPX_VERSION..." VPX_FILE=libvpx-$VPX_VERSION.tar.gz curl -L "https://github.com/webmproject/libvpx/archive/refs/tags/v${VPX_VERSION}.tar.gz" -o $VPX_FILE + [ -e $VPX_FILE ] || { echo "$VPX_FILE does not exist. Exiting..."; exit 1; tar -zxf $VPX_FILE rm $VPX_FILE popd @@ -54,6 +55,7 @@ function downloadMbedTLS() { echo "Downloading mbedtls source code of version $MBEDTLS_VERSION..." MBEDTLS_FILE=mbedtls-$MBEDTLS_VERSION.tar.gz curl -L "https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${MBEDTLS_VERSION}.tar.gz" -o $MBEDTLS_FILE + [ -e $MBEDTLS_FILE ] || { echo "$MBEDTLS_FILE does not exist. Exiting..."; exit 1; tar -zxf $MBEDTLS_FILE rm $MBEDTLS_FILE popd @@ -64,6 +66,7 @@ function downloadFfmpeg() { echo "Downloading FFmpeg source code of version $FFMPEG_VERSION..." FFMPEG_FILE=ffmpeg-$FFMPEG_VERSION.tar.gz curl -L "https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz" -o $FFMPEG_FILE + [ -e $FFMPEG_FILE ] || { echo "$FFMPEG_FILE does not exist. Exiting..."; exit 1; tar -zxf $FFMPEG_FILE rm $FFMPEG_FILE popd From 98e40eace588269a735a73570c7f3443a64d7939 Mon Sep 17 00:00:00 2001 From: anilbeesetti Date: Sun, 24 Sep 2023 11:44:43 +0530 Subject: [PATCH 7/7] fix: shell script error --- ffmpeg/setup.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ffmpeg/setup.sh b/ffmpeg/setup.sh index 6a08166..ad7646e 100755 --- a/ffmpeg/setup.sh +++ b/ffmpeg/setup.sh @@ -44,7 +44,7 @@ function downloadLibVpx() { echo "Downloading Vpx source code of version $VPX_VERSION..." VPX_FILE=libvpx-$VPX_VERSION.tar.gz curl -L "https://github.com/webmproject/libvpx/archive/refs/tags/v${VPX_VERSION}.tar.gz" -o $VPX_FILE - [ -e $VPX_FILE ] || { echo "$VPX_FILE does not exist. Exiting..."; exit 1; + [ -e $VPX_FILE ] || { echo "$VPX_FILE does not exist. Exiting..."; exit 1; } tar -zxf $VPX_FILE rm $VPX_FILE popd @@ -55,7 +55,7 @@ function downloadMbedTLS() { echo "Downloading mbedtls source code of version $MBEDTLS_VERSION..." MBEDTLS_FILE=mbedtls-$MBEDTLS_VERSION.tar.gz curl -L "https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${MBEDTLS_VERSION}.tar.gz" -o $MBEDTLS_FILE - [ -e $MBEDTLS_FILE ] || { echo "$MBEDTLS_FILE does not exist. Exiting..."; exit 1; + [ -e $MBEDTLS_FILE ] || { echo "$MBEDTLS_FILE does not exist. Exiting..."; exit 1; } tar -zxf $MBEDTLS_FILE rm $MBEDTLS_FILE popd @@ -66,7 +66,7 @@ function downloadFfmpeg() { echo "Downloading FFmpeg source code of version $FFMPEG_VERSION..." FFMPEG_FILE=ffmpeg-$FFMPEG_VERSION.tar.gz curl -L "https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz" -o $FFMPEG_FILE - [ -e $FFMPEG_FILE ] || { echo "$FFMPEG_FILE does not exist. Exiting..."; exit 1; + [ -e $FFMPEG_FILE ] || { echo "$FFMPEG_FILE does not exist. Exiting..."; exit 1; } tar -zxf $FFMPEG_FILE rm $FFMPEG_FILE popd