From afe83f4d98c274bf5f9cb0de4bad725fd5c46d8a Mon Sep 17 00:00:00 2001 From: Patrick Weisensee Date: Fri, 5 Aug 2022 14:16:00 -0700 Subject: [PATCH 1/4] Update React Native README.md Fixes link to Packages --- react-native/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react-native/README.md b/react-native/README.md index c178125..d2fdcdc 100644 --- a/react-native/README.md +++ b/react-native/README.md @@ -40,7 +40,7 @@ a `ffmpeg-kit-react-native` package with `libvpx` inside. `ffmpeg-kit` provides eight packages that include different sets of external libraries. These packages are named according to the external libraries included in them. Refer to -[Packages](https://github.com/tanersener/ffmpeg-kit#7-packages) section of the project README to see the names +[Packages](https://github.com/tanersener/ffmpeg-kit#8-packages) section of the project README to see the names of those packages and external libraries included in each of them. ##### 2.1.1 Package Names From c43fed69016f4e6b4af8c042c0c119a870f09194 Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Tue, 23 Aug 2022 23:55:37 +0100 Subject: [PATCH 2/4] refactor media information classes --- react-native/src/index.d.ts | 16 ++++-- react-native/src/index.js | 105 +++++++++++++++++++++++++----------- 2 files changed, 86 insertions(+), 35 deletions(-) diff --git a/react-native/src/index.d.ts b/react-native/src/index.d.ts index 8de2b56..551b735 100644 --- a/react-native/src/index.d.ts +++ b/react-native/src/index.d.ts @@ -321,7 +321,7 @@ declare module 'ffmpeg-kit-react-native' { export class MediaInformation { - static readonly KEY_MEDIA_PROPERTIES: string; + static readonly KEY_FORMAT_PROPERTIES: string; static readonly KEY_FILENAME: string; static readonly KEY_FORMAT: string; static readonly KEY_FORMAT_LONG: string; @@ -357,9 +357,15 @@ declare module 'ffmpeg-kit-react-native' { getNumberProperty(key: string): number; - getProperties(key: string): Record; + getProperty(key: string): any; - getMediaProperties(): Record; + getStringFormatProperty(key: string): string; + + getNumberFormatProperty(key: string): number; + + getFormatProperty(key: string): any; + + getFormatProperties(): Record; getAllProperties(): Record; @@ -591,7 +597,7 @@ declare module 'ffmpeg-kit-react-native' { getNumberProperty(key): number; - getProperties(key): Record; + getProperty(key): any; getAllProperties(): Record; @@ -627,7 +633,7 @@ declare module 'ffmpeg-kit-react-native' { getNumberProperty(key): number; - getProperties(key): Record; + getProperty(key): any; getAllProperties(): Record; diff --git a/react-native/src/index.js b/react-native/src/index.js index 03241f1..041544f 100644 --- a/react-native/src/index.js +++ b/react-native/src/index.js @@ -2438,7 +2438,7 @@ export class Log { */ export class MediaInformation { - static KEY_MEDIA_PROPERTIES = "format"; + static KEY_FORMAT_PROPERTIES = "format"; static KEY_FILENAME = "filename"; static KEY_FORMAT = "format_name"; static KEY_FORMAT_LONG = "format_long_name"; @@ -2460,7 +2460,7 @@ export class MediaInformation { * @return media file name */ getFilename() { - return this.getStringProperty(MediaInformation.KEY_FILENAME); + return this.getStringFormatProperty(MediaInformation.KEY_FILENAME); } /** @@ -2469,7 +2469,7 @@ export class MediaInformation { * @return media format */ getFormat() { - return this.getStringProperty(MediaInformation.KEY_FORMAT); + return this.getStringFormatProperty(MediaInformation.KEY_FORMAT); } /** @@ -2478,7 +2478,7 @@ export class MediaInformation { * @return media long format */ getLongFormat() { - return this.getStringProperty(MediaInformation.KEY_FORMAT_LONG); + return this.getStringFormatProperty(MediaInformation.KEY_FORMAT_LONG); } /** @@ -2487,7 +2487,7 @@ export class MediaInformation { * @return media duration in "seconds.microseconds" format */ getDuration() { - return this.getStringProperty(MediaInformation.KEY_DURATION); + return this.getStringFormatProperty(MediaInformation.KEY_DURATION); } /** @@ -2496,7 +2496,7 @@ export class MediaInformation { * @return media start time in milliseconds */ getStartTime() { - return this.getStringProperty(MediaInformation.KEY_START_TIME); + return this.getStringFormatProperty(MediaInformation.KEY_START_TIME); } /** @@ -2505,7 +2505,7 @@ export class MediaInformation { * @return media size in bytes */ getSize() { - return this.getStringProperty(MediaInformation.KEY_SIZE); + return this.getStringFormatProperty(MediaInformation.KEY_SIZE); } /** @@ -2514,7 +2514,7 @@ export class MediaInformation { * @return media bitrate in kb/s */ getBitrate() { - return this.getStringProperty(MediaInformation.KEY_BIT_RATE); + return this.getStringFormatProperty(MediaInformation.KEY_BIT_RATE); } /** @@ -2523,7 +2523,7 @@ export class MediaInformation { * @return tags dictionary */ getTags() { - return this.getProperties(MediaInformation.KEY_TAGS); + return this.getFormatProperty(MediaInformation.KEY_TAGS); } /** @@ -2571,58 +2571,103 @@ export class MediaInformation { } /** - * Returns the media property associated with the key. + * Returns the property associated with the key. * * @param key property key - * @return media property as string or undefined if the key is not found + * @return property as string or undefined if the key is not found */ getStringProperty(key) { - let mediaProperties = this.getMediaProperties(); - if (mediaProperties !== undefined) { - return mediaProperties[key]; + let allProperties = this.getAllProperties(); + if (allProperties !== undefined) { + return allProperties[key]; } else { return undefined; } } /** - * Returns the media property associated with the key. + * Returns the property associated with the key. * * @param key property key - * @return media property as number or undefined if the key is not found + * @return property as number or undefined if the key is not found */ getNumberProperty(key) { - let mediaProperties = this.getMediaProperties(); - if (mediaProperties !== undefined) { - return mediaProperties[key]; + let allProperties = this.getAllProperties(); + if (allProperties !== undefined) { + return allProperties[key]; } else { return undefined; } } /** - * Returns the media properties associated with the key. + * Returns the property associated with the key. * - * @param key properties key - * @return media properties as an object or undefined if the key is not found + * @param key property key + * @return property as an object or undefined if the key is not found */ - getProperties(key) { - let mediaProperties = this.getMediaProperties(); - if (mediaProperties !== undefined) { - return mediaProperties[key]; + getProperty(key) { + let allProperties = this.getAllProperties(); + if (allProperties !== undefined) { + return allProperties[key]; } else { return undefined; } } /** - * Returns all media properties. + * Returns the format property associated with the key. * - * @returns an object where media properties can be accessed by property names + * @param key property key + * @return format property as string or undefined if the key is not found */ - getMediaProperties() { + getStringFormatProperty(key) { + let formatProperties = this.getFormatProperties(); + if (formatProperties !== undefined) { + return formatProperties[key]; + } else { + return undefined; + } + } + + /** + * Returns the format property associated with the key. + * + * @param key property key + * @return format property as number or undefined if the key is not found + */ + getNumberFormatProperty(key) { + let formatProperties = this.getFormatProperties(); + if (formatProperties !== undefined) { + return formatProperties[key]; + } else { + return undefined; + } + } + + /** + * Returns the format property associated with the key. + * + * @param key property key + * @return format property as an object or undefined if the key is not found + */ + getFormatProperty(key) { + let formatProperties = this.getFormatProperties(); + if (formatProperties !== undefined) { + return formatProperties[key]; + } else { + return undefined; + } + } + + /** + * Returns all format properties defined. + * + * @returns an object where format properties can be accessed by property names + */ + getFormatProperties() { if (this.#allProperties !== undefined) { - return this.#allProperties.format; + return this.#allProperties[MediaInformation.KEY_FORMAT_PROPERTIES]; } else { return undefined; } From 235af6a8c33c96fd29aa49e118561540c7e65926 Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Wed, 24 Aug 2022 01:26:43 +0100 Subject: [PATCH 3/4] refactor session create methods --- .../FFmpegKitReactNativeModule.java | 6 +- react-native/ios/FFmpegKitReactNativeModule.m | 6 +- react-native/src/index.d.ts | 14 ---- react-native/src/index.js | 64 +------------------ 4 files changed, 9 insertions(+), 81 deletions(-) diff --git a/react-native/android/src/main/java/com/arthenica/ffmpegkit/reactnative/FFmpegKitReactNativeModule.java b/react-native/android/src/main/java/com/arthenica/ffmpegkit/reactnative/FFmpegKitReactNativeModule.java index bccdcee..8d7ed2c 100644 --- a/react-native/android/src/main/java/com/arthenica/ffmpegkit/reactnative/FFmpegKitReactNativeModule.java +++ b/react-native/android/src/main/java/com/arthenica/ffmpegkit/reactnative/FFmpegKitReactNativeModule.java @@ -344,7 +344,7 @@ public class FFmpegKitReactNativeModule extends ReactContextBaseJavaModule { @ReactMethod public void ffmpegSession(final ReadableArray readableArray, final Promise promise) { - promise.resolve(toMap(new FFmpegSession(toArgumentsArray(readableArray), null, null, null, LogRedirectionStrategy.NEVER_PRINT_LOGS))); + promise.resolve(toMap(FFmpegSession.create(toArgumentsArray(readableArray), null, null, null, LogRedirectionStrategy.NEVER_PRINT_LOGS))); } @ReactMethod @@ -395,14 +395,14 @@ public class FFmpegKitReactNativeModule extends ReactContextBaseJavaModule { @ReactMethod public void ffprobeSession(final ReadableArray readableArray, final Promise promise) { - promise.resolve(toMap(new FFprobeSession(toArgumentsArray(readableArray), null, null, LogRedirectionStrategy.NEVER_PRINT_LOGS))); + promise.resolve(toMap(FFprobeSession.create(toArgumentsArray(readableArray), null, null, LogRedirectionStrategy.NEVER_PRINT_LOGS))); } // MediaInformationSession @ReactMethod public void mediaInformationSession(final ReadableArray readableArray, final Promise promise) { - promise.resolve(toMap(new MediaInformationSession(toArgumentsArray(readableArray), null, null))); + promise.resolve(toMap(MediaInformationSession.create(toArgumentsArray(readableArray), null, null))); } // MediaInformationJsonParser diff --git a/react-native/ios/FFmpegKitReactNativeModule.m b/react-native/ios/FFmpegKitReactNativeModule.m index 7465cda..6cca720 100644 --- a/react-native/ios/FFmpegKitReactNativeModule.m +++ b/react-native/ios/FFmpegKitReactNativeModule.m @@ -244,7 +244,7 @@ RCT_EXPORT_METHOD(getArch:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRe // FFmpegSession RCT_EXPORT_METHOD(ffmpegSession:(NSArray*)arguments resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - FFmpegSession* session = [[FFmpegSession alloc] init:arguments withCompleteCallback:nil withLogCallback:nil withStatisticsCallback:nil withLogRedirectionStrategy:LogRedirectionStrategyNeverPrintLogs]; + FFmpegSession* session = [FFmpegSession create:arguments withCompleteCallback:nil withLogCallback:nil withStatisticsCallback:nil withLogRedirectionStrategy:LogRedirectionStrategyNeverPrintLogs]; resolve([FFmpegKitReactNativeModule toSessionDictionary:session]); } @@ -285,14 +285,14 @@ RCT_EXPORT_METHOD(ffmpegSessionGetStatistics:(int)sessionId resolver:(RCTPromise // FFprobeSession RCT_EXPORT_METHOD(ffprobeSession:(NSArray*)arguments resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - FFprobeSession* session = [[FFprobeSession alloc] init:arguments withCompleteCallback:nil withLogCallback:nil withLogRedirectionStrategy:LogRedirectionStrategyNeverPrintLogs]; + FFprobeSession* session = [FFprobeSession create:arguments withCompleteCallback:nil withLogCallback:nil withLogRedirectionStrategy:LogRedirectionStrategyNeverPrintLogs]; resolve([FFmpegKitReactNativeModule toSessionDictionary:session]); } // MediaInformationSession RCT_EXPORT_METHOD(mediaInformationSession:(NSArray*)arguments resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - MediaInformationSession* session = [[MediaInformationSession alloc] init:arguments withCompleteCallback:nil withLogCallback:nil]; + MediaInformationSession* session = [MediaInformationSession create:arguments withCompleteCallback:nil withLogCallback:nil]; resolve([FFmpegKitReactNativeModule toSessionDictionary:session]); } diff --git a/react-native/src/index.d.ts b/react-native/src/index.d.ts index 551b735..9ac8aab 100644 --- a/react-native/src/index.d.ts +++ b/react-native/src/index.d.ts @@ -2,8 +2,6 @@ declare module 'ffmpeg-kit-react-native' { export abstract class AbstractSession implements Session { - protected constructor(); - static createFFmpegSession(argumentsArray: Array, logRedirectionStrategy?: LogRedirectionStrategy): Promise; static createFFmpegSessionFromMap(sessionMap: { [key: string]: any }): FFmpegSession; @@ -212,12 +210,8 @@ declare module 'ffmpeg-kit-react-native' { export class FFmpegSession extends AbstractSession implements Session { - constructor(); - static create(argumentsArray: Array, completeCallback?: FFmpegSessionCompleteCallback, logCallback?: LogCallback, statisticsCallback?: StatisticsCallback, logRedirectionStrategy?: LogRedirectionStrategy): Promise; - static fromMap(sessionMap: { [key: string]: any }): FFmpegSession; - getStatisticsCallback(): StatisticsCallback; getCompleteCallback(): FFmpegSessionCompleteCallback; @@ -266,12 +260,8 @@ declare module 'ffmpeg-kit-react-native' { export class FFprobeSession extends AbstractSession implements Session { - constructor(); - static create(argumentsArray: Array, completeCallback?: FFprobeSessionCompleteCallback, logCallback?: LogCallback, logRedirectionStrategy?: LogRedirectionStrategy): Promise; - static fromMap(sessionMap: { [key: string]: any }): FFprobeSession; - getCompleteCallback(): FFprobeSessionCompleteCallback; isFFmpeg(): boolean; @@ -381,12 +371,8 @@ declare module 'ffmpeg-kit-react-native' { export class MediaInformationSession extends AbstractSession implements Session { - constructor(); - static create(argumentsArray: Array, completeCallback?: MediaInformationSessionCompleteCallback, logCallback?: LogCallback): Promise; - static fromMap(sessionMap: { [key: string]: any }): MediaInformationSession; - getMediaInformation(): MediaInformation; setMediaInformation(mediaInformation: MediaInformation): void; diff --git a/react-native/src/index.js b/react-native/src/index.js index 041544f..346fbc5 100644 --- a/react-native/src/index.js +++ b/react-native/src/index.js @@ -296,13 +296,6 @@ export class AbstractSession extends Session { */ #logRedirectionStrategy; - /** - * Creates a new abstract session. - */ - constructor() { - super(); - } - /** * Creates a new FFmpeg session. * @@ -1605,12 +1598,12 @@ class FFmpegKitFactory { if (sessionMap !== undefined) { switch (sessionMap.type) { case 2: - return FFprobeSession.fromMap(sessionMap); + return AbstractSession.createFFprobeSessionFromMap(sessionMap); case 3: - return MediaInformationSession.fromMap(sessionMap); + return AbstractSession.createMediaInformationSessionFromMap(sessionMap); case 1: default: - return FFmpegSession.fromMap(sessionMap); + return AbstractSession.createFFmpegSessionFromMap(sessionMap); } } else { return undefined; @@ -1935,13 +1928,6 @@ class FFmpegKitInitializer { */ export class FFmpegSession extends AbstractSession { - /** - * Creates an empty FFmpeg session. - */ - constructor() { - super(); - } - /** * Creates a new FFmpeg session. * @@ -1963,16 +1949,6 @@ export class FFmpegSession extends AbstractSession { return session; } - /** - * Creates a new FFmpeg session from the given map. - * - * @param sessionMap map that includes session fields as map keys - * @returns FFmpeg session created - */ - static fromMap(sessionMap) { - return AbstractSession.createFFmpegSessionFromMap(sessionMap); - } - /** * Returns the session specific statistics callback. * @@ -2252,13 +2228,6 @@ export class FFprobeKit { */ export class FFprobeSession extends AbstractSession { - /** - * Creates an empty FFprobe session. - */ - constructor() { - super(); - } - /** * Creates a new FFprobe session. * @@ -2278,16 +2247,6 @@ export class FFprobeSession extends AbstractSession { return session; } - /** - * Creates a new FFprobe session from the given map. - * - * @param sessionMap map that includes session fields as map keys - * @returns FFprobe session created - */ - static fromMap(sessionMap) { - return AbstractSession.createFFprobeSessionFromMap(sessionMap); - } - /** * Returns the session specific complete callback. * @@ -2722,13 +2681,6 @@ export class MediaInformationJsonParser { export class MediaInformationSession extends AbstractSession { #mediaInformation; - /** - * Creates an empty MediaInformationSession. - */ - constructor() { - super(); - } - /** * Creates a new MediaInformationSession session. * @@ -2747,16 +2699,6 @@ export class MediaInformationSession extends AbstractSession { return session; } - /** - * Creates a new MediaInformationSession from the given map. - * - * @param sessionMap map that includes session fields as map keys - * @returns MediaInformationSession created - */ - static fromMap(sessionMap) { - return AbstractSession.createMediaInformationSessionFromMap(sessionMap); - } - /** * Returns the media information extracted in this session. * From b3379ce59770eda0aa5372491d917bac21bab0e3 Mon Sep 17 00:00:00 2001 From: Taner Sener Date: Sun, 2 Oct 2022 20:45:51 +0100 Subject: [PATCH 4/4] release react-native plugin v5.1.0 --- .github/pull_request_template.md | 2 +- README.md | 7 ++-- docs/index.md | 1 + react-native/README.md | 28 ++++++++-------- react-native/android/build.gradle | 17 +++++----- react-native/android/gradle.properties | 4 +-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- react-native/ffmpeg-kit-react-native.podspec | 32 +++++++++---------- react-native/ios/FFmpegKitReactNativeModule.m | 18 +++++------ react-native/package.json | 4 +-- react-native/src/index.js | 22 ++++++------- 11 files changed, 69 insertions(+), 68 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index fe16e58..0cd01d1 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -8,7 +8,7 @@ Please also include the context and motivation about the changes introduced. - Documentation ## Checks -- [ ] Changes support all platforms (`Android`, `iOS`, `Linux`, macOS`, `tvOS`) +- [ ] Changes support all platforms (`Android`, `iOS`, `Linux`, `macOS`, `tvOS`) - [ ] Breaks existing functionality - [ ] Implementation is completed, not half-done - [ ] Is there another PR already created for this feature/bug fix diff --git a/README.md b/README.md index 46496a1..3d8e0c1 100644 --- a/README.md +++ b/README.md @@ -124,11 +124,12 @@ the same `FFmpeg` release branch. `dev` part in the version string indicates that `FFmpeg` source code is cloned from the `FFmpeg` `master` branch and the exact version number of `FFmpeg` is obtained using the `git describe --tags` command. -| Platforms | FFmpegKit Version | FFmpeg Version | Release Date | -|:----------------:|:----------------------------------------------------------------------------------:|:--------------:|:------------:| +| Platforms | FFmpegKit Version | FFmpeg Version | Release Date | +|:----------------:|:---------------------------------------------------------------------------------:|:--------------:|:------------:| +| React Native | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v5.1.0) | 5.1.2 | Oct 02, 2022 | | Flutter | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v5.1.0) | 5.1.2 | Oct 02, 2022 | | Android | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 | -| Apple | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 | +| Apple | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 | | React Native | [4.5.2](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.2) | 4.5-dev-3393 | May 25, 2022 | | Flutter | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v4.5.1) | 4.5-dev-3393 | Jan 02, 2022 | | React Native | [4.5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v4.5.1) | 4.5-dev-3393 | Jan 02, 2022 | diff --git a/docs/index.md b/docs/index.md index c60828a..cc9aeb4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -114,6 +114,7 @@ the exact version number of `FFmpeg` is obtained using the `git describe --tags` | Platforms | FFmpegKit Version | FFmpeg Version | Release Date | |:----------------:|:---------------------------------------------------------------------------------:|:--------------:|:------------:| +| React Native | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/react.native.v5.1.0) | 5.1.2 | Oct 02, 2022 | | Flutter | [5.1.0](https://github.com/arthenica/ffmpeg-kit/releases/tag/flutter.v5.1.0) | 5.1.2 | Oct 02, 2022 | | Android | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 | | Apple | [5.1](https://github.com/arthenica/ffmpeg-kit/releases/tag/v5.1) | 5.1.2 | Sep 29, 2022 | diff --git a/react-native/README.md b/react-native/README.md index d72fac0..fd1a2f1 100644 --- a/react-native/README.md +++ b/react-native/README.md @@ -4,11 +4,13 @@ - Includes both `FFmpeg` and `FFprobe` - Supports - Both `Android` and `iOS` - - FFmpeg `v4.5-dev` releases + - FFmpeg `v5.1.2` - `arm-v7a`, `arm-v7a-neon`, `arm64-v8a`, `x86` and `x86_64` architectures on Android - - `Android API Level 16` or later + - `Android API Level 24` or later + - `API Level 16` on LTS releases - `armv7`, `armv7s`, `arm64`, `arm64-simulator`, `i386`, `x86_64`, `x86_64-mac-catalyst` and `arm64-mac-catalyst` architectures on iOS - - `iOS SDK 10` or later + - `iOS SDK 12.1` or later + - `iOS SDK 10` on LTS releases - Can process Storage Access Framework (SAF) Uris on Android - 25 external libraries @@ -22,7 +24,7 @@ - `bzip2`, `iconv`, `libuuid`, `zlib` system libraries and `AudioToolbox`, `VideoToolbox`, `AVFoundation` system frameworks on iOS - Includes Typescript definitions -- Licensed under LGPL 3.0, can be customized to support GPL v3.0 +- Licensed under `LGPL 3.0` by default, some packages licensed by `GPL v3.0` effectively ### 2. Installation @@ -32,16 +34,16 @@ yarn add ffmpeg-kit-react-native #### 2.1 Packages -`ffmpeg` includes built-in encoders for some popular formats. However, there are certain external libraries that needs +`FFmpeg` includes built-in encoders for some popular formats. However, there are certain external libraries that needs to be enabled in order to encode specific formats/codecs. For example, to encode an `mp3` file you need `lame` or `shine` library enabled. You have to install a `ffmpeg-kit-react-native` package that has at least one of them inside. To encode an `h264` video, you need to install a package with `x264` inside. To encode `vp8` or `vp9` videos, you need a `ffmpeg-kit-react-native` package with `libvpx` inside. -`ffmpeg-kit` provides eight packages that include different sets of external libraries. These packages are -named according to the external libraries included in them. Refer to -[Packages](https://github.com/arthenica/ffmpeg-kit#9-packages) section of the project README to see the names -of those packages and external libraries included in each of them. +`ffmpeg-kit` provides eight packages that include different sets of external libraries. These packages are named +according to the external libraries included. Refer to the +[Packages](https://github.com/arthenica/ffmpeg-kit/wiki/Packages) wiki page to see the names of those +packages and external libraries included in each one of them. ##### 2.1.1 Package Names @@ -184,10 +186,10 @@ the package name you are using. #### 2.4 LTS Releases -`ffmpeg-kit-react-native` is published in two different variants: `Main Release` and `LTS Release`. Both releases -share the same source code but is built with different settings (Architectures, API Level, iOS Min SDK, etc.). Refer to -[LTS Releases](https://github.com/arthenica/ffmpeg-kit#11-lts-releases) section of the project README to see how they -compare to each other. +`ffmpeg-kit-react-native` is published in two variants: `Main Release` and `LTS Release`. Both releases share the +same source code but is built with different settings (Architectures, API Level, iOS Min SDK, etc.). Refer to the +[LTS Releases](https://github.com/arthenica/ffmpeg-kit/wiki/LTS-Releases) wiki page to see how they differ from each +other. ### 3. Using diff --git a/react-native/android/build.gradle b/react-native/android/build.gradle index e00921b..dcb21f2 100644 --- a/react-native/android/build.gradle +++ b/react-native/android/build.gradle @@ -1,11 +1,11 @@ buildscript { repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:7.3.0' } } @@ -26,13 +26,13 @@ def safeExtGet(String prop, String fallback) { } android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { minSdkVersion safeExtGet('ffmpegKitPackage', 'https').contains("-lts") ? 16 : 24 - targetSdkVersion 30 - versionCode 452 - versionName "4.5.2" + targetSdkVersion 31 + versionCode 510 + versionName "5.1.0" } buildTypes { @@ -44,14 +44,13 @@ android { disable 'GradleCompatible' } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 } } repositories { mavenCentral() - jcenter() google() def found = false diff --git a/react-native/android/gradle.properties b/react-native/android/gradle.properties index 389aa70..e1fff5b 100644 --- a/react-native/android/gradle.properties +++ b/react-native/android/gradle.properties @@ -1,3 +1,3 @@ android.useAndroidX=true -ffmpegKit.android.main.version=4.5.1-1 -ffmpegKit.android.lts.version=4.5.1-1 +ffmpegKit.android.main.version=5.1 +ffmpegKit.android.lts.version=5.1 diff --git a/react-native/android/gradle/wrapper/gradle-wrapper.properties b/react-native/android/gradle/wrapper/gradle-wrapper.properties index 28ff446..ae04661 100644 --- a/react-native/android/gradle/wrapper/gradle-wrapper.properties +++ b/react-native/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/react-native/ffmpeg-kit-react-native.podspec b/react-native/ffmpeg-kit-react-native.podspec index 7d19f88..653bcf0 100644 --- a/react-native/ffmpeg-kit-react-native.podspec +++ b/react-native/ffmpeg-kit-react-native.podspec @@ -23,112 +23,112 @@ Pod::Spec.new do |s| s.subspec 'min' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-min', "4.5.1" + ss.dependency 'ffmpeg-kit-ios-min', "5.1" ss.ios.deployment_target = '12.1' end s.subspec 'min-lts' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-min', "4.5.1.LTS" + ss.dependency 'ffmpeg-kit-ios-min', "5.1.LTS" ss.ios.deployment_target = '10' end s.subspec 'min-gpl' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-min-gpl', "4.5.1" + ss.dependency 'ffmpeg-kit-ios-min-gpl', "5.1" ss.ios.deployment_target = '12.1' end s.subspec 'min-gpl-lts' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-min-gpl', "4.5.1.LTS" + ss.dependency 'ffmpeg-kit-ios-min-gpl', "5.1.LTS" ss.ios.deployment_target = '10' end s.subspec 'https' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-https', "4.5.1" + ss.dependency 'ffmpeg-kit-ios-https', "5.1" ss.ios.deployment_target = '12.1' end s.subspec 'https-lts' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-https', "4.5.1.LTS" + ss.dependency 'ffmpeg-kit-ios-https', "5.1.LTS" ss.ios.deployment_target = '10' end s.subspec 'https-gpl' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-https-gpl', "4.5.1" + ss.dependency 'ffmpeg-kit-ios-https-gpl', "5.1" ss.ios.deployment_target = '12.1' end s.subspec 'https-gpl-lts' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-https-gpl', "4.5.1.LTS" + ss.dependency 'ffmpeg-kit-ios-https-gpl', "5.1.LTS" ss.ios.deployment_target = '10' end s.subspec 'audio' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-audio', "4.5.1" + ss.dependency 'ffmpeg-kit-ios-audio', "5.1" ss.ios.deployment_target = '12.1' end s.subspec 'audio-lts' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-audio', "4.5.1.LTS" + ss.dependency 'ffmpeg-kit-ios-audio', "5.1.LTS" ss.ios.deployment_target = '10' end s.subspec 'video' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-video', "4.5.1" + ss.dependency 'ffmpeg-kit-ios-video', "5.1" ss.ios.deployment_target = '12.1' end s.subspec 'video-lts' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-video', "4.5.1.LTS" + ss.dependency 'ffmpeg-kit-ios-video', "5.1.LTS" ss.ios.deployment_target = '10' end s.subspec 'full' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-full', "4.5.1" + ss.dependency 'ffmpeg-kit-ios-full', "5.1" ss.ios.deployment_target = '12.1' end s.subspec 'full-lts' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-full', "4.5.1.LTS" + ss.dependency 'ffmpeg-kit-ios-full', "5.1.LTS" ss.ios.deployment_target = '10' end s.subspec 'full-gpl' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-full-gpl', "4.5.1" + ss.dependency 'ffmpeg-kit-ios-full-gpl', "5.1" ss.ios.deployment_target = '12.1' end s.subspec 'full-gpl-lts' do |ss| ss.source_files = '**/FFmpegKitReactNativeModule.m', '**/FFmpegKitReactNativeModule.h' - ss.dependency 'ffmpeg-kit-ios-full-gpl', "4.5.1.LTS" + ss.dependency 'ffmpeg-kit-ios-full-gpl', "5.1.LTS" ss.ios.deployment_target = '10' end diff --git a/react-native/ios/FFmpegKitReactNativeModule.m b/react-native/ios/FFmpegKitReactNativeModule.m index 6cca720..04a03b6 100644 --- a/react-native/ios/FFmpegKitReactNativeModule.m +++ b/react-native/ios/FFmpegKitReactNativeModule.m @@ -299,23 +299,21 @@ RCT_EXPORT_METHOD(mediaInformationSession:(NSArray*)arguments resolver:(RCTPromi // MediaInformationJsonParser RCT_EXPORT_METHOD(mediaInformationJsonParserFrom:(NSString*)ffprobeJsonOutput resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - NSError *error; - MediaInformation* mediaInformation = [MediaInformationJsonParser from:ffprobeJsonOutput with:error]; - if (error == nil) { + @try { + MediaInformation* mediaInformation = [MediaInformationJsonParser fromWithError:ffprobeJsonOutput]; resolve([FFmpegKitReactNativeModule toMediaInformationDictionary:mediaInformation]); - } else { - NSLog(@"MediaInformation parsing failed: %@.\n", error); + } @catch (NSException *exception) { + NSLog(@"Parsing MediaInformation failed: %@.\n", [NSString stringWithFormat:@"%@\n%@", [exception userInfo], [exception callStackSymbols]]); resolve(nil); } } RCT_EXPORT_METHOD(mediaInformationJsonParserFromWithError:(NSString*)ffprobeJsonOutput resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - NSError *error; - MediaInformation* mediaInformation = [MediaInformationJsonParser from:ffprobeJsonOutput with:error]; - if (error == nil) { + @try { + MediaInformation* mediaInformation = [MediaInformationJsonParser fromWithError:ffprobeJsonOutput]; resolve([FFmpegKitReactNativeModule toMediaInformationDictionary:mediaInformation]); - } else { - NSLog(@"MediaInformation parsing failed: %@.\n", error); + } @catch (NSException *exception) { + NSLog(@"Parsing MediaInformation failed: %@.\n", [NSString stringWithFormat:@"%@\n%@", [exception userInfo], [exception callStackSymbols]]); reject(@"PARSE_FAILED", @"Parsing MediaInformation failed with JSON error.", nil); } } diff --git a/react-native/package.json b/react-native/package.json index 858566b..42194bd 100644 --- a/react-native/package.json +++ b/react-native/package.json @@ -1,6 +1,6 @@ { "name": "ffmpeg-kit-react-native", - "version": "4.5.2", + "version": "5.1.0", "description": "FFmpeg Kit for React Native", "main": "src/index", "types": "src/index.d.ts", @@ -19,7 +19,7 @@ "ios" ], "repository": "https://github.com/arthenica/ffmpeg-kit", - "author": "ARTHENICA (https://github.com/arthenica)", + "author": "ARTHENICA (https://www.arthenica.com)", "license": "LGPL-3.0", "bugs": { "url": "https://github.com/arthenica/ffmpeg-kit/issues" diff --git a/react-native/src/index.js b/react-native/src/index.js index 346fbc5..8e167d1 100644 --- a/react-native/src/index.js +++ b/react-native/src/index.js @@ -1611,7 +1611,7 @@ class FFmpegKitFactory { } static getVersion() { - return "4.5.2"; + return "5.1.0"; } static getLogRedirectionStrategy(sessionId) { @@ -3091,7 +3091,7 @@ export class StreamInformation { * @return tags object */ getTags() { - return this.getProperties(StreamInformation.KEY_TAGS); + return this.getProperty(StreamInformation.KEY_TAGS); } /** @@ -3123,12 +3123,12 @@ export class StreamInformation { } /** - * Returns the stream properties associated with the key. + * Returns the stream property associated with the key. * - * @param key properties key - * @return stream properties as an object or undefined if the key is not found + * @param key property key + * @return stream property as an object or undefined if the key is not found */ - getProperties(key) { + getProperty(key) { if (this.#allProperties !== undefined) { return this.#allProperties[key]; } else { @@ -3225,7 +3225,7 @@ export class Chapter { * @return tags object */ getTags() { - return this.getProperties(StreamInformation.KEY_TAGS); + return this.getProperty(StreamInformation.KEY_TAGS); } /** @@ -3257,12 +3257,12 @@ export class Chapter { } /** - * Returns the chapter properties associated with the key. + * Returns the chapter property associated with the key. * - * @param key properties key - * @return chapter properties as an object or undefined if the key is not found + * @param key property key + * @return chapter property as an object or undefined if the key is not found */ - getProperties(key) { + getProperty(key) { if (this.#allProperties !== undefined) { return this.#allProperties[key]; } else {