From 1203a3218c1b66c7c5b4adfb7b6b546928b30962 Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Wed, 6 Oct 2021 20:33:23 +0100 Subject: [PATCH 1/7] use rich code blocks in readmes --- android/README.md | 35 +++++++++++++++++------------------ apple/README.md | 34 +++++++++++++++++----------------- 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/android/README.md b/android/README.md index aadcda2..2b52687 100644 --- a/android/README.md +++ b/android/README.md @@ -71,7 +71,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director `ffmpeg-kit-` pattern. Use one of the `FFmpegKit` package names given in the project [README](https://github.com/tanersener/ffmpeg-kit). - ``` + ```yaml repositories { mavenCentral() } @@ -83,9 +83,8 @@ All libraries created by `android.sh` can be found under the `prebuilt` director 2. Execute synchronous `FFmpeg` commands. - ``` + ```java import com.arthenica.ffmpegkit.FFmpegKit; - import com.arthenica.ffmpegkit.ReturnCode; FFmpegSession session = FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 file2.mp4"); if (ReturnCode.isSuccess(session.getReturnCode())) { @@ -107,7 +106,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director 3. Each `execute` call (sync or async) creates a new session. Access every detail about your execution from the session created. - ``` + ```java FFmpegSession session = FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 file2.mp4"); // Unique session id created for this execution @@ -144,7 +143,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director 4. Execute asynchronous `FFmpeg` commands by providing session specific `execute`/`log`/`session` callbacks. - ``` + ```java FFmpegKit.executeAsync("-i file1.mp4 -c:v mpeg4 file2.mp4", new ExecuteCallback() { @Override @@ -179,7 +178,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director - Synchronous - ``` + ```java FFprobeSession session = FFprobeKit.execute(ffprobeCommand); if (!ReturnCode.isSuccess(session.getReturnCode())) { @@ -189,7 +188,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director - Asynchronous - ``` + ```java FFprobeKit.executeAsync(ffprobeCommand, new ExecuteCallback() { @Override @@ -203,7 +202,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director 6. Get media information for a file. - ``` + ```java MediaInformationSession mediaInformation = FFprobeKit.getMediaInformation(""); mediaInformation.getMediaInformation(); ``` @@ -211,18 +210,18 @@ All libraries created by `android.sh` can be found under the `prebuilt` director 7. Stop ongoing `FFmpeg` operations. - Stop all executions - ``` + ```java FFmpegKit.cancel(); ``` - Stop a specific session - ``` + ```java FFmpegKit.cancel(sessionId); ``` 8. Convert Storage Access Framework (SAF) Uris into paths that can be read or written by `FFmpegKit`. - Reading a file: - ``` + ```java Uri safUri = intent.getData(); String inputVideoPath = FFmpegKitConfig.getSafParameterForRead(requireContext(), safUri); FFmpegKit.execute("-i " + inputVideoPath + " -c:v mpeg4 file2.mp4"); @@ -230,7 +229,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director - Writing to a file: - ``` + ```java Uri safUri = intent.getData(); String outputVideoPath = FFmpegKitConfig.getSafParameterForWrite(requireContext(), safUri); FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 " + outputVideoPath); @@ -238,7 +237,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director 9. Get previous `FFmpeg` and `FFprobe` sessions from session history. - ``` + ```java List sessions = FFmpegKitConfig.getSessions(); for (int i = 0; i < sessions.size(); i++) { Session session = sessions.get(i); @@ -256,7 +255,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director - Execute Callback, called when an async execution is ended - ``` + ```java FFmpegKitConfig.enableExecuteCallback(new ExecuteCallback() { @Override @@ -268,7 +267,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director - Log Callback, called when a session generates logs - ``` + ```java FFmpegKitConfig.enableLogCallback(new LogCallback() { @Override @@ -280,7 +279,7 @@ All libraries created by `android.sh` can be found under the `prebuilt` director - Statistics Callback, called when a session generates statistics - ``` + ```java FFmpegKitConfig.enableStatisticsCallback(new StatisticsCallback() { @Override @@ -292,13 +291,13 @@ All libraries created by `android.sh` can be found under the `prebuilt` director 11. Ignore the handling of a signal. Required by `Mono` and frameworks that use `Mono`, e.g. `Unity` and `Xamarin`. - ``` + ```java FFmpegKitConfig.ignoreSignal(Signal.SIGXCPU); ``` 12. Register system fonts and custom font directories. - ``` + ```java FFmpegKitConfig.setFontDirectoryList(context, Arrays.asList("/system/fonts", ""), Collections.EMPTY_MAP); ``` diff --git a/apple/README.md b/apple/README.md index 372b3df..110b16d 100644 --- a/apple/README.md +++ b/apple/README.md @@ -113,23 +113,23 @@ All libraries created can be found under the `prebuilt` directory. `FFmpegKit` package names given in the project [README](https://github.com/tanersener/ffmpeg-kit). - iOS - ``` + ```yaml pod 'ffmpeg-kit-ios-full', '~> 4.5' ``` - macOS - ``` + ```yaml pod 'ffmpeg-kit-macos-full', '~> 4.5' ``` - tvOS - ``` + ```yaml pod 'ffmpeg-kit-tvos-full', '~> 4.5' ``` 2. Execute synchronous `FFmpeg` commands. - ``` + ```objectivec #include FFmpegSession *session = [FFmpegKit execute:@"-i file1.mp4 -c:v mpeg4 file2.mp4"]; @@ -153,7 +153,7 @@ All libraries created can be found under the `prebuilt` directory. 3. Each `execute` call (sync or async) creates a new session. Access every detail about your execution from the session created. - ``` + ```objectivec FFmpegSession *session = [FFmpegKit execute:@"-i file1.mp4 -c:v mpeg4 file2.mp4"]; // Unique session id created for this execution @@ -190,7 +190,7 @@ All libraries created can be found under the `prebuilt` directory. 4. Execute asynchronous `FFmpeg` commands by providing session specific `execute`/`log`/`session` callbacks. - ``` + ```objectivec id session = [FFmpegKit executeAsync:@"-i file1.mp4 -c:v mpeg4 file2.mp4" withExecuteCallback:^(id session){ SessionState state = [session getState]; ReturnCode *returnCode = [session getReturnCode]; @@ -214,7 +214,7 @@ All libraries created can be found under the `prebuilt` directory. - Synchronous - ``` + ```objectivec FFprobeSession *session = [FFprobeKit execute:ffprobeCommand]; if ([ReturnCode isSuccess:[session getReturnCode]]) { @@ -224,7 +224,7 @@ All libraries created can be found under the `prebuilt` directory. - Asynchronous - ``` + ```objectivec [FFprobeKit executeAsync:ffmpegCommand withExecuteCallback:^(id session) { CALLED WHEN SESSION IS EXECUTED @@ -234,7 +234,7 @@ All libraries created can be found under the `prebuilt` directory. 6. Get media information for a file. - ``` + ```objectivec MediaInformationSession *mediaInformation = [FFprobeKit getMediaInformation:""]; MediaInformation *mediaInformation =[mediaInformation getMediaInformation]; ``` @@ -242,17 +242,17 @@ All libraries created can be found under the `prebuilt` directory. 7. Stop ongoing `FFmpeg` operations. - Stop all executions - ``` + ```objectivec [FFmpegKit cancel]; ``` - Stop a specific session - ``` + ```objectivec [FFmpegKit cancel:sessionId]; ``` 8. Get previous `FFmpeg` and `FFprobe` sessions from session history. - ``` + ```objectivec NSArray* sessions = [FFmpegKitConfig getSessions]; for (int i = 0; i < [sessions count]; i++) { id session = [sessions objectAtIndex:i]; @@ -270,7 +270,7 @@ All libraries created can be found under the `prebuilt` directory. - Execute Callback, called when an async execution is ended - ``` + ```objectivec [FFmpegKitConfig enableExecuteCallback:^(id session) { ... }]; @@ -278,7 +278,7 @@ All libraries created can be found under the `prebuilt` directory. - Log Callback, called when a session generates logs - ``` + ```objectivec [FFmpegKitConfig enableLogCallback:^(Log *log) { ... }]; @@ -286,7 +286,7 @@ All libraries created can be found under the `prebuilt` directory. - Statistics Callback, called when a session generates statistics - ``` + ```objectivec [FFmpegKitConfig enableStatisticsCallback:^(Statistics *statistics) { ... }]; @@ -294,13 +294,13 @@ All libraries created can be found under the `prebuilt` directory. 10. Ignore the handling of a signal. Required by `Mono` and frameworks that use `Mono`, e.g. `Unity` and `Xamarin`. - ``` + ```objectivec [FFmpegKitConfig ignoreSignal:SIGXCPU]; ``` 11. Register system fonts and custom font directories. - ``` + ```objectivec [FFmpegKitConfig setFontDirectoryList:[NSArray arrayWithObjects:@"/System/Library/Fonts", @"", nil] with:nil]; ``` From c9657a3911ebb7f46e7850be503182ba3c8dbf2d Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Wed, 6 Oct 2021 21:13:07 +0100 Subject: [PATCH 2/7] support ios 15, fixes #164 --- scripts/function-apple.sh | 16 ++++++++-------- scripts/function-ios.sh | 6 +++--- scripts/function-macos.sh | 2 +- scripts/function-tvos.sh | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/scripts/function-apple.sh b/scripts/function-apple.sh index 8ed878b..bc62a11 100755 --- a/scripts/function-apple.sh +++ b/scripts/function-apple.sh @@ -30,8 +30,8 @@ disable_ios_architecture_not_supported_on_detected_sdk_version() { case ${ARCH_NAME} in armv7 | armv7s | i386) - # SUPPORTED UNTIL IOS SDK 10 - if [[ $2 == 11* ]] || [[ $2 == 12* ]] || [[ $2 == 13* ]] || [[ $2 == 14* ]]; then + # SUPPORTED UNTIL IOS SDK 10.3.1 + if [[ $(echo "$2 > 10.4" | bc) -eq 1 ]]; then local SUPPORTED=0 else local SUPPORTED=1 @@ -39,8 +39,8 @@ disable_ios_architecture_not_supported_on_detected_sdk_version() { ;; arm64e) - # INTRODUCED IN IOS SDK 10 - if [[ $2 == 10* ]] || [[ $2 == 11* ]] || [[ $2 == 12* ]] || [[ $2 == 13* ]] || [[ $2 == 14* ]]; then + # INTRODUCED IN IOS SDK 10.1 + if [[ $(echo "$2 > 10" | bc) -eq 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -49,7 +49,7 @@ disable_ios_architecture_not_supported_on_detected_sdk_version() { x86-64-mac-catalyst) # INTRODUCED IN IOS SDK 13 - if [[ $2 == 13* ]] || [[ $2 == 14* ]]; then + if [[ $(echo "$2 > 12.4" | bc) -eq 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -58,7 +58,7 @@ disable_ios_architecture_not_supported_on_detected_sdk_version() { arm64-*) # INTRODUCED IN IOS SDK 14 - if [[ $2 == 14* ]]; then + if [[ $(echo "$2 > 13.7" | bc) -eq 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -88,7 +88,7 @@ disable_tvos_architecture_not_supported_on_detected_sdk_version() { arm64-simulator) # INTRODUCED IN TVOS SDK 14 - if [[ $2 == 14* ]]; then + if [[ $(echo "$2 > 13.4" | bc) -eq 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -118,7 +118,7 @@ disable_macos_architecture_not_supported_on_detected_sdk_version() { arm64) # INTRODUCED IN MACOS SDK 11 - if [[ $2 == 11* ]]; then + if [[ $(echo "$2 > 10.16" | bc) -eq 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 diff --git a/scripts/function-ios.sh b/scripts/function-ios.sh index a293123..7379070 100755 --- a/scripts/function-ios.sh +++ b/scripts/function-ios.sh @@ -119,13 +119,13 @@ get_arch_specific_cflags() { echo "-arch arm64e -target $(get_target) -march=armv8.3-a+crc+crypto -mcpu=generic -DFFMPEG_KIT_ARM64E" ;; i386) - echo "-arch i386 -target $(get_target) -march=i386 -mtune=intel -mssse3 -mfpmath=sse -m32 -DFFMPEG_KIT_I386" + echo "-arch i386 -target $(get_target) -march=i386 -mssse3 -mfpmath=sse -m32 -DFFMPEG_KIT_I386" ;; x86-64) - echo "-arch x86_64 -target $(get_target) -march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel -DFFMPEG_KIT_X86_64" + echo "-arch x86_64 -target $(get_target) -march=x86-64 -msse4.2 -mpopcnt -m64 -DFFMPEG_KIT_X86_64" ;; x86-64-mac-catalyst) - echo "-arch x86_64 -target $(get_target) -march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel -DFFMPEG_KIT_X86_64_MAC_CATALYST -isysroot ${SDK_PATH} -isystem ${SDK_PATH}/System/iOSSupport/usr/include -iframework ${SDK_PATH}/System/iOSSupport/System/Library/Frameworks" + echo "-arch x86_64 -target $(get_target) -march=x86-64 -msse4.2 -mpopcnt -m64 -DFFMPEG_KIT_X86_64_MAC_CATALYST -isysroot ${SDK_PATH} -isystem ${SDK_PATH}/System/iOSSupport/usr/include -iframework ${SDK_PATH}/System/iOSSupport/System/Library/Frameworks" ;; esac } diff --git a/scripts/function-macos.sh b/scripts/function-macos.sh index cd6ea26..1c2b30b 100755 --- a/scripts/function-macos.sh +++ b/scripts/function-macos.sh @@ -84,7 +84,7 @@ get_arch_specific_cflags() { echo "-arch arm64 -target $(get_target) -march=armv8-a+crc+crypto -mcpu=generic -DFFMPEG_KIT_ARM64" ;; x86-64) - echo "-arch x86_64 -target $(get_target) -march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel -DFFMPEG_KIT_X86_64" + echo "-arch x86_64 -target $(get_target) -march=x86-64 -msse4.2 -mpopcnt -m64 -DFFMPEG_KIT_X86_64" ;; esac } diff --git a/scripts/function-tvos.sh b/scripts/function-tvos.sh index f198cc8..fc2fb68 100755 --- a/scripts/function-tvos.sh +++ b/scripts/function-tvos.sh @@ -90,7 +90,7 @@ get_arch_specific_cflags() { echo "-arch arm64 -target $(get_target) -march=armv8-a+crc+crypto -mcpu=generic -DFFMPEG_KIT_ARM64_SIMULATOR" ;; x86-64) - echo "-arch x86_64 -target $(get_target) -march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel -DFFMPEG_KIT_X86_64" + echo "-arch x86_64 -target $(get_target) -march=x86-64 -msse4.2 -mpopcnt -m64 -DFFMPEG_KIT_X86_64" ;; esac } From 26e78c5cb85e1f8f655763255d5b3206aa6148f0 Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Sat, 9 Oct 2021 15:14:44 +0100 Subject: [PATCH 3/7] allow overriding sdk version while building apple platforms, improves #168 --- .github/workflows/ios-build-scripts.yml | 25 ++++++++++++++++-- .github/workflows/macos-build-scripts.yml | 25 ++++++++++++++++-- .github/workflows/tvos-build-scripts.yml | 25 ++++++++++++++++-- ios.sh | 10 ++++++++ macos.sh | 5 ++++ scripts/function-apple.sh | 26 +++++++++---------- scripts/function-ios.sh | 6 ++++- scripts/function-macos.sh | 2 +- scripts/function-tvos.sh | 2 +- scripts/function.sh | 31 +++++++++++++++++++++++ scripts/main-ios.sh | 4 +-- scripts/main-macos.sh | 4 +-- scripts/main-tvos.sh | 4 +-- tvos.sh | 5 ++++ 14 files changed, 146 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ios-build-scripts.yml b/.github/workflows/ios-build-scripts.yml index 4450515..1613e88 100644 --- a/.github/workflows/ios-build-scripts.yml +++ b/.github/workflows/ios-build-scripts.yml @@ -3,8 +3,29 @@ name: ios build scripts on: [ push, pull_request ] jobs: - build-main-on-macos: - name: ios main + build-main-on-macos-bigsur: + name: ios main on big sur + runs-on: macos-11 + strategy: + matrix: + xcode: [ '12.5.1', '13.0' ] + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v2 + - name: set up xcode + run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh + - name: run the build script + run: ./ios.sh --xcframework --enable-ios-audiotoolbox --enable-ios-avfoundation --enable-ios-bzip2 --enable-ios-libiconv --enable-ios-videotoolbox --enable-ios-zlib + - name: print build logs + if: ${{ always() }} + run: cat build.log + - name: print ffbuild logs + if: ${{ failure() }} + run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log' + build-main-on-macos-catalina: + name: ios main on catalina runs-on: macos-10.15 strategy: matrix: diff --git a/.github/workflows/macos-build-scripts.yml b/.github/workflows/macos-build-scripts.yml index 23d2537..4606f0f 100644 --- a/.github/workflows/macos-build-scripts.yml +++ b/.github/workflows/macos-build-scripts.yml @@ -3,8 +3,29 @@ name: macos build scripts on: [ push, pull_request ] jobs: - build-main-on-macos: - name: macos main + build-main-on-macos-bigsur: + name: macos main on big sur + runs-on: macos-11 + strategy: + matrix: + xcode: [ '12.5.1', '13.0' ] + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v2 + - name: set up xcode + run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh + - name: run the build script + run: ./macos.sh --xcframework --enable-macos-audiotoolbox --enable-macos-avfoundation --enable-macos-bzip2 --enable-macos-coreimage --enable-macos-libiconv --enable-macos-opencl --enable-macos-opengl --enable-macos-videotoolbox --enable-macos-zlib + - name: print build logs + if: ${{ always() }} + run: cat build.log + - name: print ffbuild logs + if: ${{ failure() }} + run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log' + build-main-on-macos-catalina: + name: macos main on catalina runs-on: macos-10.15 strategy: matrix: diff --git a/.github/workflows/tvos-build-scripts.yml b/.github/workflows/tvos-build-scripts.yml index 041d5e8..6767cad 100644 --- a/.github/workflows/tvos-build-scripts.yml +++ b/.github/workflows/tvos-build-scripts.yml @@ -3,8 +3,29 @@ name: tvos build scripts on: [ push, pull_request ] jobs: - build-main-on-macos: - name: tvos main + build-main-on-macos-bigsur: + name: tvos main on big sur + runs-on: macos-11 + strategy: + matrix: + xcode: [ '12.5.1', '13.0' ] + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v2 + - name: set up xcode + run: echo "export DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer" > ~/.xcode.for.ffmpeg.kit.sh + - name: run the build script + run: ./tvos.sh --xcframework --enable-tvos-bzip2 --enable-tvos-audiotoolbox --enable-tvos-libiconv --enable-tvos-videotoolbox --enable-tvos-zlib + - name: print build logs + if: ${{ always() }} + run: cat build.log + - name: print ffbuild logs + if: ${{ failure() }} + run: '[[ -f ./src/ffmpeg/ffbuild/config.log ]] && tail -50 ./src/ffmpeg/ffbuild/config.log' + build-main-on-macos-catalina: + name: tvos main on catalina runs-on: macos-10.15 strategy: matrix: diff --git a/ios.sh b/ios.sh index f6e5cf8..82ba165 100755 --- a/ios.sh +++ b/ios.sh @@ -123,6 +123,16 @@ while [ ! $# -eq 0 ]; do disable_arch "${DISABLED_ARCH}" ;; + --target=*) + TARGET=$(echo $1 | sed -e 's/^--[A-Za-z]*=//g') + + export IOS_MIN_VERSION=${TARGET} + ;; + --mac-catalyst-target=*) + TARGET=$(echo $1 | sed -e 's/^--[A-Za-z]*-[A-Za-z]*-[A-Za-z]*=//g') + + export MAC_CATALYST_MIN_VERSION=${TARGET} + ;; *) print_unknown_option "$1" ;; diff --git a/macos.sh b/macos.sh index a7ecf01..0ebbaf5 100755 --- a/macos.sh +++ b/macos.sh @@ -123,6 +123,11 @@ while [ ! $# -eq 0 ]; do disable_arch "${DISABLED_ARCH}" ;; + --target=*) + TARGET=$(echo $1 | sed -e 's/^--[A-Za-z]*=//g') + + export MACOS_MIN_VERSION=${TARGET} + ;; *) print_unknown_option "$1" ;; diff --git a/scripts/function-apple.sh b/scripts/function-apple.sh index bc62a11..05bb2ec 100755 --- a/scripts/function-apple.sh +++ b/scripts/function-apple.sh @@ -31,16 +31,16 @@ disable_ios_architecture_not_supported_on_detected_sdk_version() { armv7 | armv7s | i386) # SUPPORTED UNTIL IOS SDK 10.3.1 - if [[ $(echo "$2 > 10.4" | bc) -eq 1 ]]; then - local SUPPORTED=0 - else + if [[ $(compare_versions "$2" "10.3.1") -le 0 ]]; then local SUPPORTED=1 + else + local SUPPORTED=0 fi ;; arm64e) # INTRODUCED IN IOS SDK 10.1 - if [[ $(echo "$2 > 10" | bc) -eq 1 ]]; then + if [[ $(compare_versions "$2" "10.1") -ge 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -48,8 +48,8 @@ disable_ios_architecture_not_supported_on_detected_sdk_version() { ;; x86-64-mac-catalyst) - # INTRODUCED IN IOS SDK 13 - if [[ $(echo "$2 > 12.4" | bc) -eq 1 ]]; then + # INTRODUCED IN IOS SDK 13.0 + if [[ $(compare_versions "$2" "13") -ge 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -57,8 +57,8 @@ disable_ios_architecture_not_supported_on_detected_sdk_version() { ;; arm64-*) - # INTRODUCED IN IOS SDK 14 - if [[ $(echo "$2 > 13.7" | bc) -eq 1 ]]; then + # INTRODUCED IN IOS SDK 14.0 + if [[ $(compare_versions "$2" "14") -ge 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -87,8 +87,8 @@ disable_tvos_architecture_not_supported_on_detected_sdk_version() { case ${ARCH_NAME} in arm64-simulator) - # INTRODUCED IN TVOS SDK 14 - if [[ $(echo "$2 > 13.4" | bc) -eq 1 ]]; then + # INTRODUCED IN TVOS SDK 14.0 + if [[ $(compare_versions "$2" "14") -ge 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -117,8 +117,8 @@ disable_macos_architecture_not_supported_on_detected_sdk_version() { case ${ARCH_NAME} in arm64) - # INTRODUCED IN MACOS SDK 11 - if [[ $(echo "$2 > 10.16" | bc) -eq 1 ]]; then + # INTRODUCED IN MACOS SDK 11.0 + if [[ $(compare_versions "$2" "11") -ge 1 ]]; then local SUPPORTED=1 else local SUPPORTED=0 @@ -1235,7 +1235,7 @@ get_min_version_cflags() { get_min_sdk_version() { case ${ARCH} in *-mac-catalyst) - echo "13.0" + echo "${MAC_CATALYST_MIN_VERSION}" ;; *) case ${FFMPEG_KIT_BUILD_TYPE} in diff --git a/scripts/function-ios.sh b/scripts/function-ios.sh index 7379070..d7b8d35 100755 --- a/scripts/function-ios.sh +++ b/scripts/function-ios.sh @@ -25,7 +25,7 @@ libraries are created under the prebuilt folder.\n" echo -e "Usage: ./$COMMAND [OPTION]...\n" echo -e "Specify environment variables as VARIABLE=VALUE to override default build options.\n" - display_help_options " -x, --xcframework\t\tbuild xcframework bundles instead of framework bundles and universal libraries" " -l, --lts build lts packages to support sdk 9.3+ devices" + display_help_options " -x, --xcframework\t\tbuild xcframework bundles instead of framework bundles and universal libraries" " -l, --lts build lts packages to support sdk 9.3+ devices" " --target=ios sdk version\t\t\toverride minimum deployment target" " --mac-catalyst-target=ios sdk version\toverride minimum deployment target for mac catalyst" display_help_licensing echo -e "Architectures:" @@ -60,6 +60,7 @@ libraries are created under the prebuilt folder.\n" enable_main_build() { export IOS_MIN_VERSION=12.1 + export MAC_CATALYST_MIN_VERSION=14.0 } enable_lts_build() { @@ -68,6 +69,9 @@ enable_lts_build() { # XCODE 7.3 HAS IOS SDK 9.3 export IOS_MIN_VERSION=9.3 + # MAC CATALYST IS INTRODUCED IN 13.0 + export MAC_CATALYST_MIN_VERSION=13.0 + # IOS SDK 9.3 SUPPORTS VIDEOTOOLBOX # HOWEVER, THE LATEST FFMPEG VERSION USES SDK 11.0 APIS # THEREFORE, VIDEOTOOLBOX IS DISABLED IN LTS RELEASES diff --git a/scripts/function-macos.sh b/scripts/function-macos.sh index 1c2b30b..5a226f6 100755 --- a/scripts/function-macos.sh +++ b/scripts/function-macos.sh @@ -17,7 +17,7 @@ When compilation ends, libraries are created under the prebuilt folder.\n" echo -e "Usage: ./$COMMAND [OPTION]...\n" echo -e "Specify environment variables as VARIABLE=VALUE to override default build options.\n" - display_help_options " -x, --xcframework\t\tbuild xcframework bundles instead of framework bundles and universal libraries" " -l, --lts build lts packages to support sdk 10.11+ devices" + display_help_options " -x, --xcframework\t\tbuild xcframework bundles instead of framework bundles and universal libraries" " -l, --lts build lts packages to support sdk 10.11+ devices" " --target=macos sdk version\toverride minimum deployment target" display_help_licensing echo -e "Architectures:" diff --git a/scripts/function-tvos.sh b/scripts/function-tvos.sh index fc2fb68..57ea64f 100755 --- a/scripts/function-tvos.sh +++ b/scripts/function-tvos.sh @@ -18,7 +18,7 @@ set explicitly. When compilation ends, libraries are created under the prebuilt echo -e "Usage: ./$COMMAND [OPTION]...\n" echo -e "Specify environment variables as VARIABLE=VALUE to override default build options.\n" - display_help_options " -x, --xcframework\t\tbuild xcframework bundles instead of framework bundles and universal libraries" " -l, --lts build lts packages to support sdk 9.2+ devices" + display_help_options " -x, --xcframework\t\tbuild xcframework bundles instead of framework bundles and universal libraries" " -l, --lts build lts packages to support sdk 9.2+ devices" " --target=tvos sdk version\toverride minimum deployment target" display_help_licensing echo -e "Architectures:" diff --git a/scripts/function.sh b/scripts/function.sh index db3a155..85b23c4 100755 --- a/scripts/function.sh +++ b/scripts/function.sh @@ -587,6 +587,9 @@ display_help_options() { if [ -n "$3" ]; then echo -e "$3" fi + if [ -n "$4" ]; then + echo -e "$4" + fi echo -e "" } @@ -1814,3 +1817,31 @@ create_file() { rm -f "$1" echo "" > "$1" 1>>"${BASEDIR}"/build.log 2>&1 } + +compare_versions() { + VERSION_PARTS_1=($(echo $1 | tr "." " ")) + VERSION_PARTS_2=($(echo $2 | tr "." " ")) + + for((i=0;(i<${#VERSION_PARTS_1[@]})&&(i<${#VERSION_PARTS_2[@]});i++)) + do + + if [[ ${VERSION_PARTS_1[$i]} -gt ${VERSION_PARTS_2[$i]} ]]; then + echo "1" + return; + elif [[ ${VERSION_PARTS_1[$i]} -lt ${VERSION_PARTS_2[$i]} ]]; then + echo "-1" + return; + fi + done + + if [[ ${#VERSION_PARTS_1[@]} -gt ${#VERSION_PARTS_2[@]} ]]; then + echo "1" + return; + elif [[ ${#VERSION_PARTS_1[@]} -lt ${#VERSION_PARTS_2[@]} ]]; then + echo "-1" + return; + else + echo "0" + return; + fi +} diff --git a/scripts/main-ios.sh b/scripts/main-ios.sh index f978ad0..1eb1ca6 100755 --- a/scripts/main-ios.sh +++ b/scripts/main-ios.sh @@ -23,8 +23,8 @@ fi # ENABLE COMMON FUNCTIONS source "${BASEDIR}"/scripts/function-"${FFMPEG_KIT_BUILD_TYPE}".sh 1>>"${BASEDIR}"/build.log 2>&1 || exit 1 -echo -e "\nBuilding ${ARCH} platform\n" -echo -e "\nINFO: Starting new build for ${ARCH} at $(date)\n" 1>>"${BASEDIR}"/build.log 2>&1 +echo -e "\nBuilding ${ARCH} platform targeting iOS SDK ${IOS_MIN_VERSION} and Mac Catalyst ${MAC_CATALYST_MIN_VERSION}\n" +echo -e "\nINFO: Starting new build for ${ARCH} targeting iOS SDK ${IOS_MIN_VERSION} and Mac Catalyst ${MAC_CATALYST_MIN_VERSION} at $(date)\n" 1>>"${BASEDIR}"/build.log 2>&1 # SET BASE INSTALLATION DIRECTORY FOR THIS ARCHITECTURE export LIB_INSTALL_BASE="${BASEDIR}/prebuilt/$(get_build_directory)" diff --git a/scripts/main-macos.sh b/scripts/main-macos.sh index ba8bf03..ac25bb7 100755 --- a/scripts/main-macos.sh +++ b/scripts/main-macos.sh @@ -23,8 +23,8 @@ fi # ENABLE COMMON FUNCTIONS source "${BASEDIR}"/scripts/function-"${FFMPEG_KIT_BUILD_TYPE}".sh 1>>"${BASEDIR}"/build.log 2>&1 || exit 1 -echo -e "\nBuilding ${ARCH} platform\n" -echo -e "\nINFO: Starting new build for ${ARCH} at $(date)\n" 1>>"${BASEDIR}"/build.log 2>&1 +echo -e "\nBuilding ${ARCH} platform targeting macOS SDK ${MACOS_MIN_VERSION}\n" +echo -e "\nINFO: Starting new build for ${ARCH} targeting macOS SDK ${MACOS_MIN_VERSION} at $(date)\n" 1>>"${BASEDIR}"/build.log 2>&1 # SET BASE INSTALLATION DIRECTORY FOR THIS ARCHITECTURE export LIB_INSTALL_BASE="${BASEDIR}/prebuilt/$(get_build_directory)" diff --git a/scripts/main-tvos.sh b/scripts/main-tvos.sh index c76c4fd..da6b876 100755 --- a/scripts/main-tvos.sh +++ b/scripts/main-tvos.sh @@ -23,8 +23,8 @@ fi # ENABLE COMMON FUNCTIONS source "${BASEDIR}"/scripts/function-"${FFMPEG_KIT_BUILD_TYPE}".sh 1>>"${BASEDIR}"/build.log 2>&1 || exit 1 -echo -e "\nBuilding ${ARCH} platform\n" -echo -e "\nINFO: Starting new build for ${ARCH} at $(date)\n" 1>>"${BASEDIR}"/build.log 2>&1 +echo -e "\nBuilding ${ARCH} platform targeting tvOS SDK ${TVOS_MIN_VERSION}\n" +echo -e "\nINFO: Starting new build for ${ARCH} targeting tvOS SDK ${TVOS_MIN_VERSION} at $(date)\n" 1>>"${BASEDIR}"/build.log 2>&1 # SET BASE INSTALLATION DIRECTORY FOR THIS ARCHITECTURE export LIB_INSTALL_BASE="${BASEDIR}/prebuilt/$(get_build_directory)" diff --git a/tvos.sh b/tvos.sh index b64ae30..51e9a91 100755 --- a/tvos.sh +++ b/tvos.sh @@ -123,6 +123,11 @@ while [ ! $# -eq 0 ]; do disable_arch "${DISABLED_ARCH}" ;; + --target=*) + TARGET=$(echo $1 | sed -e 's/^--[A-Za-z]*=//g') + + export TVOS_MIN_VERSION=${TARGET} + ;; *) print_unknown_option "$1" ;; From 879eeb59afa5328dbd4ab71625d85365ffb4f04a Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Thu, 7 Oct 2021 20:58:42 +0100 Subject: [PATCH 4/7] use x86-64 ndk toolchain on arm64 darwin hosts, fixes #175 --- android.sh | 6 +++++- scripts/function-android.sh | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/android.sh b/android.sh index 8245737..bf94df5 100755 --- a/android.sh +++ b/android.sh @@ -296,7 +296,11 @@ if [[ -n ${ANDROID_ARCHITECTURES} ]]; then # BUILD NATIVE LIBRARY if [[ ${SKIP_ffmpeg_kit} -ne 1 ]]; then - "${ANDROID_NDK_ROOT}"/ndk-build -B 1>>"${BASEDIR}"/build.log 2>&1 + if [ "$(is_darwin_arm64)" == "1" ]; then + arch -x86_64 "${ANDROID_NDK_ROOT}"/ndk-build -B 1>>"${BASEDIR}"/build.log 2>&1 + else + "${ANDROID_NDK_ROOT}"/ndk-build -B 1>>"${BASEDIR}"/build.log 2>&1 + fi if [ $? -eq 0 ]; then echo "ok" diff --git a/scripts/function-android.sh b/scripts/function-android.sh index bc4775f..8272186 100755 --- a/scripts/function-android.sh +++ b/scripts/function-android.sh @@ -109,6 +109,17 @@ get_clang_host() { esac } +is_darwin_arm64() { + HOST_OS=$(uname -s) + HOST_ARCH=$(uname -m) + + if [ "${HOST_OS}" == "Darwin" ] && [ "${HOST_ARCH}" == "arm64" ]; then + echo "1" + else + echo "0" + fi +} + get_toolchain() { HOST_OS=$(uname -s) case ${HOST_OS} in @@ -124,6 +135,12 @@ get_toolchain() { x86_64 | amd64) HOST_ARCH=x86_64 ;; esac + if [ "$(is_darwin_arm64)" == "1" ]; then + # NDK DOESNT HAVE AN ARM64 TOOLCHAIN ON DARWIN + # WE USE x86-64 WITH ROSETTA INSTEAD + HOST_ARCH=x86_64 + fi + echo "${HOST_OS}-${HOST_ARCH}" } From 27af848e9c64af08c005d01c995a12e1840d853c Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Tue, 9 Nov 2021 09:31:44 +0000 Subject: [PATCH 5/7] more detailed docs for async execute methods --- .../com/arthenica/ffmpegkit/FFmpegKit.java | 56 ++++++++---- .../arthenica/ffmpegkit/FFmpegKitConfig.java | 30 +++++-- .../com/arthenica/ffmpegkit/FFprobeKit.java | 89 ++++++++++++++----- apple/src/FFmpegKit.h | 56 ++++++++---- apple/src/FFmpegKitConfig.h | 30 +++++-- apple/src/FFprobeKit.h | 82 ++++++++++++----- flutter/flutter/lib/ffmpeg_kit.dart | 11 ++- flutter/flutter/lib/ffmpeg_kit_config.dart | 15 +++- flutter/flutter/lib/ffprobe_kit.dart | 30 +++++-- react-native/src/index.js | 55 +++++++++--- 10 files changed, 338 insertions(+), 116 deletions(-) diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKit.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKit.java index 1dd41f6..150e723 100644 --- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKit.java +++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKit.java @@ -24,8 +24,8 @@ import java.util.List; import java.util.concurrent.ExecutorService; /** - *

Main class to run FFmpeg commands. Supports executing commands both - * synchronously and asynchronously. + *

Main class to run FFmpeg commands. Supports executing commands both synchronously and + * asynchronously. *

  * FFmpegSession session = FFmpegKit.execute("-i file1.mp4 -c:v libxvid file1.avi");
  *
@@ -64,7 +64,10 @@ public class FFmpegKit {
     }
 
     /**
-     * 

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -80,7 +83,10 @@ public class FFmpegKit { } /** - *

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -100,7 +106,10 @@ public class FFmpegKit { } /** - *

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -118,7 +127,10 @@ public class FFmpegKit { } /** - *

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -152,9 +164,11 @@ public class FFmpegKit { } /** - *

Asynchronously executes FFmpeg command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed @@ -166,9 +180,11 @@ public class FFmpegKit { } /** - *

Asynchronously executes FFmpeg command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed @@ -184,9 +200,11 @@ public class FFmpegKit { } /** - *

Asynchronously executes FFmpeg command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed @@ -204,9 +222,11 @@ public class FFmpegKit { } /** - *

Asynchronously executes FFmpeg command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java index 8ec348d..3891850 100644 --- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java +++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFmpegKitConfig.java @@ -656,7 +656,10 @@ public class FFmpegKitConfig { } /** - *

Asynchronously executes the FFmpeg session provided. + *

Starts an asynchronous FFmpeg execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param ffmpegSession FFmpeg session which includes command options/arguments */ @@ -667,7 +670,10 @@ public class FFmpegKitConfig { } /** - *

Asynchronously executes the FFmpeg session provided. + *

Starts an asynchronous FFmpeg execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param ffmpegSession FFmpeg session which includes command options/arguments * @param executorService executor service that will be used to run this asynchronous operation @@ -679,7 +685,10 @@ public class FFmpegKitConfig { } /** - *

Asynchronously executes the FFprobe session provided. + *

Starts an asynchronous FFprobe execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param ffprobeSession FFprobe session which includes command options/arguments */ @@ -690,7 +699,10 @@ public class FFmpegKitConfig { } /** - *

Asynchronously executes the FFprobe session provided. + *

Starts an asynchronous FFprobe execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param ffprobeSession FFprobe session which includes command options/arguments * @param executorService executor service that will be used to run this asynchronous operation @@ -702,7 +714,10 @@ public class FFmpegKitConfig { } /** - *

Asynchronously executes the media information session provided. + *

Starts an asynchronous FFprobe execution for the given media information session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param mediaInformationSession media information session which includes command options/arguments * @param waitTimeout max time to wait until media information is transmitted @@ -714,7 +729,10 @@ public class FFmpegKitConfig { } /** - *

Asynchronously executes the media information session provided. + *

Starts an asynchronous FFprobe execution for the given media information session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param mediaInformationSession media information session which includes command options/arguments * @param executorService executor service that will be used to run this asynchronous operation diff --git a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeKit.java b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeKit.java index 860a289..3db4611 100644 --- a/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeKit.java +++ b/android/ffmpeg-kit-android-lib/src/main/java/com/arthenica/ffmpegkit/FFprobeKit.java @@ -23,8 +23,8 @@ import java.util.List; import java.util.concurrent.ExecutorService; /** - *

Main class to run FFprobe commands. Supports executing commands both - * synchronously and asynchronously. + *

Main class to run FFprobe commands. Supports executing commands both synchronously and + * asynchronously. *

  * FFprobeSession session = FFprobeKit.execute("-hide_banner -v error -show_entries format=size -of default=noprint_wrappers=1 file1.mp4");
  *
@@ -67,7 +67,10 @@ public class FFprobeKit {
     }
 
     /**
-     * 

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFprobe command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -83,7 +86,10 @@ public class FFprobeKit { } /** - *

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFprobe command options/arguments as string array * @param executeCallback callback that will be notified when execution is completed @@ -101,7 +107,10 @@ public class FFprobeKit { } /** - *

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFprobe command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -119,7 +128,10 @@ public class FFprobeKit { } /** - *

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFprobe command options/arguments as string array * @param executeCallback callback that will be notified when execution is completed @@ -151,9 +163,11 @@ public class FFprobeKit { } /** - *

Asynchronously executes FFprobe command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be called when the execution is completed @@ -165,9 +179,11 @@ public class FFprobeKit { } /** - *

Asynchronously executes FFprobe command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be notified when execution is completed @@ -181,9 +197,11 @@ public class FFprobeKit { } /** - *

Asynchronously executes FFprobe command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be called when the execution is completed @@ -201,9 +219,11 @@ public class FFprobeKit { } /** - *

Asynchronously executes FFprobe command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be called when the execution is completed @@ -253,7 +273,10 @@ public class FFprobeKit { } /** - *

Extracts media information for the file specified with path asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be called when the execution is completed @@ -269,7 +292,10 @@ public class FFprobeKit { } /** - *

Extracts media information for the file specified with path asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be notified when execution is completed @@ -289,7 +315,10 @@ public class FFprobeKit { } /** - *

Extracts media information for the file specified with path asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be called when the execution is completed @@ -307,7 +336,10 @@ public class FFprobeKit { } /** - *

Extracts media information for the file specified with path asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be notified when execution is completed @@ -343,7 +375,11 @@ public class FFprobeKit { } /** - *

Extracts media information using the command provided asynchronously. + *

Starts an asynchronous FFprobe execution to extract media information using a command. The command passed to + * this method must generate the output in JSON format in order to successfully extract media information from it. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param command FFprobe command that prints media information for a file in JSON format * @param executeCallback callback that will be notified when execution is completed @@ -359,7 +395,12 @@ public class FFprobeKit { } /** - * Extracts media information using the command arguments provided asynchronously. + *

Starts an asynchronous FFprobe execution to extract media information using command arguments. The command + * passed to this method must generate the output in JSON format in order to successfully extract media information + * from it. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * {@jlink ExecuteCallback} if you want to be notified about the result. * * @param arguments FFprobe command arguments that print media information for a file in JSON format * @param executeCallback callback that will be notified when execution is completed diff --git a/apple/src/FFmpegKit.h b/apple/src/FFmpegKit.h index 286621f..bcf8c85 100644 --- a/apple/src/FFmpegKit.h +++ b/apple/src/FFmpegKit.h @@ -29,8 +29,8 @@ #import "StatisticsCallback.h" /** - *

Main class to run FFmpeg commands. Supports executing commands both - * synchronously and asynchronously. + *

Main class to run FFmpeg commands. Supports executing commands both synchronously and + * asynchronously. *

  * FFmpegSession *session = [FFmpegKit execute:@"-i file1.mp4 -c:v libxvid file1.avi"];
  *
@@ -52,7 +52,10 @@
 + (FFmpegSession*)executeWithArguments:(NSArray*)arguments;
 
 /**
- * 

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param arguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -61,7 +64,10 @@ + (FFmpegSession*)executeWithArgumentsAsync:(NSArray*)arguments withExecuteCallback:(ExecuteCallback)executeCallback; /** - *

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param arguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -72,7 +78,10 @@ + (FFmpegSession*)executeWithArgumentsAsync:(NSArray*)arguments withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback withStatisticsCallback:(StatisticsCallback)statisticsCallback; /** - *

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param arguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -82,7 +91,10 @@ + (FFmpegSession*)executeWithArgumentsAsync:(NSArray*)arguments withExecuteCallback:(ExecuteCallback)executeCallback onDispatchQueue:(dispatch_queue_t)queue; /** - *

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param arguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -104,9 +116,11 @@ + (FFmpegSession*)execute:(NSString*)command; /** - *

Asynchronously executes FFmpeg command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed @@ -115,9 +129,11 @@ + (FFmpegSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback; /** - *

Asynchronously executes FFmpeg command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed @@ -128,9 +144,11 @@ + (FFmpegSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback withStatisticsCallback:(StatisticsCallback)statisticsCallback; /** - *

Asynchronously executes FFmpeg command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed @@ -140,9 +158,11 @@ + (FFmpegSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback onDispatchQueue:(dispatch_queue_t)queue; /** - *

Asynchronously executes FFmpeg command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed diff --git a/apple/src/FFmpegKitConfig.h b/apple/src/FFmpegKitConfig.h index a7f9a69..59ddb62 100644 --- a/apple/src/FFmpegKitConfig.h +++ b/apple/src/FFmpegKitConfig.h @@ -189,14 +189,20 @@ typedef NS_ENUM(NSUInteger, Signal) { + (void)getMediaInformationExecute:(MediaInformationSession*)mediaInformationSession withTimeout:(int)waitTimeout; /** - *

Asynchronously executes the FFmpeg session provided. + *

Starts an asynchronous FFmpeg execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param ffmpegSession FFmpeg session which includes command options/arguments */ + (void)asyncFFmpegExecute:(FFmpegSession*)ffmpegSession; /** - *

Asynchronously executes the FFmpeg session provided. + *

Starts an asynchronous FFmpeg execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param ffmpegSession FFmpeg session which includes command options/arguments * @param queue dispatch queue that will be used to run this asynchronous operation @@ -204,14 +210,20 @@ typedef NS_ENUM(NSUInteger, Signal) { + (void)asyncFFmpegExecute:(FFmpegSession*)ffmpegSession onDispatchQueue:(dispatch_queue_t)queue; /** - *

Asynchronously executes the FFprobe session provided. + *

Starts an asynchronous FFprobe execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param ffprobeSession FFprobe session which includes command options/arguments */ + (void)asyncFFprobeExecute:(FFprobeSession*)ffprobeSession; /** - *

Asynchronously executes the FFprobe session provided. + *

Starts an asynchronous FFprobe execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param ffprobeSession FFprobe session which includes command options/arguments * @param queue dispatch queue that will be used to run this asynchronous operation @@ -219,7 +231,10 @@ typedef NS_ENUM(NSUInteger, Signal) { + (void)asyncFFprobeExecute:(FFprobeSession*)ffprobeSession onDispatchQueue:(dispatch_queue_t)queue; /** - *

Asynchronously executes the media information session provided. + *

Starts an asynchronous FFprobe execution for the given media information session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param mediaInformationSession media information session which includes command options/arguments * @param waitTimeout max time to wait until media information is transmitted @@ -227,7 +242,10 @@ typedef NS_ENUM(NSUInteger, Signal) { + (void)asyncGetMediaInformationExecute:(MediaInformationSession*)mediaInformationSession withTimeout:(int)waitTimeout; /** - *

Asynchronously executes the media information session provided. + *

Starts an asynchronous FFprobe execution for the given media information session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param mediaInformationSession media information session which includes command options/arguments * @param queue dispatch queue that will be used to run this asynchronous operation diff --git a/apple/src/FFprobeKit.h b/apple/src/FFprobeKit.h index 1a11c90..132e644 100644 --- a/apple/src/FFprobeKit.h +++ b/apple/src/FFprobeKit.h @@ -27,8 +27,8 @@ #import "MediaInformationJsonParser.h" /** - *

Main class to run FFprobe commands. Supports executing commands both - * synchronously and asynchronously. + *

Main class to run FFprobe commands. Supports executing commands both synchronously and + * asynchronously. *

  * FFprobeSession *session = [FFprobeKit execute:@"-hide_banner -v error -show_entries format=size -of default=noprint_wrappers=1 file1.mp4"];
  *
@@ -54,7 +54,10 @@
 + (FFprobeSession*)executeWithArguments:(NSArray*)arguments;
 
 /**
- * 

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param arguments FFprobe command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -63,7 +66,10 @@ + (FFprobeSession*)executeWithArgumentsAsync:(NSArray*)arguments withExecuteCallback:(ExecuteCallback)executeCallback; /** - *

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param arguments FFprobe command options/arguments as string array * @param executeCallback callback that will be notified when execution is completed @@ -73,7 +79,10 @@ + (FFprobeSession*)executeWithArgumentsAsync:(NSArray*)arguments withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback; /** - *

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param arguments FFprobe command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -83,7 +92,10 @@ + (FFprobeSession*)executeWithArgumentsAsync:(NSArray*)arguments withExecuteCallback:(ExecuteCallback)executeCallback onDispatchQueue:(dispatch_queue_t)queue; /** - *

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param arguments FFprobe command options/arguments as string array * @param executeCallback callback that will be notified when execution is completed @@ -104,9 +116,11 @@ + (FFprobeSession*)execute:(NSString*)command; /** - *

Asynchronously executes FFprobe command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be called when the execution is completed @@ -115,9 +129,11 @@ + (FFprobeSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback; /** - *

Asynchronously executes FFprobe command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be notified when execution is completed @@ -127,9 +143,11 @@ + (FFprobeSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback; /** - *

Asynchronously executes FFprobe command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be called when the execution is completed @@ -139,9 +157,11 @@ + (FFprobeSession*)executeAsync:(NSString*)command withExecuteCallback:(ExecuteCallback)executeCallback onDispatchQueue:(dispatch_queue_t)queue; /** - *

Asynchronously executes FFprobe command provided. Space character is used to split command - * into arguments. You can use single or double quote characters to specify arguments inside - * your command. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be called when the execution is completed @@ -169,7 +189,10 @@ + (MediaInformationSession*)getMediaInformation:(NSString*)path withTimeout:(int)waitTimeout; /** - *

Extracts media information for the file specified with path asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be called when the execution is completed @@ -178,7 +201,10 @@ + (MediaInformationSession*)getMediaInformationAsync:(NSString*)path withExecuteCallback:(ExecuteCallback)executeCallback; /** - *

Extracts media information for the file specified with path asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be notified when execution is completed @@ -189,7 +215,10 @@ + (MediaInformationSession*)getMediaInformationAsync:(NSString*)path withExecuteCallback:(ExecuteCallback)executeCallback withLogCallback:(LogCallback)logCallback withTimeout:(int)waitTimeout; /** - *

Extracts media information for the file specified with path asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be called when the execution is completed @@ -199,7 +228,10 @@ + (MediaInformationSession*)getMediaInformationAsync:(NSString*)path withExecuteCallback:(ExecuteCallback)executeCallback onDispatchQueue:(dispatch_queue_t)queue; /** - *

Extracts media information for the file specified with path asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be notified when execution is completed @@ -219,7 +251,11 @@ + (MediaInformationSession*)getMediaInformationFromCommand:(NSString*)command; /** - *

Extracts media information using the command provided asynchronously. + *

Starts an asynchronous FFprobe execution to extract media information using a command. The command passed to + * this method must generate the output in JSON format in order to successfully extract media information from it. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFprobe command that prints media information for a file in JSON format * @param executeCallback callback that will be notified when execution is completed diff --git a/flutter/flutter/lib/ffmpeg_kit.dart b/flutter/flutter/lib/ffmpeg_kit.dart index 0478592..c19efe2 100644 --- a/flutter/flutter/lib/ffmpeg_kit.dart +++ b/flutter/flutter/lib/ffmpeg_kit.dart @@ -31,7 +31,11 @@ import 'statistics_callback.dart'; class FFmpegKit { static FFmpegKitPlatform _platform = FFmpegKitPlatform.instance; - /// Asynchronously executes FFmpeg with command provided. + /// Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + /// into arguments. You can use single or double quote characters to specify arguments inside your command. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future executeAsync(String command, [ExecuteCallback? executeCallback = null, LogCallback? logCallback = null, @@ -42,7 +46,10 @@ class FFmpegKit { logCallback, statisticsCallback); - /// Asynchronously executes FFmpeg with arguments provided. + /// Starts an asynchronous FFmpeg execution with arguments provided. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future executeWithArgumentsAsync( List commandArguments, [ExecuteCallback? executeCallback = null, diff --git a/flutter/flutter/lib/ffmpeg_kit_config.dart b/flutter/flutter/lib/ffmpeg_kit_config.dart index 5f36189..b2c037e 100644 --- a/flutter/flutter/lib/ffmpeg_kit_config.dart +++ b/flutter/flutter/lib/ffmpeg_kit_config.dart @@ -215,7 +215,10 @@ class FFmpegKitConfig { } } - /// Asynchronously executes the [ffmpegSession] provided. + /// Starts an asynchronous FFmpeg execution for the given session. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future asyncFFmpegExecute(FFmpegSession ffmpegSession) async { try { await init(); @@ -227,7 +230,10 @@ class FFmpegKitConfig { } } - /// Asynchronously executes the [ffprobeSession] provided. + /// Starts an asynchronous FFprobe execution for the given session. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future asyncFFprobeExecute(FFprobeSession ffprobeSession) async { try { await init(); @@ -239,7 +245,10 @@ class FFmpegKitConfig { } } - /// Asynchronously executes the [mediaInformationSession] provided. + /// Starts an asynchronous FFprobe execution for the given media information session. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future asyncGetMediaInformationExecute( MediaInformationSession mediaInformationSession, [int? waitTimeout = null]) async { diff --git a/flutter/flutter/lib/ffprobe_kit.dart b/flutter/flutter/lib/ffprobe_kit.dart index 93cf3a3..87e2aff 100644 --- a/flutter/flutter/lib/ffprobe_kit.dart +++ b/flutter/flutter/lib/ffprobe_kit.dart @@ -31,7 +31,11 @@ import 'src/ffmpeg_kit_factory.dart'; class FFprobeKit { static FFmpegKitPlatform _platform = FFmpegKitPlatform.instance; - /// Asynchronously executes FFprobe with [command] provided. + /// Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + /// into arguments. You can use single or double quote characters to specify arguments inside your command. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future executeAsync(String command, [ExecuteCallback? executeCallback = null, LogCallback? logCallback = null]) async => @@ -40,7 +44,10 @@ class FFprobeKit { executeCallback, logCallback); - /// Asynchronously executes FFprobe with [commandArguments] provided. + /// Starts an asynchronous FFprobe execution with arguments provided. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future executeWithArgumentsAsync( List commandArguments, [ExecuteCallback? executeCallback = null, @@ -53,7 +60,10 @@ class FFprobeKit { return session; } - /// Extracts the media information for the file at [path] asynchronously. + /// Starts an asynchronous FFprobe execution to extract the media information for the specified file. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future getMediaInformationAsync(String path, [ExecuteCallback? executeCallback = null, LogCallback? logCallback = null, @@ -73,7 +83,11 @@ class FFprobeKit { commandArguments, executeCallback, logCallback, waitTimeout); } - /// Extracts media information using the [command] provided asynchronously. + /// Starts an asynchronous FFprobe execution to extract media information using a command. The command passed to + /// this method must generate the output in JSON format in order to successfully extract media information from it. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future getMediaInformationFromCommandAsync( String command, [ExecuteCallback? executeCallback = null, @@ -85,8 +99,12 @@ class FFprobeKit { logCallback, waitTimeout); - /// Extracts media information using the [commandArguments] provided - /// asynchronously. + /// Starts an asynchronous FFprobe execution to extract media information using command arguments. The command + /// passed to this method must generate the output in JSON format in order to successfully extract media information + /// from it. + /// + /// Note that this method returns immediately and does not wait the execution to complete. You must use an + /// [ExecuteCallback] if you want to be notified about the result. static Future getMediaInformationFromCommandArgumentsAsync( List commandArguments, diff --git a/react-native/src/index.js b/react-native/src/index.js index 467608a..8bc1857 100644 --- a/react-native/src/index.js +++ b/react-native/src/index.js @@ -710,7 +710,11 @@ export class ArchDetect { export class FFmpegKit { /** - *

Asynchronously executes FFmpeg with command provided. + *

Starts an asynchronous FFmpeg execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFmpeg command * @param executeCallback callback that will be called when the execution is completed @@ -723,7 +727,10 @@ export class FFmpegKit { } /** - *

Asynchronously executes FFmpeg with arguments provided. + *

Starts an asynchronous FFmpeg execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param commandArguments FFmpeg command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -951,7 +958,10 @@ export class FFmpegKitConfig { } /** - *

Asynchronously executes the FFmpeg session provided. + *

Starts an asynchronous FFmpeg execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param ffmpegSession FFmpeg session which includes command options/arguments */ @@ -962,7 +972,10 @@ export class FFmpegKitConfig { } /** - *

Asynchronously executes the FFprobe session provided. + *

Starts an asynchronous FFprobe execution for the given session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param ffprobeSession FFprobe session which includes command options/arguments */ @@ -973,7 +986,10 @@ export class FFmpegKitConfig { } /** - *

Asynchronously executes the media information session provided. + *

Starts an asynchronous FFprobe execution for the given media information session. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param mediaInformationSession media information session which includes command options/arguments * @param waitTimeout max time to wait until media information is transmitted @@ -1812,7 +1828,11 @@ export class FFmpegSession extends AbstractSession { export class FFprobeKit { /** - *

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution for the given command. Space character is used to split the command + * into arguments. You can use single or double quote characters to specify arguments inside your command. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFprobe command * @param executeCallback callback that will be called when the execution is completed @@ -1824,7 +1844,10 @@ export class FFprobeKit { } /** - *

Asynchronously executes FFprobe with arguments provided. + *

Starts an asynchronous FFprobe execution with arguments provided. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param commandArguments FFprobe command options/arguments as string array * @param executeCallback callback that will be called when the execution is completed @@ -1840,7 +1863,10 @@ export class FFprobeKit { } /** - *

Extracts the media information for the specified file asynchronously. + *

Starts an asynchronous FFprobe execution to extract the media information for the specified file. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param path path or uri of a media file * @param executeCallback callback that will be notified when execution is completed @@ -1854,7 +1880,11 @@ export class FFprobeKit { } /** - *

Extracts media information using the command provided asynchronously. + *

Starts an asynchronous FFprobe execution to extract media information using a command. The command passed to + * this method must generate the output in JSON format in order to successfully extract media information from it. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param command FFprobe command that prints media information for a file in JSON format * @param executeCallback callback that will be notified when execution is completed @@ -1867,7 +1897,12 @@ export class FFprobeKit { } /** - *

Extracts media information using the command arguments provided asynchronously. + *

Starts an asynchronous FFprobe execution to extract media information using command arguments. The command + * passed to this method must generate the output in JSON format in order to successfully extract media information + * from it. + * + *

Note that this method returns immediately and does not wait the execution to complete. You must use an + * ExecuteCallback if you want to be notified about the result. * * @param commandArguments FFprobe command arguments that prints media information for a file in JSON format * @param executeCallback callback that will be notified when execution is completed From 2368b5b6430f3ed9b35bb54120cfa1870cee3450 Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Tue, 9 Nov 2021 09:32:41 +0000 Subject: [PATCH 6/7] document api level and min deployment target requirements in hybrid framework readmes --- flutter/flutter/README.md | 27 ++++++++++ react-native/README.md | 107 ++++++++++++++++++++++++++++++++++---- 2 files changed, 123 insertions(+), 11 deletions(-) diff --git a/flutter/flutter/README.md b/flutter/flutter/README.md index 3c2ae0b..b521434 100644 --- a/flutter/flutter/README.md +++ b/flutter/flutter/README.md @@ -77,6 +77,33 @@ same source code but is built with different settings (Architectures, API Level, [LTS Releases](https://github.com/tanersener/ffmpeg-kit#10-lts-releases) section of the project README to see how they compare to each other. +#### 2.5 Android and iOS Support + +The following table shows the Android API level and iOS deployment target required in `ffmpeg_kit_flutter` releases. + + + + + + + + + + + + + + + + + + + + + + +
Main ReleaseLTS Release
Android
API Level
iOS Minimum
Deployment Target
Android
API Level
iOS Minimum
Deployment Target
2412.1169.3
+ ### 3. Using 1. Execute FFmpeg commands. diff --git a/react-native/README.md b/react-native/README.md index 08e5357..87bbbd4 100644 --- a/react-native/README.md +++ b/react-native/README.md @@ -45,18 +45,103 @@ of those packages and external libraries included in each of them. ##### 2.1.1 Package Names -The following table shows all package names defined for `ffmpeg-kit-react-native`. +The following table shows all package names and their respective API levels, iOS deployment targets defined in +`ffmpeg-kit-react-native`. -| Package | Main Release | LTS Release | -| :----: | :----: | :----: | -| min | min | min-lts | -| min-gpl | min-gpl | min-gpl-lts | -| https | https | https-lts | -| https-gpl | https-gpl | https-gpl-lts | -| audio | audio | audio-lts | -| video | video | video-lts | -| full | full | full-lts | -| full-gpl | full-gpl | full-gpl-lts | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageMain ReleaseLTS Release
NameAndroid
API Level
iOS Minimum
Deployment Target
NameAndroid
API Level
iOS Minimum
Deployment Target
minmin2412.1min-lts169.3
min-gplmin-gpl2412.1min-gpl-lts169.3
https(*) https2412.1https-lts169.3
https-gplhttps-gpl2412.1https-gpl-lts169.3
audioaudio2412.1audio-lts169.3
videovideo2412.1video-lts169.3
fullfull2412.1full-lts169.3
full-gplfull-gpl2412.1full-gpl-lts169.3
+ +(*) - Main `https` package is the default package #### 2.2 Enabling Packages From 50f4f7ef877779c67b749dc0a388e97d0c33526b Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Tue, 9 Nov 2021 09:40:26 +0000 Subject: [PATCH 7/7] update the links of platform readmes --- README.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7d5417c..a934fde 100644 --- a/README.md +++ b/README.md @@ -19,23 +19,19 @@ It includes scripts to build `FFmpeg` native libraries, a wrapper library to run ### 2. Android -See [Android](https://github.com/tanersener/ffmpeg-kit/tree/main/android) to learn more about `FFmpegKit` for -`Android`. +See [Android](android) to learn more about `FFmpegKit` for `Android`. ### 3. iOS, macOS, tvOS -See [Apple](https://github.com/tanersener/ffmpeg-kit/tree/main/apple) to use `FFmpegKit` on `Apple` platforms -(`iOS`, `macOS`, `tvOS`). +See [Apple](apple) to use `FFmpegKit` on `Apple` platforms (`iOS`, `macOS`, `tvOS`). ### 4. Flutter -See [Flutter](https://github.com/tanersener/ffmpeg-kit/tree/main/flutter/flutter) to learn more about `FFmpegKit` for -`Flutter`. +See [Flutter](flutter/flutter) to learn more about `FFmpegKit` for `Flutter`. ### 5. React Native -See [React Native](https://github.com/tanersener/ffmpeg-kit/tree/main/react-native) to learn more about `FFmpegKit` for -`React Native`. +See [React Native](react-native) to learn more about `FFmpegKit` for `React Native`. ### 6. Build Scripts