react-native-compressor 1.6.4 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +5 -11
- package/android/build.gradle +95 -42
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +0 -1
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/reactnativecompressor/CompressorModule.java +88 -33
- package/android/src/main/java/com/reactnativecompressor/CompressorPackage.java +47 -19
- package/android/src/main/java/com/reactnativecompressor/Image/utils/ImageCompressorOptions.java +1 -1
- package/android/src/main/java/com/reactnativecompressor/Utils/Utils.java +1 -1
- package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressorHelper.java +7 -4
- package/android/src/main/java/com/reactnativecompressor/Video/VideoModule.java +8 -6
- package/android/src/newarch/CompressorSpec.java +9 -0
- package/android/src/newarch/VideoCompressorSpec.java +9 -0
- package/android/src/oldarch/CompressorSpec.java +28 -0
- package/android/src/oldarch/VideoCompressorSpec.java +26 -0
- package/ios/Compressor.h +7 -0
- package/ios/Compressor.mm +395 -0
- package/ios/Compressor.xcodeproj/project.pbxproj +6 -36
- package/ios/Video/VideoCompressor.swift +2 -2
- package/lib/commonjs/Audio/index.js +13 -14
- package/lib/commonjs/Audio/index.js.map +1 -1
- package/lib/commonjs/Image/index.js +2 -5
- package/lib/commonjs/Image/index.js.map +1 -1
- package/lib/commonjs/Main.js +29 -0
- package/lib/commonjs/Main.js.map +1 -0
- package/lib/commonjs/Spec/NativeCompressor.js +10 -0
- package/lib/commonjs/Spec/NativeCompressor.js.map +1 -0
- package/lib/commonjs/Spec/NativeVideoCompressor.js +10 -0
- package/lib/commonjs/Spec/NativeVideoCompressor.js.map +1 -0
- package/lib/commonjs/Video/index.js +3 -24
- package/lib/commonjs/Video/index.js.map +1 -1
- package/lib/commonjs/expo-plugin/compressor.js +1 -4
- package/lib/commonjs/expo-plugin/compressor.js.map +1 -1
- package/lib/commonjs/index.js +21 -28
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/index.js +32 -51
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/Audio/index.js +13 -11
- package/lib/module/Audio/index.js.map +1 -1
- package/lib/module/Image/index.js +2 -3
- package/lib/module/Image/index.js.map +1 -1
- package/lib/module/Main.js +22 -0
- package/lib/module/Main.js.map +1 -0
- package/lib/module/Spec/NativeCompressor.js +3 -0
- package/lib/module/Spec/NativeCompressor.js.map +1 -0
- package/lib/module/Spec/NativeVideoCompressor.js +3 -0
- package/lib/module/Spec/NativeVideoCompressor.js.map +1 -0
- package/lib/module/Video/index.js +4 -18
- package/lib/module/Video/index.js.map +1 -1
- package/lib/module/expo-plugin/compressor.js +1 -3
- package/lib/module/expo-plugin/compressor.js.map +1 -1
- package/lib/module/index.js +8 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/index.js +26 -34
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/Audio/index.d.ts +2 -1
- package/lib/typescript/Audio/index.d.ts.map +1 -0
- package/lib/typescript/Image/index.d.ts +7 -6
- package/lib/typescript/Image/index.d.ts.map +1 -0
- package/lib/typescript/Main.d.ts +4 -0
- package/lib/typescript/Main.d.ts.map +1 -0
- package/lib/typescript/Spec/NativeCompressor.d.ts +12 -0
- package/lib/typescript/Spec/NativeCompressor.d.ts.map +1 -0
- package/lib/typescript/Spec/NativeVideoCompressor.d.ts +13 -0
- package/lib/typescript/Spec/NativeVideoCompressor.d.ts.map +1 -0
- package/lib/typescript/Video/index.d.ts +4 -3
- package/lib/typescript/Video/index.d.ts.map +1 -0
- package/lib/typescript/expo-plugin/compressor.d.ts +2 -3
- package/lib/typescript/expo-plugin/compressor.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +7 -3
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/utils/index.d.ts +6 -4
- package/lib/typescript/utils/index.d.ts.map +1 -0
- package/package.json +59 -37
- package/react-native-compressor.podspec +24 -1
- package/src/Audio/index.tsx +6 -4
- package/src/Image/index.tsx +2 -2
- package/src/Main.tsx +41 -0
- package/src/Spec/NativeCompressor.ts +13 -0
- package/src/Spec/NativeVideoCompressor.ts +14 -0
- package/src/Video/index.tsx +5 -10
- package/src/expo-plugin/compressor.ts +2 -1
- package/src/index.tsx +7 -2
- package/src/utils/index.tsx +11 -5
- package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/6.9/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.idea/caches/build_file_checksums.ser +0 -0
- package/android/.idea/compiler.xml +0 -6
- package/android/.idea/gradle.xml +0 -20
- package/android/.idea/jarRepositories.xml +0 -45
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml +0 -24
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_collection_collection_1_0_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml +0 -24
- package/android/.idea/libraries/Gradle__androidx_core_core_1_1_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +0 -24
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml +0 -24
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0.xml +0 -11
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +0 -24
- package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +0 -24
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +0 -19
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_66_1_aar.xml +0 -14
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_1_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_3_0_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_googlecode_mp4parser_isoparser_1_0_6.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +0 -13
- package/android/.idea/libraries/Gradle__io_github_lizhangqu_coreprogress_1_0_2_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml +0 -13
- package/android/.idea/libraries/Gradle__org_aspectj_aspectjrt_1_8_2.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_4_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_jvm_1_4_0.xml +0 -13
- package/android/.idea/misc.xml +0 -9
- package/android/.idea/modules/android.iml +0 -138
- package/android/.idea/modules.xml +0 -8
- package/android/.idea/vcs.xml +0 -6
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +0 -5
- package/android/gradlew +0 -183
- package/android/gradlew.bat +0 -100
- package/android/local.properties +0 -8
- package/ios/Compressor.m +0 -351
- package/ios/Compressor.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/Compressor.xcodeproj/project.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/Compressor.xcodeproj/xcshareddata/xcschemes/Compressor.xcscheme +0 -67
- package/ios/Compressor.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist +0 -22
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
#import "Compressor.h"
|
|
2
|
+
|
|
3
|
+
//Image
|
|
4
|
+
#import "Image/ImageCompressor.h"
|
|
5
|
+
#import "Image/ImageCompressorOptions.h"
|
|
6
|
+
#import <React/RCTEventEmitter.h>
|
|
7
|
+
#import <AVFoundation/AVFoundation.h>
|
|
8
|
+
|
|
9
|
+
#define AlAsset_Library_Scheme @"assets-library"
|
|
10
|
+
@implementation Compressor
|
|
11
|
+
|
|
12
|
+
AVAssetWriter *assetWriter=nil;
|
|
13
|
+
static NSArray *metadatas;
|
|
14
|
+
|
|
15
|
+
- (NSArray *)metadatas
|
|
16
|
+
{
|
|
17
|
+
if (!metadatas) {
|
|
18
|
+
metadatas = @[
|
|
19
|
+
@"albumName",
|
|
20
|
+
@"artist",
|
|
21
|
+
@"comment",
|
|
22
|
+
@"copyrights",
|
|
23
|
+
@"creationDate",
|
|
24
|
+
@"date",
|
|
25
|
+
@"encodedby",
|
|
26
|
+
@"genre",
|
|
27
|
+
@"language",
|
|
28
|
+
@"location",
|
|
29
|
+
@"lastModifiedDate",
|
|
30
|
+
@"performer",
|
|
31
|
+
@"publisher",
|
|
32
|
+
@"title"
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
return metadatas;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
RCT_EXPORT_MODULE()
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
//Image
|
|
42
|
+
RCT_EXPORT_METHOD(
|
|
43
|
+
image_compress: (NSString*) imagePath
|
|
44
|
+
optionsDict: (NSDictionary*) optionsDict
|
|
45
|
+
resolver: (RCTPromiseResolveBlock) resolve
|
|
46
|
+
rejecter: (RCTPromiseRejectBlock) reject) {
|
|
47
|
+
[self image_compress:imagePath optionMap:optionsDict resolve:resolve reject:reject];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
//Audio
|
|
51
|
+
RCT_EXPORT_METHOD(
|
|
52
|
+
compress_audio: (NSString*) filePath
|
|
53
|
+
optionsDict: (NSDictionary*) optionsDict
|
|
54
|
+
resolver: (RCTPromiseResolveBlock) resolve
|
|
55
|
+
rejecter: (RCTPromiseRejectBlock) reject) {
|
|
56
|
+
[self compress_audio:filePath optionMap:optionsDict resolve:resolve reject:reject];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//general
|
|
60
|
+
RCT_EXPORT_METHOD(
|
|
61
|
+
generateFilePath: (NSString*) extension
|
|
62
|
+
resolver: (RCTPromiseResolveBlock) resolve
|
|
63
|
+
rejecter: (RCTPromiseRejectBlock) reject) {
|
|
64
|
+
[self generateFilePath:extension resolve:resolve reject:reject];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
RCT_EXPORT_METHOD(
|
|
68
|
+
getRealPath: (NSString*) path
|
|
69
|
+
type: (NSString*) type
|
|
70
|
+
resolver: (RCTPromiseResolveBlock) resolve
|
|
71
|
+
rejecter: (RCTPromiseRejectBlock) reject) {
|
|
72
|
+
[self getRealPath:path type:type resolve:resolve reject:reject];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//general
|
|
76
|
+
RCT_EXPORT_METHOD(
|
|
77
|
+
getFileSize: (NSString*) filePath
|
|
78
|
+
resolver: (RCTPromiseResolveBlock) resolve
|
|
79
|
+
rejecter: (RCTPromiseRejectBlock) reject) {
|
|
80
|
+
[self getFileSize:filePath resolve:resolve reject:reject];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
RCT_EXPORT_METHOD(
|
|
85
|
+
getVideoMetaData: (NSString*) filePath
|
|
86
|
+
resolver: (RCTPromiseResolveBlock) resolve
|
|
87
|
+
rejecter: (RCTPromiseRejectBlock) reject) {
|
|
88
|
+
[self getVideoMetaData:filePath resolve:resolve reject:reject];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
- (NSString *)getAudioQualityConstant:(NSString *)quality
|
|
92
|
+
{
|
|
93
|
+
NSMutableArray *audioQualityArray = [[NSMutableArray alloc]initWithObjects:@"low", @"medium", @"high", nil];
|
|
94
|
+
int index = [audioQualityArray indexOfObject:quality];
|
|
95
|
+
switch (index) {
|
|
96
|
+
case 0:
|
|
97
|
+
return AVAssetExportPresetLowQuality;
|
|
98
|
+
break;
|
|
99
|
+
case 1:
|
|
100
|
+
return AVAssetExportPresetMediumQuality;
|
|
101
|
+
break;
|
|
102
|
+
case 2:
|
|
103
|
+
return AVAssetExportPresetHighestQuality;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
return AVAssetExportPresetMediumQuality;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
- (void)audo_compress_helper:(AVURLAsset *)avAsset qualityConstant:(NSString *)qualityConstant complete:(void (^)(NSString *mp3Path, BOOL finished))completeCallback {
|
|
110
|
+
NSString *path;
|
|
111
|
+
if ([avAsset.URL.scheme isEqualToString:AlAsset_Library_Scheme]) {
|
|
112
|
+
path = avAsset.URL.query;
|
|
113
|
+
if (path.length == 0) {
|
|
114
|
+
completeCallback(nil, NO);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
}else {
|
|
119
|
+
path = avAsset.URL.path;
|
|
120
|
+
if (!path || ![[NSFileManager defaultManager] fileExistsAtPath:path]) {
|
|
121
|
+
completeCallback(nil, NO);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
NSString *mp3Path = [ImageCompressor generateCacheFilePath:@"m4a"];;
|
|
127
|
+
|
|
128
|
+
if ([[NSFileManager defaultManager] fileExistsAtPath:mp3Path]) {
|
|
129
|
+
if (completeCallback)
|
|
130
|
+
completeCallback(mp3Path, YES);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
NSURL *mp3Url;
|
|
135
|
+
NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset];
|
|
136
|
+
|
|
137
|
+
if ([compatiblePresets containsObject:qualityConstant]) {
|
|
138
|
+
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
|
|
139
|
+
initWithAsset:avAsset
|
|
140
|
+
presetName:AVAssetExportPresetAppleM4A];
|
|
141
|
+
|
|
142
|
+
mp3Url = [NSURL fileURLWithPath:mp3Path];
|
|
143
|
+
exportSession.outputURL = mp3Url;
|
|
144
|
+
exportSession.shouldOptimizeForNetworkUse = YES;
|
|
145
|
+
exportSession.outputFileType = AVFileTypeAppleM4A;
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
[exportSession exportAsynchronouslyWithCompletionHandler:^{
|
|
149
|
+
BOOL finished = NO;
|
|
150
|
+
switch ([exportSession status]) {
|
|
151
|
+
case AVAssetExportSessionStatusFailed:
|
|
152
|
+
NSLog(@"AVAssetExportSessionStatusFailed, error:%@.", exportSession.error);
|
|
153
|
+
break;
|
|
154
|
+
|
|
155
|
+
case AVAssetExportSessionStatusCancelled:
|
|
156
|
+
NSLog(@"AVAssetExportSessionStatusCancelled.");
|
|
157
|
+
break;
|
|
158
|
+
|
|
159
|
+
case AVAssetExportSessionStatusCompleted:
|
|
160
|
+
NSLog(@"AVAssetExportSessionStatusCompleted.");
|
|
161
|
+
finished = YES;
|
|
162
|
+
break;
|
|
163
|
+
|
|
164
|
+
case AVAssetExportSessionStatusUnknown:
|
|
165
|
+
NSLog(@"AVAssetExportSessionStatusUnknown");
|
|
166
|
+
break;
|
|
167
|
+
|
|
168
|
+
case AVAssetExportSessionStatusWaiting:
|
|
169
|
+
NSLog(@"AVAssetExportSessionStatusWaiting");
|
|
170
|
+
break;
|
|
171
|
+
|
|
172
|
+
case AVAssetExportSessionStatusExporting:
|
|
173
|
+
NSLog(@"AVAssetExportSessionStatusExporting");
|
|
174
|
+
break;
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
if (completeCallback)
|
|
179
|
+
completeCallback(mp3Path, finished);
|
|
180
|
+
}];
|
|
181
|
+
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
- (void)compress_audio:(NSString *)fileUrl optionMap:(NSDictionary *)optionMap resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
|
|
186
|
+
@try {
|
|
187
|
+
if([fileUrl containsString:@"file://"])
|
|
188
|
+
{
|
|
189
|
+
fileUrl=[fileUrl stringByReplacingOccurrencesOfString:@"file://"
|
|
190
|
+
withString:@""];
|
|
191
|
+
}
|
|
192
|
+
NSFileManager *fileManager = [NSFileManager defaultManager];
|
|
193
|
+
BOOL isDir;
|
|
194
|
+
if (![fileManager fileExistsAtPath:fileUrl isDirectory:&isDir] || isDir){
|
|
195
|
+
NSError *err = [NSError errorWithDomain:@"file not found" code:-15 userInfo:nil];
|
|
196
|
+
reject([NSString stringWithFormat: @"%lu", (long)err.code], err.localizedDescription, err);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
NSDictionary *assetOptions = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES};
|
|
201
|
+
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:fileUrl] options:assetOptions];
|
|
202
|
+
NSString *quality=[optionMap objectForKey:@"quality"];
|
|
203
|
+
NSString *qualityConstant=[self getAudioQualityConstant:quality];
|
|
204
|
+
[self audo_compress_helper:asset qualityConstant:qualityConstant complete:^(NSString *mp3Path, BOOL finished) {
|
|
205
|
+
if(finished)
|
|
206
|
+
{
|
|
207
|
+
resolve([NSString stringWithFormat: @"file:/%@", mp3Path]);
|
|
208
|
+
}
|
|
209
|
+
else
|
|
210
|
+
{
|
|
211
|
+
reject(@"Error", @"Something went wrong", nil);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
}];
|
|
215
|
+
|
|
216
|
+
}
|
|
217
|
+
@catch (NSException *exception) {
|
|
218
|
+
reject(exception.name, exception.reason, nil);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
- (void)generateFilePath:(NSString *)extension resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
|
|
223
|
+
@try {
|
|
224
|
+
NSString *outputUri =[ImageCompressor generateCacheFilePath:extension];
|
|
225
|
+
resolve(outputUri);
|
|
226
|
+
}
|
|
227
|
+
@catch (NSException *exception) {
|
|
228
|
+
reject(exception.name, exception.reason, nil);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
- (void)getRealPath:(NSString *)path type:(NSString *)type resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
|
|
233
|
+
@try {
|
|
234
|
+
if([type isEqualToString:@"video"])
|
|
235
|
+
{
|
|
236
|
+
[ImageCompressor getAbsoluteVideoPath:path completionHandler:^(NSString* absoluteImagePath){
|
|
237
|
+
resolve(absoluteImagePath);
|
|
238
|
+
}];
|
|
239
|
+
}
|
|
240
|
+
else
|
|
241
|
+
{
|
|
242
|
+
[ImageCompressor getAbsoluteImagePath:path completionHandler:^(NSString* absoluteImagePath){
|
|
243
|
+
resolve(absoluteImagePath);
|
|
244
|
+
}];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
@catch (NSException *exception) {
|
|
248
|
+
reject(exception.name, exception.reason, nil);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
- (void)getVideoMetaData:(NSString *)filePath resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
|
|
253
|
+
@try {
|
|
254
|
+
[ImageCompressor getAbsoluteVideoPath:filePath completionHandler:^(NSString *absoluteImagePath) {
|
|
255
|
+
if([absoluteImagePath containsString:@"file://"])
|
|
256
|
+
{
|
|
257
|
+
absoluteImagePath=[absoluteImagePath stringByReplacingOccurrencesOfString:@"file://"
|
|
258
|
+
withString:@""];
|
|
259
|
+
}
|
|
260
|
+
NSFileManager *fileManager = [NSFileManager defaultManager];
|
|
261
|
+
|
|
262
|
+
BOOL isDir;
|
|
263
|
+
if (![fileManager fileExistsAtPath:absoluteImagePath isDirectory:&isDir] || isDir){
|
|
264
|
+
NSError *err = [NSError errorWithDomain:@"file not found" code:-15 userInfo:nil];
|
|
265
|
+
reject([NSString stringWithFormat: @"%lu", (long)err.code], err.localizedDescription, err);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
NSDictionary *attrs = [fileManager attributesOfItemAtPath: absoluteImagePath error: NULL];
|
|
269
|
+
UInt32 fileSize = [attrs fileSize];
|
|
270
|
+
NSString *fileSizeString = [@(fileSize) stringValue];
|
|
271
|
+
|
|
272
|
+
NSMutableDictionary *result = [NSMutableDictionary new];
|
|
273
|
+
NSDictionary *assetOptions = @{AVURLAssetPreferPreciseDurationAndTimingKey: @YES};
|
|
274
|
+
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:absoluteImagePath] options:assetOptions];\
|
|
275
|
+
AVAssetTrack *avAsset = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
|
|
276
|
+
CGSize size = [avAsset naturalSize];
|
|
277
|
+
NSString *extension = [[absoluteImagePath lastPathComponent] pathExtension];
|
|
278
|
+
CMTime time = [asset duration];
|
|
279
|
+
int seconds = ceil(time.value/time.timescale);
|
|
280
|
+
[result setObject:[NSString stringWithFormat: @"%.2f", size.width] forKey:@"width"];
|
|
281
|
+
[result setObject:[NSString stringWithFormat: @"%.2f", size.height] forKey:@"height"];
|
|
282
|
+
[result setObject:extension forKey:@"extension"];
|
|
283
|
+
[result setObject:fileSizeString forKey:@"size"];
|
|
284
|
+
[result setObject:[@(seconds) stringValue] forKey:@"duration"];
|
|
285
|
+
NSArray *keys = [NSArray arrayWithObjects:@"commonMetadata", nil];
|
|
286
|
+
[asset loadValuesAsynchronouslyForKeys:keys completionHandler:^{
|
|
287
|
+
// string keys
|
|
288
|
+
for (NSString *key in [self metadatas]) {
|
|
289
|
+
NSArray *items = [AVMetadataItem metadataItemsFromArray:asset.commonMetadata
|
|
290
|
+
withKey:key
|
|
291
|
+
keySpace:AVMetadataKeySpaceCommon];
|
|
292
|
+
for (AVMetadataItem *item in items) {
|
|
293
|
+
[result setObject:item.value forKey:key];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
resolve(result);
|
|
297
|
+
}];
|
|
298
|
+
}];
|
|
299
|
+
}
|
|
300
|
+
@catch (NSException *exception) {
|
|
301
|
+
reject(exception.name, exception.reason, nil);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
- (void)image_compress:(NSString *)imagePath optionMap:(NSDictionary *)optionMap resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
|
|
306
|
+
@try {
|
|
307
|
+
ImageCompressorOptions *options = [ImageCompressorOptions fromDictionary:optionMap];
|
|
308
|
+
[ImageCompressor getAbsoluteImagePath:imagePath completionHandler:^(NSString* absoluteImagePath){
|
|
309
|
+
if(options.autoCompress)
|
|
310
|
+
{
|
|
311
|
+
NSString *result = [ImageCompressor autoCompressHandler:absoluteImagePath options:options];
|
|
312
|
+
resolve(result);
|
|
313
|
+
}
|
|
314
|
+
else
|
|
315
|
+
{
|
|
316
|
+
NSString *result = [ImageCompressor manualCompressHandler:absoluteImagePath options:options];
|
|
317
|
+
resolve(result);
|
|
318
|
+
}
|
|
319
|
+
}];
|
|
320
|
+
|
|
321
|
+
}
|
|
322
|
+
@catch (NSException *exception) {
|
|
323
|
+
reject(exception.name, exception.reason, nil);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
- (void)getFileSize:(NSString *)filePath resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject {
|
|
328
|
+
@try {
|
|
329
|
+
if([filePath containsString:@"file://"])
|
|
330
|
+
{
|
|
331
|
+
filePath=[filePath stringByReplacingOccurrencesOfString:@"file://"
|
|
332
|
+
withString:@""];
|
|
333
|
+
}
|
|
334
|
+
NSFileManager *fileManager = [NSFileManager defaultManager];
|
|
335
|
+
BOOL isDir;
|
|
336
|
+
if (![fileManager fileExistsAtPath:filePath isDirectory:&isDir] || isDir){
|
|
337
|
+
NSError *err = [NSError errorWithDomain:@"file not found" code:-15 userInfo:nil];
|
|
338
|
+
reject([NSString stringWithFormat: @"%lu", (long)err.code], err.localizedDescription, err);
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
NSDictionary *attrs = [fileManager attributesOfItemAtPath: filePath error: NULL];
|
|
342
|
+
UInt32 fileSize = [attrs fileSize];
|
|
343
|
+
NSString *fileSizeString = [@(fileSize) stringValue];
|
|
344
|
+
resolve(fileSizeString);
|
|
345
|
+
}
|
|
346
|
+
@catch (NSException *exception) {
|
|
347
|
+
reject(exception.name, exception.reason, nil);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Don't compile this code when we build for the old architecture.
|
|
352
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
353
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
354
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
355
|
+
{
|
|
356
|
+
return std::make_shared<facebook::react::NativeCompressorSpecJSI>(params);
|
|
357
|
+
}
|
|
358
|
+
#endif
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
@end
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
@interface RCT_EXTERN_MODULE(VideoCompressor, RCTEventEmitter)
|
|
365
|
+
|
|
366
|
+
RCT_EXTERN_METHOD(compress:(NSString *)fileUrl
|
|
367
|
+
withOptions:(NSDictionary *)options
|
|
368
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
369
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
370
|
+
|
|
371
|
+
RCT_EXTERN_METHOD(upload:(NSString *)fileUrl
|
|
372
|
+
withOptions:(NSDictionary *)options
|
|
373
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
374
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
375
|
+
|
|
376
|
+
RCT_EXTERN_METHOD(activateBackgroundTask: (NSDictionary *)options
|
|
377
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
378
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
379
|
+
|
|
380
|
+
RCT_EXTERN_METHOD(deactivateBackgroundTask: (NSDictionary *)options
|
|
381
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
|
382
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
|
383
|
+
|
|
384
|
+
RCT_EXTERN_METHOD(cancelCompression:(NSString *)uuid)
|
|
385
|
+
|
|
386
|
+
// Don't compile this code when we build for the old architecture.
|
|
387
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
388
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
389
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
390
|
+
{
|
|
391
|
+
return std::make_shared<facebook::react::NativeVideoCompressorSpecJSI>(params);
|
|
392
|
+
}
|
|
393
|
+
#endif
|
|
394
|
+
|
|
395
|
+
@end
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
objects = {
|
|
8
8
|
|
|
9
9
|
/* Begin PBXBuildFile section */
|
|
10
|
-
|
|
10
|
+
5E555C0D2413F4C50049A1A2 /* Compressor.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* Compressor.mm */; };
|
|
11
11
|
/* End PBXBuildFile section */
|
|
12
12
|
|
|
13
13
|
/* Begin PBXCopyFilesBuildPhase section */
|
|
@@ -24,11 +24,8 @@
|
|
|
24
24
|
|
|
25
25
|
/* Begin PBXFileReference section */
|
|
26
26
|
134814201AA4EA6300B7C361 /* libCompressor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCompressor.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
27
|
-
188657B826612A1C006FF392 /* Compressor-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Compressor-Bridging-Header.h"; sourceTree = "<group>"; };
|
|
28
|
-
188657BA26612A1D006FF392 /* VideoCompressor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoCompressor.swift; sourceTree = "<group>"; };
|
|
29
|
-
18866CD1266E224C006FF392 /* Image */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Image; sourceTree = "<group>"; };
|
|
30
27
|
B3E7B5881CC2AC0600A0062D /* Compressor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Compressor.h; sourceTree = "<group>"; };
|
|
31
|
-
B3E7B5891CC2AC0600A0062D /* Compressor.
|
|
28
|
+
B3E7B5891CC2AC0600A0062D /* Compressor.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Compressor.mm; sourceTree = "<group>"; };
|
|
32
29
|
/* End PBXFileReference section */
|
|
33
30
|
|
|
34
31
|
/* Begin PBXFrameworksBuildPhase section */
|
|
@@ -50,30 +47,11 @@
|
|
|
50
47
|
name = Products;
|
|
51
48
|
sourceTree = "<group>";
|
|
52
49
|
};
|
|
53
|
-
188657B5266127EC006FF392 /* Video */ = {
|
|
54
|
-
isa = PBXGroup;
|
|
55
|
-
children = (
|
|
56
|
-
188657BA26612A1D006FF392 /* VideoCompressor.swift */,
|
|
57
|
-
);
|
|
58
|
-
path = Video;
|
|
59
|
-
sourceTree = "<group>";
|
|
60
|
-
};
|
|
61
|
-
188657B7266127FF006FF392 /* Audio */ = {
|
|
62
|
-
isa = PBXGroup;
|
|
63
|
-
children = (
|
|
64
|
-
);
|
|
65
|
-
path = Audio;
|
|
66
|
-
sourceTree = "<group>";
|
|
67
|
-
};
|
|
68
50
|
58B511D21A9E6C8500147676 = {
|
|
69
51
|
isa = PBXGroup;
|
|
70
52
|
children = (
|
|
71
|
-
188657B826612A1C006FF392 /* Compressor-Bridging-Header.h */,
|
|
72
|
-
18866CD1266E224C006FF392 /* Image */,
|
|
73
|
-
188657B7266127FF006FF392 /* Audio */,
|
|
74
|
-
188657B5266127EC006FF392 /* Video */,
|
|
75
53
|
B3E7B5881CC2AC0600A0062D /* Compressor.h */,
|
|
76
|
-
B3E7B5891CC2AC0600A0062D /* Compressor.
|
|
54
|
+
B3E7B5891CC2AC0600A0062D /* Compressor.mm */,
|
|
77
55
|
134814211AA4EA7D00B7C361 /* Products */,
|
|
78
56
|
);
|
|
79
57
|
sourceTree = "<group>";
|
|
@@ -109,7 +87,6 @@
|
|
|
109
87
|
TargetAttributes = {
|
|
110
88
|
58B511DA1A9E6C8500147676 = {
|
|
111
89
|
CreatedOnToolsVersion = 6.1.1;
|
|
112
|
-
LastSwiftMigration = 1240;
|
|
113
90
|
};
|
|
114
91
|
};
|
|
115
92
|
};
|
|
@@ -136,7 +113,7 @@
|
|
|
136
113
|
isa = PBXSourcesBuildPhase;
|
|
137
114
|
buildActionMask = 2147483647;
|
|
138
115
|
files = (
|
|
139
|
-
|
|
116
|
+
B3E7B58A1CC2AC0600A0062D /* Compressor.mm in Sources */,
|
|
140
117
|
);
|
|
141
118
|
runOnlyForDeploymentPostprocessing = 0;
|
|
142
119
|
};
|
|
@@ -171,6 +148,7 @@
|
|
|
171
148
|
COPY_PHASE_STRIP = NO;
|
|
172
149
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
173
150
|
ENABLE_TESTABILITY = YES;
|
|
151
|
+
"EXCLUDED_ARCHS[sdk=*]" = arm64;
|
|
174
152
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
175
153
|
GCC_DYNAMIC_NO_PIC = NO;
|
|
176
154
|
GCC_NO_COMMON_BLOCKS = YES;
|
|
@@ -221,6 +199,7 @@
|
|
|
221
199
|
COPY_PHASE_STRIP = YES;
|
|
222
200
|
ENABLE_NS_ASSERTIONS = NO;
|
|
223
201
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
202
|
+
"EXCLUDED_ARCHS[sdk=*]" = arm64;
|
|
224
203
|
GCC_C_LANGUAGE_STANDARD = gnu99;
|
|
225
204
|
GCC_NO_COMMON_BLOCKS = YES;
|
|
226
205
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
@@ -239,41 +218,32 @@
|
|
|
239
218
|
58B511F01A9E6C8500147676 /* Debug */ = {
|
|
240
219
|
isa = XCBuildConfiguration;
|
|
241
220
|
buildSettings = {
|
|
242
|
-
CLANG_ENABLE_MODULES = YES;
|
|
243
221
|
HEADER_SEARCH_PATHS = (
|
|
244
222
|
"$(inherited)",
|
|
245
223
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
246
224
|
"$(SRCROOT)/../../../React/**",
|
|
247
225
|
"$(SRCROOT)/../../react-native/React/**",
|
|
248
226
|
);
|
|
249
|
-
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
|
250
227
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
|
251
228
|
OTHER_LDFLAGS = "-ObjC";
|
|
252
229
|
PRODUCT_NAME = Compressor;
|
|
253
230
|
SKIP_INSTALL = YES;
|
|
254
|
-
SWIFT_OBJC_BRIDGING_HEADER = "Video/Compressor-Bridging-Header.h";
|
|
255
|
-
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
256
|
-
SWIFT_VERSION = 5.0;
|
|
257
231
|
};
|
|
258
232
|
name = Debug;
|
|
259
233
|
};
|
|
260
234
|
58B511F11A9E6C8500147676 /* Release */ = {
|
|
261
235
|
isa = XCBuildConfiguration;
|
|
262
236
|
buildSettings = {
|
|
263
|
-
CLANG_ENABLE_MODULES = YES;
|
|
264
237
|
HEADER_SEARCH_PATHS = (
|
|
265
238
|
"$(inherited)",
|
|
266
239
|
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
|
|
267
240
|
"$(SRCROOT)/../../../React/**",
|
|
268
241
|
"$(SRCROOT)/../../react-native/React/**",
|
|
269
242
|
);
|
|
270
|
-
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
|
271
243
|
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
|
272
244
|
OTHER_LDFLAGS = "-ObjC";
|
|
273
245
|
PRODUCT_NAME = Compressor;
|
|
274
246
|
SKIP_INSTALL = YES;
|
|
275
|
-
SWIFT_OBJC_BRIDGING_HEADER = "Video/Compressor-Bridging-Header.h";
|
|
276
|
-
SWIFT_VERSION = 5.0;
|
|
277
247
|
};
|
|
278
248
|
name = Release;
|
|
279
249
|
};
|
|
@@ -207,7 +207,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
207
207
|
|
|
208
208
|
func compressVideo(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
|
|
209
209
|
ImageCompressor.getAbsoluteVideoPath(url.absoluteString) { absoluteVideoPath in
|
|
210
|
-
var minimumFileSizeForCompress:Double=
|
|
210
|
+
var minimumFileSizeForCompress:Double=0.0;
|
|
211
211
|
let videoURL = URL(string: absoluteVideoPath!)
|
|
212
212
|
let fileSize=self.getfileSize(forURL: videoURL!);
|
|
213
213
|
if((options["minimumFileSizeForCompress"]) != nil)
|
|
@@ -216,7 +216,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
216
216
|
}
|
|
217
217
|
if(fileSize>minimumFileSizeForCompress)
|
|
218
218
|
{
|
|
219
|
-
if(options["compressionMethod"] as! String=="
|
|
219
|
+
if(options["compressionMethod"] as! String=="manual")
|
|
220
220
|
{
|
|
221
221
|
self.autoCompressionHelper(url: videoURL!, options:options) { progress in
|
|
222
222
|
onProgress(progress)
|
|
@@ -4,51 +4,50 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _reactNative = require("react-native");
|
|
9
|
-
|
|
7
|
+
var _Main = require("../Main");
|
|
10
8
|
var _utils = require("../utils");
|
|
11
|
-
|
|
12
|
-
const NativeAudio = _reactNative.NativeModules.Compressor;
|
|
9
|
+
const NativeAudio = _Main.Compressor;
|
|
13
10
|
const Audio = {
|
|
14
|
-
compress: async (url
|
|
11
|
+
compress: async function (url) {
|
|
12
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.DEFAULT_COMPRESS_AUDIO_OPTIONS;
|
|
15
13
|
try {
|
|
16
14
|
const checkUrlAndOptionsResult = await (0, _utils.checkUrlAndOptions)(url, options);
|
|
17
|
-
|
|
18
15
|
if (!checkUrlAndOptionsResult.isCorrect) {
|
|
19
16
|
throw checkUrlAndOptionsResult.message;
|
|
20
17
|
} else {
|
|
21
18
|
// Get resulting output file path
|
|
19
|
+
|
|
22
20
|
// Get media details
|
|
23
21
|
// const mediaDetails: any = await getDetails(url).catch(() => null);
|
|
24
22
|
const mediaDetails = {
|
|
25
23
|
bitrate: 0
|
|
26
|
-
};
|
|
24
|
+
};
|
|
27
25
|
|
|
26
|
+
// Initialize bitrate
|
|
28
27
|
let bitrate = _utils.DEFAULT_COMPRESS_AUDIO_OPTIONS.bitrate;
|
|
29
|
-
|
|
30
28
|
if (mediaDetails && mediaDetails.bitrate) {
|
|
31
29
|
// Check and return the appropriate bitrate according to quality expected
|
|
32
30
|
for (let i = 0; i < _utils.AUDIO_BITRATE.length; i++) {
|
|
33
31
|
// Check a particular bitrate to return its nearest lower according to quality
|
|
32
|
+
//@ts-ignore
|
|
34
33
|
if (mediaDetails.bitrate > _utils.AUDIO_BITRATE[i]) {
|
|
35
34
|
if (i + 2 < _utils.AUDIO_BITRATE.length) {
|
|
36
35
|
if (options.quality === 'low') bitrate = _utils.AUDIO_BITRATE[i + 2];else if (options.quality === 'medium') bitrate = _utils.AUDIO_BITRATE[i + 1];else bitrate = _utils.AUDIO_BITRATE[i];
|
|
37
36
|
} else if (i + 1 < _utils.AUDIO_BITRATE.length) {
|
|
38
37
|
if (options.quality === 'low') bitrate = _utils.AUDIO_BITRATE[i + 1];else bitrate = _utils.AUDIO_BITRATE[i];
|
|
39
38
|
} else bitrate = _utils.AUDIO_BITRATE[i];
|
|
40
|
-
|
|
41
39
|
break;
|
|
42
|
-
}
|
|
43
|
-
|
|
40
|
+
}
|
|
44
41
|
|
|
45
|
-
if
|
|
42
|
+
// Check if the matching bitrate is the last in the array
|
|
43
|
+
if (
|
|
44
|
+
//@ts-ignore
|
|
45
|
+
mediaDetails.bitrate <= _utils.AUDIO_BITRATE[_utils.AUDIO_BITRATE.length - 1]) {
|
|
46
46
|
bitrate = _utils.AUDIO_BITRATE[_utils.AUDIO_BITRATE.length - 1];
|
|
47
47
|
break;
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
|
|
52
51
|
return NativeAudio.compress_audio(url, {
|
|
53
52
|
bitrate,
|
|
54
53
|
quality: options.quality
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["_Main","require","_utils","NativeAudio","Compressor","Audio","compress","url","options","arguments","length","undefined","DEFAULT_COMPRESS_AUDIO_OPTIONS","checkUrlAndOptionsResult","checkUrlAndOptions","isCorrect","message","mediaDetails","bitrate","i","AUDIO_BITRATE","quality","compress_audio","error","_default","exports","default"],"sourceRoot":"../../../src","sources":["Audio/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAMA,MAAME,WAAW,GAAGC,gBAAU;AAE9B,MAAMC,KAAgB,GAAG;EACvBC,QAAQ,EAAE,eAAAA,CAAOC,GAAG,EAA+C;IAAA,IAA7CC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGG,qCAA8B;IAC5D,IAAI;MACF,MAAMC,wBAA2C,GAC/C,MAAM,IAAAC,yBAAkB,EAACP,GAAG,EAAEC,OAAO,CAAC;MACxC,IAAI,CAACK,wBAAwB,CAACE,SAAS,EAAE;QACvC,MAAMF,wBAAwB,CAACG,OAAO;MACxC,CAAC,MAAM;QACL;;QAEA;QACA;QACA,MAAMC,YAAiB,GAAG;UACxBC,OAAO,EAAE;QACX,CAAC;;QAED;QACA,IAAIA,OAAY,GAAGN,qCAA8B,CAACM,OAAO;QAEzD,IAAID,YAAY,IAAIA,YAAY,CAACC,OAAO,EAAE;UACxC;UACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGC,oBAAa,CAACV,MAAM,EAAES,CAAC,EAAE,EAAE;YAC7C;YACA;YACA,IAAIF,YAAY,CAACC,OAAO,GAAGE,oBAAa,CAACD,CAAC,CAAC,EAAE;cAC3C,IAAIA,CAAC,GAAG,CAAC,GAAGC,oBAAa,CAACV,MAAM,EAAE;gBAChC,IAAIF,OAAO,CAACa,OAAO,KAAK,KAAK,EAAEH,OAAO,GAAGE,oBAAa,CAACD,CAAC,GAAG,CAAC,CAAC,CAAC,KACzD,IAAIX,OAAO,CAACa,OAAO,KAAK,QAAQ,EACnCH,OAAO,GAAGE,oBAAa,CAACD,CAAC,GAAG,CAAC,CAAC,CAAC,KAC5BD,OAAO,GAAGE,oBAAa,CAACD,CAAC,CAAC;cACjC,CAAC,MAAM,IAAIA,CAAC,GAAG,CAAC,GAAGC,oBAAa,CAACV,MAAM,EAAE;gBACvC,IAAIF,OAAO,CAACa,OAAO,KAAK,KAAK,EAAEH,OAAO,GAAGE,oBAAa,CAACD,CAAC,GAAG,CAAC,CAAC,CAAC,KACzDD,OAAO,GAAGE,oBAAa,CAACD,CAAC,CAAC;cACjC,CAAC,MAAMD,OAAO,GAAGE,oBAAa,CAACD,CAAC,CAAC;cACjC;YACF;;YAEA;YACA;YACE;YACAF,YAAY,CAACC,OAAO,IAAIE,oBAAa,CAACA,oBAAa,CAACV,MAAM,GAAG,CAAC,CAAC,EAC/D;cACAQ,OAAO,GAAGE,oBAAa,CAACA,oBAAa,CAACV,MAAM,GAAG,CAAC,CAAC;cACjD;YACF;UACF;QACF;QAEA,OAAOP,WAAW,CAACmB,cAAc,CAACf,GAAG,EAAE;UACrCW,OAAO;UACPG,OAAO,EAAEb,OAAO,CAACa;QACnB,CAAC,CAAC;MACJ;IACF,CAAC,CAAC,OAAOE,KAAU,EAAE;MACnB,MAAMA,KAAK,CAACP,OAAO;IACrB;EACF;AACF,CAAC;AAAC,IAAAQ,QAAA,GAEanB,KAAK;AAAAoB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -4,17 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
var _reactNative = require("react-native");
|
|
9
|
-
|
|
7
|
+
var _Main = require("../Main");
|
|
10
8
|
const base64UrlRegex = /^data:image\/.*;(?:charset=.{3,5};)?base64,/;
|
|
11
|
-
const NativeImage =
|
|
9
|
+
const NativeImage = _Main.Compressor;
|
|
12
10
|
const Image = {
|
|
13
11
|
compress: (value, options) => {
|
|
14
12
|
if (!value) {
|
|
15
13
|
throw new Error('Compression value is empty, please provide a value for compression.');
|
|
16
14
|
}
|
|
17
|
-
|
|
18
15
|
const cleanData = value.replace(base64UrlRegex, '');
|
|
19
16
|
return NativeImage.image_compress(cleanData, options);
|
|
20
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"names":["_Main","require","base64UrlRegex","NativeImage","Compressor","Image","compress","value","options","Error","cleanData","replace","image_compress","_default","exports","default"],"sourceRoot":"../../../src","sources":["Image/index.tsx"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,MAAMC,cAAc,GAAG,6CAA6C;AAyCpE,MAAMC,WAAW,GAAGC,gBAAU;AAM9B,MAAMC,KAAgB,GAAG;EACvBC,QAAQ,EAAEA,CAACC,KAAK,EAAEC,OAAO,KAAK;IAC5B,IAAI,CAACD,KAAK,EAAE;MACV,MAAM,IAAIE,KAAK,CACb,qEACF,CAAC;IACH;IACA,MAAMC,SAAS,GAAGH,KAAK,CAACI,OAAO,CAACT,cAAc,EAAE,EAAE,CAAC;IACnD,OAAOC,WAAW,CAACS,cAAc,CAACF,SAAS,EAAEF,OAAO,CAAC;EACvD;AACF,CAAC;AAAC,IAAAK,QAAA,GAEaR,KAAK;AAAAS,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|