Merge pull request #585 from arthenica/development-react-native

merge react native plugin v5.1.0 to main
This commit is contained in:
Taner Sener 2022-10-03 00:58:57 +01:00 committed by GitHub
commit e9e90487f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 164 additions and 184 deletions

View File

@ -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

View File

@ -125,7 +125,8 @@ the same `FFmpeg` release branch.
the exact version number of `FFmpeg` is obtained using the `git describe --tags` command.
| 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 |

View File

@ -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 |

View File

@ -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#8-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#9-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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,37 +285,35 @@ 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]);
}
// 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);
}
}

View File

@ -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 <open-source@arthenica.com> (https://github.com/arthenica)",
"author": "ARTHENICA <open-source@arthenica.com> (https://www.arthenica.com)",
"license": "LGPL-3.0",
"bugs": {
"url": "https://github.com/arthenica/ffmpeg-kit/issues"

View File

@ -2,8 +2,6 @@ declare module 'ffmpeg-kit-react-native' {
export abstract class AbstractSession implements Session {
protected constructor();
static createFFmpegSession(argumentsArray: Array<string>, logRedirectionStrategy?: LogRedirectionStrategy): Promise<FFmpegSession>;
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<string>, completeCallback?: FFmpegSessionCompleteCallback, logCallback?: LogCallback, statisticsCallback?: StatisticsCallback, logRedirectionStrategy?: LogRedirectionStrategy): Promise<FFmpegSession>;
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<string>, completeCallback?: FFprobeSessionCompleteCallback, logCallback?: LogCallback, logRedirectionStrategy?: LogRedirectionStrategy): Promise<FFprobeSession>;
static fromMap(sessionMap: { [key: string]: any }): FFprobeSession;
getCompleteCallback(): FFprobeSessionCompleteCallback;
isFFmpeg(): boolean;
@ -321,7 +311,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 +347,15 @@ declare module 'ffmpeg-kit-react-native' {
getNumberProperty(key: string): number;
getProperties(key: string): Record<string, any>;
getProperty(key: string): any;
getMediaProperties(): Record<string, any>;
getStringFormatProperty(key: string): string;
getNumberFormatProperty(key: string): number;
getFormatProperty(key: string): any;
getFormatProperties(): Record<string, any>;
getAllProperties(): Record<string, any>;
@ -375,12 +371,8 @@ declare module 'ffmpeg-kit-react-native' {
export class MediaInformationSession extends AbstractSession implements Session {
constructor();
static create(argumentsArray: Array<string>, completeCallback?: MediaInformationSessionCompleteCallback, logCallback?: LogCallback): Promise<MediaInformationSession>;
static fromMap(sessionMap: { [key: string]: any }): MediaInformationSession;
getMediaInformation(): MediaInformation;
setMediaInformation(mediaInformation: MediaInformation): void;
@ -591,7 +583,7 @@ declare module 'ffmpeg-kit-react-native' {
getNumberProperty(key): number;
getProperties(key): Record<string, any>;
getProperty(key): any;
getAllProperties(): Record<string, any>;
@ -627,7 +619,7 @@ declare module 'ffmpeg-kit-react-native' {
getNumberProperty(key): number;
getProperties(key): Record<string, any>;
getProperty(key): any;
getAllProperties(): Record<string, any>;

View File

@ -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;
@ -1618,7 +1611,7 @@ class FFmpegKitFactory {
}
static getVersion() {
return "4.5.2";
return "5.1.0";
}
static getLogRedirectionStrategy(sessionId) {
@ -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.
*
@ -2438,7 +2397,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 +2419,7 @@ export class MediaInformation {
* @return media file name
*/
getFilename() {
return this.getStringProperty(MediaInformation.KEY_FILENAME);
return this.getStringFormatProperty(MediaInformation.KEY_FILENAME);
}
/**
@ -2469,7 +2428,7 @@ export class MediaInformation {
* @return media format
*/
getFormat() {
return this.getStringProperty(MediaInformation.KEY_FORMAT);
return this.getStringFormatProperty(MediaInformation.KEY_FORMAT);
}
/**
@ -2478,7 +2437,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 +2446,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 +2455,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 +2464,7 @@ export class MediaInformation {
* @return media size in bytes
*/
getSize() {
return this.getStringProperty(MediaInformation.KEY_SIZE);
return this.getStringFormatProperty(MediaInformation.KEY_SIZE);
}
/**
@ -2514,7 +2473,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 +2482,7 @@ export class MediaInformation {
* @return tags dictionary
*/
getTags() {
return this.getProperties(MediaInformation.KEY_TAGS);
return this.getFormatProperty(MediaInformation.KEY_TAGS);
}
/**
@ -2571,58 +2530,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;
}
@ -2677,13 +2681,6 @@ export class MediaInformationJsonParser {
export class MediaInformationSession extends AbstractSession {
#mediaInformation;
/**
* Creates an empty MediaInformationSession.
*/
constructor() {
super();
}
/**
* Creates a new MediaInformationSession session.
*
@ -2702,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.
*
@ -3104,7 +3091,7 @@ export class StreamInformation {
* @return tags object
*/
getTags() {
return this.getProperties(StreamInformation.KEY_TAGS);
return this.getProperty(StreamInformation.KEY_TAGS);
}
/**
@ -3136,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 {
@ -3238,7 +3225,7 @@ export class Chapter {
* @return tags object
*/
getTags() {
return this.getProperties(StreamInformation.KEY_TAGS);
return this.getProperty(StreamInformation.KEY_TAGS);
}
/**
@ -3270,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 {