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     
+## 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"