diff --git a/.github/workflows/android-build-scripts.yml b/.github/workflows/android-build-scripts.yml index 51005c233..921f12ae2 100644 --- a/.github/workflows/android-build-scripts.yml +++ b/.github/workflows/android-build-scripts.yml @@ -118,7 +118,7 @@ jobs: run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log' build-lts-on-macos: name: android lts on macos - runs-on: macos-11 + runs-on: macos-12 strategy: matrix: ndk-version: [ 'r22b-darwin-x86_64', 'r23b-darwin' ] diff --git a/.github/workflows/ios-build-scripts.yml b/.github/workflows/ios-build-scripts.yml index 792a9436b..ef2e663f6 100644 --- a/.github/workflows/ios-build-scripts.yml +++ b/.github/workflows/ios-build-scripts.yml @@ -32,7 +32,7 @@ jobs: runs-on: macos-14 strategy: matrix: - xcode: [ '15.4' ] + xcode: [ '15.4', '16.0' ] defaults: run: shell: bash diff --git a/.github/workflows/macos-build-scripts.yml b/.github/workflows/macos-build-scripts.yml index f4f222819..d76fcfe65 100644 --- a/.github/workflows/macos-build-scripts.yml +++ b/.github/workflows/macos-build-scripts.yml @@ -32,7 +32,7 @@ jobs: runs-on: macos-14 strategy: matrix: - xcode: [ '14.3.1', '15.3' ] + xcode: [ '15.4', '16.0' ] defaults: run: shell: bash diff --git a/.github/workflows/periodic-builds-apple.yml b/.github/workflows/periodic-builds-apple.yml index 24ab696dd..6b3b19b9f 100644 --- a/.github/workflows/periodic-builds-apple.yml +++ b/.github/workflows/periodic-builds-apple.yml @@ -10,7 +10,7 @@ jobs: runs-on: macos-14 strategy: matrix: - xcode: [ '14.3.1', '15.3' ] + xcode: [ '15.4', '16.0' ] branches: [ 'main', 'development' ] defaults: run: @@ -62,7 +62,7 @@ jobs: runs-on: macos-14 strategy: matrix: - xcode: [ '14.3.1', '15.3' ] + xcode: [ '15.4', '16.0' ] branches: [ 'main', 'development' ] defaults: run: @@ -114,7 +114,7 @@ jobs: runs-on: macos-14 strategy: matrix: - xcode: [ '14.3.1', '15.3' ] + xcode: [ '15.4', '16.0' ] branches: [ 'main', 'development' ] defaults: run: diff --git a/.github/workflows/tvos-build-scripts.yml b/.github/workflows/tvos-build-scripts.yml index 356a414c2..eaee3abd9 100644 --- a/.github/workflows/tvos-build-scripts.yml +++ b/.github/workflows/tvos-build-scripts.yml @@ -32,7 +32,7 @@ jobs: runs-on: macos-14 strategy: matrix: - xcode: [ '14.3.1', '15.3' ] + xcode: [ '15.4', '16.0' ] defaults: run: shell: bash diff --git a/README.md b/README.md index 454ae6d9a..352c31109 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,43 @@ +# 16KB Page Size Update +This fork only aims to make ffmpeg-kit compatible with new android versions (API 35) which request all binaries to be rebuilt. +Google request developers to build new with new r27 and r28 ndk but ffmpeg-kit has its own NDK compatibility table which supports only upto r25.

+Edit: As original devs said, master branch has been tested upto NDK r27. + +

+Lucky for us, there is a version of ndk r23 and r25 in CI which supports 16KB page sizes too. +make sure to download this ndk version and compile ffmpeg-kit with this ndk only.
+NDK : R23 R25 +

+You can find all details related to this update here. https://developer.android.com/guide/practices/page-sizes +
+ # FFmpegKit ![GitHub release](https://img.shields.io/badge/release-v6.0-blue.svg) ![Maven Central](https://img.shields.io/maven-central/v/com.arthenica/ffmpeg-kit-min) ![CocoaPods](https://img.shields.io/cocoapods/v/ffmpeg-kit-ios-min) ![pub](https://img.shields.io/pub/v/ffmpeg_kit_flutter.svg) ![npm](https://img.shields.io/npm/v/ffmpeg-kit-react-native.svg) +## Notice +FFmpegKit has been officially retired. There will be no further `ffmpeg-kit` releases. + +See [Saying Goodbye to FFmpegKit @ medium](https://medium.com/@tanersener/saying-goodbye-to-ffmpegkit-33ae939767e1) to learn why we made this decision. + +All previously released `ffmpeg-kit` binaries will be removed according to the following schedule. + +| FFmpegKit Version | Available Until | +|:-----------------:|:------------------:| +| Less than 6.0 | February 1st, 2025 | +| 6.0 | April 1st, 2025 | + +Thank you for your support and interest in this project. + +If you're looking for a replacement, please check out the community-maintained forks available through the package managers below. + +| Platform | +|:-------------------------------------------------------:| +| [Android](https://central.sonatype.com/search?q=ffmpeg+kit) | +| [Flutter](https://pub.dev/packages?q=ffmpeg+kit) | +| [React Native](https://www.npmjs.com/search?q=ffmpeg%20kit) | + -`FFmpegKit` is a collection of tools to use `FFmpeg` in `Android`, `iOS`, `Linux`, `macOS`, `tvOS`, `Flutter` and `React Native` applications. +`FFmpegKit` is a collection of tools to use `FFmpeg`1 in `Android`, `iOS`, `Linux`, `macOS`, `tvOS`, `Flutter` and `React Native` applications. It includes scripts to build `FFmpeg` native libraries, a wrapper library to run `FFmpeg`/`FFprobe` commands in applications and 8 prebuilt binary packages available at [Github](https://github.com/arthenica/ffmpeg-kit/releases), @@ -219,11 +254,15 @@ that you seek legal advice first. See [FFmpeg Patent Mini-FAQ](https://ffmpeg.or distribute that library, then you are subject to pay MPEG LA licensing fees. Refer to [OpenH264 FAQ](https://www.openh264.org/faq.html) page for the details. -### 16. Contributing +### 16. Trademarks + +1 `FFmpeg` is a trademark of [Fabrice Bellard](http://www.bellard.org/). `FFmpegKit` is an independent project and not affiliated with the `FFmpeg` trademark holder. + +### 17. Contributing See our [CONTRIBUTING](CONTRIBUTING.md) guide. -### 17. See Also +### 18. See Also - [FFmpeg API Documentation](https://ffmpeg.org/doxygen/4.0/index.html) - [FFmpeg Wiki](https://trac.ffmpeg.org/wiki/WikiStart) diff --git a/android.sh b/android.sh index 4d4e02379..ae29dcb16 100755 --- a/android.sh +++ b/android.sh @@ -31,6 +31,7 @@ echo -e "INFO: Build options: $*\n" 1>>"${BASEDIR}"/build.log 2>&1 export GPL_ENABLED="no" DISPLAY_HELP="" BUILD_FULL="" +BUILD_RELEASE="" BUILD_TYPE_ID="" BUILD_VERSION=$(git describe --tags --always 2>>"${BASEDIR}"/build.log) @@ -104,6 +105,10 @@ while [ ! $# -eq 0 ]; do --full) BUILD_FULL="1" ;; + --full-release) + BUILD_FULL="1" + BUILD_RELEASE="1" + ;; --enable-gpl) export GPL_ENABLED="yes" ;; @@ -153,7 +158,10 @@ fi # PROCESS FULL OPTION AS LAST OPTION if [[ -n ${BUILD_FULL} ]]; then for library in {0..61}; do - if [ ${GPL_ENABLED} == "yes" ]; then + libname="$(get_library_name $library)" + if [ "$libname" = gnutls ]; then + : + elif [ ${GPL_ENABLED} == "yes" ]; then enable_library "$(get_library_name $library)" 1 else if [[ $(is_gpl_licensed $library) -eq 1 ]]; then @@ -374,6 +382,13 @@ if [[ -n ${ANDROID_ARCHITECTURES} ]]; then echo -e "failed\n" exit 1 fi + if [[ ${BUILD_RELEASE} -eq 1 ]]; then + ./gradlew publishReleasePublicationToGitHubPackagesRepository 1>>"${BASEDIR}"/build.log 2>&1 + if [ $? -ne 0 ]; then + echo -e "release failed, check build.log for details\n" + exit 1 + fi + fi # COPY ANDROID ARCHIVE TO PREBUILT DIRECTORY FFMPEG_KIT_AAR="${BASEDIR}/prebuilt/$(get_aar_directory)/ffmpeg-kit" diff --git a/android/ffmpeg-kit-android-lib/build.gradle b/android/ffmpeg-kit-android-lib/build.gradle index f1dd6ed19..631706f0a 100644 --- a/android/ffmpeg-kit-android-lib/build.gradle +++ b/android/ffmpeg-kit-android-lib/build.gradle @@ -1,15 +1,16 @@ apply plugin: 'com.android.library' +apply plugin: 'maven-publish' android { if (project.android.hasProperty("namespace")) { namespace 'com.arthenica.ffmpegkit' } - compileSdk 33 + compileSdk 35 ndkVersion "22.1.7171670" defaultConfig { minSdk 24 - targetSdk 33 + targetSdk 35 versionCode 240600 versionName "6.0" project.archivesBaseName = "ffmpeg-kit" @@ -41,6 +42,7 @@ android { } } + publishing { singleVariant('release') { withJavadocJar() @@ -63,3 +65,29 @@ dependencies { testImplementation "androidx.test.ext:junit:1.1.5" testImplementation 'org.json:json:20230618' } + +// GitHub Packages publishing configuration +afterEvaluate { + publishing { + publications { + release(MavenPublication) { + from components.release + + groupId = 'com.arthenica' + artifactId = 'ffmpeg-kit-full' + version = "6.0-3" + } + } + + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/beeper/beeper-android") + credentials { + username = System.getenv("GITHUB_USERNAME") ?: providers.gradleProperty("githubUsername") + password = System.getenv("GITHUB_TOKEN") ?: providers.gradleProperty("githubPassword") + } + } + } + } +} diff --git a/docs/index.md b/docs/index.md index 579aad9f5..288073dd1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,5 +1,15 @@ # FFmpegKit +## Notice +FFmpegKit has been officially retired. There will be no further `ffmpeg-kit` releases. All previously released `ffmpeg-kit` binaries will be removed according to the following schedule. Thank you for your support and interest in this project. + +Thank you for your support and contributions over the course of this project. + +| FFmpegKit Version | Available Until | +|:-----------------:|:------------------:| +| Less than 6.0 | February 1st, 2025 | +| 6.0 | April 1st, 2025 | + `FFmpegKit` is a collection of tools to use `FFmpeg` in `Android`, `iOS`, `Linux`, `macOS`, `tvOS`, `Flutter` and `React Native` applications. diff --git a/scripts/android/ffmpeg.sh b/scripts/android/ffmpeg.sh index 8b311fd97..88fef3cae 100755 --- a/scripts/android/ffmpeg.sh +++ b/scripts/android/ffmpeg.sh @@ -533,7 +533,7 @@ overwrite_file "${BASEDIR}"/src/ffmpeg/libavutil/x86/asm.h "${FFMPEG_LIBRARY_PAT overwrite_file "${BASEDIR}"/src/ffmpeg/libavutil/x86/timer.h "${FFMPEG_LIBRARY_PATH}"/include/libavutil/x86/timer.h 1>>"${BASEDIR}"/build.log 2>&1 overwrite_file "${BASEDIR}"/src/ffmpeg/libavutil/arm/timer.h "${FFMPEG_LIBRARY_PATH}"/include/libavutil/arm/timer.h 1>>"${BASEDIR}"/build.log 2>&1 overwrite_file "${BASEDIR}"/src/ffmpeg/libavutil/aarch64/timer.h "${FFMPEG_LIBRARY_PATH}"/include/libavutil/aarch64/timer.h 1>>"${BASEDIR}"/build.log 2>&1 -overwrite_file "${BASEDIR}"/src/ffmpeg/libavutil/x86/emms.h "${FFMPEG_LIBRARY_PATH}"/include/libavutil/x86/emms.h 1>>"${BASEDIR}"/build.log 2>&1 +overwrite_file "${BASEDIR}"/src/ffmpeg/libavutil/emms.h "${FFMPEG_LIBRARY_PATH}"/include/libavutil/emms.h 1>>"${BASEDIR}"/build.log 2>&1 if [ $? -eq 0 ]; then echo "ok" diff --git a/scripts/android/libaom.sh b/scripts/android/libaom.sh index 9180c88da..b4c0ce394 100755 --- a/scripts/android/libaom.sh +++ b/scripts/android/libaom.sh @@ -7,19 +7,19 @@ git checkout ${BASEDIR}/src/${LIB_NAME}/aom_ports 1>>"${BASEDIR}"/build.log 2>&1 ASM_OPTIONS="" case ${ARCH} in arm-v7a) - ASM_OPTIONS="-DARCH_ARM=1 -DENABLE_NEON=0 -DHAVE_NEON=0" + ASM_OPTIONS="-DARCH_ARM=1 -DENABLE_NEON=0 -DHAVE_NEON=0 -DAOM_TARGET_CPU=generic" ;; arm-v7a-neon) - ASM_OPTIONS="-DARCH_ARM=1 -DENABLE_NEON=1 -DHAVE_NEON=1" + ASM_OPTIONS="-DARCH_ARM=1 -DENABLE_NEON=1 -DHAVE_NEON=1 -DAOM_TARGET_CPU=generic" ;; arm64-v8a) - ASM_OPTIONS="-DARCH_ARM=1 -DENABLE_NEON=1 -DHAVE_NEON=1" + ASM_OPTIONS="-DARCH_ARM=1 -DENABLE_NEON=1 -DHAVE_NEON=1 -DAOM_TARGET_CPU=arm64" ;; x86) - ASM_OPTIONS="-DENABLE_SSE=1 -DHAVE_SSE=1 -DENABLE_SSE3=1 -DHAVE_SSE3=1" + ASM_OPTIONS="-DENABLE_SSE=1 -DHAVE_SSE=1 -DENABLE_SSE3=1 -DHAVE_SSE3=1 -DAOM_TARGET_CPU=generic" ;; x86-64) - ASM_OPTIONS="-DENABLE_SSE4_2=1 -DHAVE_SSE4_2=1" + ASM_OPTIONS="-DENABLE_SSE4_2=1 -DHAVE_SSE4_2=1 -DAOM_TARGET_CPU=generic" ;; esac @@ -48,7 +48,6 @@ cmake -Wno-dev \ -DENABLE_EXAMPLES=0 \ -DENABLE_TOOLS=0 \ -DCONFIG_UNIT_TESTS=0 \ - -DAOM_TARGET_CPU=generic \ -DBUILD_SHARED_LIBS=0 "${BASEDIR}"/src/"${LIB_NAME}" || return 1 make -j$(get_cpu_count) || return 1 diff --git a/scripts/android/libiconv.sh b/scripts/android/libiconv.sh index 15535c7c6..545c134a2 100755 --- a/scripts/android/libiconv.sh +++ b/scripts/android/libiconv.sh @@ -1,8 +1,17 @@ #!/bin/bash -# INIT SUBMODULES +# FIX HARD-CODED PATHS ${SED_INLINE} 's|git://git.savannah.gnu.org|https://github.com/arthenica|g' "${BASEDIR}"/src/"${LIB_NAME}"/.gitmodules || return 1 -./gitsub.sh pull || return 1 +ln -s -f $(which aclocal) ${BASEDIR}/.tmp/aclocal-1.16 +ln -s -f $(which automake) ${BASEDIR}/.tmp/automake-1.16 +PATH="${BASEDIR}/.tmp":$PATH + +if [[ ! -d "${BASEDIR}"/src/"${LIB_NAME}"/gnulib ]]; then + + # INIT SUBMODULES + ./gitsub.sh pull || return 1 + ./gitsub.sh checkout gnulib 485d983b7795548fb32b12fbe8370d40789e88c4 || return 1 +fi # ALWAYS CLEAN THE PREVIOUS BUILD make distclean 2>/dev/null 1>/dev/null diff --git a/scripts/android/openssl.sh b/scripts/android/openssl.sh index 76eb706cf..b83d7f28f 100644 --- a/scripts/android/openssl.sh +++ b/scripts/android/openssl.sh @@ -1,6 +1,6 @@ #!/bin/bash -if [[ ${ARCH} == "x86" ]]; then +if [[ ${ARCH} == "x86" ]] && false; then # openssl does not support 32-bit apple architectures echo -e "ERROR: openssl is not supported on $ARCH architecture for $FFMPEG_KIT_BUILD_TYPE platform.\n" 1>>"${BASEDIR}"/build.log 2>&1 diff --git a/scripts/apple/libogg.sh b/scripts/apple/libogg.sh index 13f00515f..5e325643a 100755 --- a/scripts/apple/libogg.sh +++ b/scripts/apple/libogg.sh @@ -8,9 +8,6 @@ if [[ ! -f "${BASEDIR}"/src/"${LIB_NAME}"/configure ]] || [[ ${RECONF_libogg} -e autoreconf_library "${LIB_NAME}" 1>>"${BASEDIR}"/build.log 2>&1 || return 1 fi -# FIX INCLUDE PATHS -${SED_INLINE} 's/sys\/types/stdint/g' ${BASEDIR}/src/libogg/include/ogg/os_types.h - ./configure \ --prefix="${LIB_INSTALL_PREFIX}" \ --with-pic \ diff --git a/scripts/function-android.sh b/scripts/function-android.sh index 0e4b78a75..4c4c8619e 100755 --- a/scripts/function-android.sh +++ b/scripts/function-android.sh @@ -91,7 +91,7 @@ APP_PLATFORM := android-${API} APP_CFLAGS := -O3 -DANDROID ${LTS_BUILD_FLAG}${BUILD_DATE} -Wall -Wno-deprecated-declarations -Wno-pointer-sign -Wno-switch -Wno-unused-result -Wno-unused-variable -APP_LDFLAGS := -Wl,--hash-style=both +APP_LDFLAGS := "-Wl,-z,max-page-size=16384,--hash-style=both" EOF } @@ -390,6 +390,9 @@ get_cxxflags() { rubberband | srt | tesseract | zimg) echo "-std=c++11 ${OPTIMIZATION_FLAGS}" ;; + tiff) + echo "-std=gnu99 -fno-exceptions -fno-rtti ${OPTIMIZATION_FLAGS}" + ;; *) echo "-std=c++11 -fno-exceptions -fno-rtti ${OPTIMIZATION_FLAGS}" ;; @@ -482,7 +485,7 @@ get_ldflags() { fi local COMMON_LINKED_LIBS=$(get_common_linked_libraries "$1") - echo "${ARCH_FLAGS} ${OPTIMIZATION_FLAGS} ${COMMON_LINKED_LIBS} -Wl,--hash-style=both -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libunwind.a" + echo "${ARCH_FLAGS} ${OPTIMIZATION_FLAGS} ${COMMON_LINKED_LIBS} -Wl,-z,max-page-size=16384,--hash-style=both -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libunwind.a" } create_mason_cross_file() { diff --git a/tools/android/build.gradle b/tools/android/build.gradle index b58381574..631706f0a 100644 --- a/tools/android/build.gradle +++ b/tools/android/build.gradle @@ -1,15 +1,16 @@ apply plugin: 'com.android.library' +apply plugin: 'maven-publish' android { if (project.android.hasProperty("namespace")) { namespace 'com.arthenica.ffmpegkit' } - compileSdk 33 + compileSdk 35 ndkVersion "22.1.7171670" defaultConfig { minSdk 24 - targetSdk 33 + targetSdk 35 versionCode 240600 versionName "6.0" project.archivesBaseName = "ffmpeg-kit" @@ -64,3 +65,29 @@ dependencies { testImplementation "androidx.test.ext:junit:1.1.5" testImplementation 'org.json:json:20230618' } + +// GitHub Packages publishing configuration +afterEvaluate { + publishing { + publications { + release(MavenPublication) { + from components.release + + groupId = 'com.arthenica' + artifactId = 'ffmpeg-kit-full' + version = "6.0-3" + } + } + + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/beeper/beeper-android") + credentials { + username = System.getenv("GITHUB_USERNAME") ?: providers.gradleProperty("githubUsername") + password = System.getenv("GITHUB_TOKEN") ?: providers.gradleProperty("githubPassword") + } + } + } + } +} diff --git a/tools/android/build.lts.gradle b/tools/android/build.lts.gradle index 8deb4eac7..763f4a9ab 100644 --- a/tools/android/build.lts.gradle +++ b/tools/android/build.lts.gradle @@ -4,12 +4,12 @@ android { if (project.android.hasProperty("namespace")) { namespace 'com.arthenica.ffmpegkit' } - compileSdk 33 + compileSdk 35 ndkVersion "22.1.7171670" defaultConfig { minSdk 16 - targetSdk 33 + targetSdk 35 versionCode 160600 versionName "6.0.LTS" project.archivesBaseName = "ffmpeg-kit"