react-native-compressor 0.5.9 → 0.5.14

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.
Files changed (131) hide show
  1. package/android/.gradle/6.1.1/executionHistory/executionHistory.lock +0 -0
  2. package/android/.gradle/6.1.1/fileHashes/fileHashes.lock +0 -0
  3. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  5. package/android/.gradle/{6.1.1 → 6.9}/fileHashes/fileHashes.bin +0 -0
  6. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  7. package/android/.gradle/6.9/gc.properties +0 -0
  8. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  9. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  10. package/android/.gradle/checksums/checksums.lock +0 -0
  11. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  12. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  13. package/android/.idea/jarRepositories.xml +10 -0
  14. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +13 -0
  15. package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml +4 -0
  16. package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml +3 -0
  17. package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +3 -0
  18. package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +16 -0
  19. package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml +4 -0
  20. package/android/.idea/libraries/Gradle__androidx_core_core_1_1_0_aar.xml +16 -0
  21. package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +3 -0
  22. package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +3 -0
  23. package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +3 -0
  24. package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +4 -0
  25. package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml +4 -0
  26. package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +3 -0
  27. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +3 -0
  28. package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +3 -0
  29. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +3 -0
  30. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml +3 -0
  31. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml +3 -0
  32. package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml +3 -0
  33. package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +3 -0
  34. package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +3 -0
  35. package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +4 -0
  36. package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +3 -0
  37. package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +4 -0
  38. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml +3 -0
  39. package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml +3 -0
  40. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +13 -0
  41. package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +3 -0
  42. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +13 -0
  43. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +15 -0
  44. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +18 -0
  45. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +18 -0
  46. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +18 -0
  47. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +18 -0
  48. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +15 -0
  49. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +15 -0
  50. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +15 -0
  51. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +15 -0
  52. package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +15 -0
  53. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +15 -0
  54. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +15 -0
  55. package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +15 -0
  56. package/android/.idea/libraries/{Gradle__com_facebook_infer_annotation_infer_annotation_0_11_2.xml → Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml} +4 -4
  57. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_66_1_aar.xml +14 -0
  58. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_1.xml +13 -0
  59. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_1.xml +13 -0
  60. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_1_aar.xml +15 -0
  61. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +13 -0
  62. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_1.xml +13 -0
  63. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_1.xml +13 -0
  64. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +13 -0
  65. package/android/.idea/libraries/Gradle__io_github_lizhangqu_coreprogress_1_0_2_aar.xml +5 -2
  66. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +13 -0
  67. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_10.xml +13 -0
  68. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_10.xml +13 -0
  69. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_10.xml +13 -0
  70. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_10.xml +13 -0
  71. package/android/.idea/modules/android.iml +34 -26
  72. package/android/build.gradle +43 -44
  73. package/android/src/main/java/com/reactnativecompressor/.DS_Store +0 -0
  74. package/android/src/main/java/com/reactnativecompressor/Audio/AudioCompressor.java +3 -4
  75. package/android/src/main/java/com/reactnativecompressor/CompressorModule.java +1 -33
  76. package/android/src/main/java/com/reactnativecompressor/Utils/Utils.java +74 -0
  77. package/android/src/main/java/com/reactnativecompressor/Video/AutoVideoCompression/AutoVideoCompression.java +24 -58
  78. package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressorHelper.java +6 -42
  79. package/android/src/main/java/com/reactnativecompressor/Video/VideoModule.java +19 -17
  80. package/ios/Compressor.m +2 -1
  81. package/ios/Video/VideoCompressor.swift +32 -25
  82. package/lib/commonjs/Audio/index.js +3 -1
  83. package/lib/commonjs/Audio/index.js.map +1 -1
  84. package/lib/commonjs/Video/index.js +47 -34
  85. package/lib/commonjs/Video/index.js.map +1 -1
  86. package/lib/commonjs/index.js +17 -10
  87. package/lib/commonjs/index.js.map +1 -1
  88. package/lib/commonjs/utils/index.js +15 -2
  89. package/lib/commonjs/utils/index.js.map +1 -1
  90. package/lib/module/Audio/index.js +3 -1
  91. package/lib/module/Audio/index.js.map +1 -1
  92. package/lib/module/Video/index.js +39 -31
  93. package/lib/module/Video/index.js.map +1 -1
  94. package/lib/module/index.js +5 -4
  95. package/lib/module/index.js.map +1 -1
  96. package/lib/module/utils/index.js +11 -1
  97. package/lib/module/utils/index.js.map +1 -1
  98. package/lib/typescript/Video/index.d.ts +4 -1
  99. package/lib/typescript/index.d.ts +3 -2
  100. package/lib/typescript/utils/index.d.ts +1 -0
  101. package/package.json +2 -7
  102. package/react-native-compressor.podspec +1 -1
  103. package/src/Audio/index.tsx +1 -1
  104. package/src/Video/index.tsx +49 -38
  105. package/src/index.tsx +3 -1
  106. package/src/utils/index.tsx +17 -0
  107. package/android/.gradle/6.1.1/executionHistory/executionHistory.bin +0 -0
  108. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  109. package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0.xml +0 -13
  110. package/android/.idea/libraries/Gradle__androidx_core_core_1_0_1_aar.xml +0 -20
  111. package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml +0 -16
  112. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_0_3.xml +0 -13
  113. package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_0_0_aar.xml +0 -18
  114. package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_0_0_aar.xml +0 -22
  115. package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_0_0_aar.xml +0 -22
  116. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_0_0_aar.xml +0 -22
  117. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_0_0_aar.xml +0 -22
  118. package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_0_0_aar.xml +0 -18
  119. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_0_0_aar.xml +0 -18
  120. package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_0_0_aar.xml +0 -18
  121. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_63_4_aar.xml +0 -22
  122. package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_9_0.xml +0 -13
  123. package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_9_0.xml +0 -13
  124. package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_9_0_aar.xml +0 -18
  125. package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_14_1.xml +0 -13
  126. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_12.xml +0 -13
  127. package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_3_12_12.xml +0 -13
  128. package/android/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml +0 -13
  129. package/android/.idea/libraries/Gradle__com_zolad_videoslimmer_1_0_0_aar.xml +0 -15
  130. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_0.xml +0 -13
  131. package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_0.xml +0 -13
@@ -14,9 +14,7 @@ import android.os.Build;
14
14
 
15
15
  import androidx.annotation.RequiresApi;
16
16
 
17
- import com.zolad.videoslimmer.VideoSlimmer;
18
- import com.zolad.videoslimmer.listner.SlimProgressListener;
19
- import com.zolad.videoslimmer.muxer.CodecInputSurface;
17
+ import numan.dev.videocompressor.codecinputsurface.CodecInputSurface;
20
18
 
21
19
  import java.io.File;
22
20
  import java.io.IOException;
@@ -46,7 +44,7 @@ public class AudioCompressor {
46
44
  * */
47
45
  @SuppressLint("LongLogTag")
48
46
  @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
49
- public boolean CompressAudio(final String sourcePath, String destinationPath, int nbitrate, VideoSlimmer.ProgressListener listener) {
47
+ public boolean CompressAudio(final String sourcePath, String destinationPath, int nbitrate) {
50
48
 
51
49
  this.path = sourcePath;
52
50
  this.outputPath = destinationPath;
@@ -350,6 +348,7 @@ public class AudioCompressor {
350
348
  }
351
349
 
352
350
 
351
+ @SuppressLint("WrongConstant")
353
352
  @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
354
353
  private long simpleReadAndWriteTrack(MediaExtractor extractor, MediaMuxer mediaMuxer, MediaCodec.BufferInfo info, long start, long end, File file, boolean isAudio) throws Exception {
355
354
  int trackIndex = selectTrack(extractor, isAudio);
@@ -1,6 +1,5 @@
1
1
  package com.reactnativecompressor;
2
2
 
3
- import android.graphics.Bitmap;
4
3
  import android.media.MediaMetadataRetriever;
5
4
  import android.net.Uri;
6
5
  import android.os.Build;
@@ -10,7 +9,6 @@ import androidx.annotation.NonNull;
10
9
  import androidx.annotation.Nullable;
11
10
  import androidx.annotation.RequiresApi;
12
11
 
13
- import com.facebook.react.bridge.Arguments;
14
12
  import com.facebook.react.bridge.Promise;
15
13
  import com.facebook.react.bridge.ReactApplicationContext;
16
14
  import com.facebook.react.bridge.ReactContext;
@@ -23,10 +21,8 @@ import com.facebook.react.modules.core.DeviceEventManagerModule;
23
21
  import com.reactnativecompressor.Image.ImageCompressor;
24
22
  import com.reactnativecompressor.Image.utils.ImageCompressorOptions;
25
23
  import com.reactnativecompressor.Video.VideoCompressorHelper;
26
- import com.zolad.videoslimmer.VideoSlimmer;
27
24
 
28
25
  import static com.reactnativecompressor.Utils.Utils.generateCacheFilePath;
29
- import java.io.ByteArrayOutputStream;
30
26
  import com.reactnativecompressor.Audio.AudioCompressor;
31
27
 
32
28
  @ReactModule(name = CompressorModule.NAME)
@@ -93,35 +89,7 @@ public class CompressorModule extends ReactContextBaseJavaModule {
93
89
 
94
90
  float bitrate = options.bitrate;
95
91
  Log.d("nomi onStart", destinationPath+"onProgress: "+bitrate);
96
- new AudioCompressor().CompressAudio(srcPath, destinationPath, (int) bitrate*1000, new VideoSlimmer.ProgressListener() {
97
-
98
-
99
- @Override
100
- public void onStart() {
101
- //convert start
102
- Log.d("nomi onStart", "onProgress: ");
103
-
104
- }
105
-
106
- @Override
107
- public void onFinish(boolean result) {
108
- //convert finish,result(true is success,false is fail)
109
- promise.resolve(destinationPath);
110
- Log.d("nomi onFinish", "onProgress: ");
111
- }
112
-
113
-
114
- @Override
115
- public void onProgress(float percent) {
116
- WritableMap params = Arguments.createMap();
117
- WritableMap data = Arguments.createMap();
118
- params.putString("uuid", options.uuid);
119
- data.putDouble("progress", percent/100);
120
- params.putMap("data", data);
121
- Log.d("nomi onProgress", "onProgress: "+percent);
122
- sendEvent(reactContext, "videoCompressProgress", params);
123
- }
124
- });
92
+ new AudioCompressor().CompressAudio(srcPath, destinationPath, (int) bitrate*1000);
125
93
 
126
94
  } catch (Exception ex) {
127
95
  promise.reject(ex);
@@ -1,15 +1,89 @@
1
1
  package com.reactnativecompressor.Utils;
2
2
 
3
+ import androidx.annotation.Nullable;
4
+
5
+ import com.facebook.react.bridge.Arguments;
6
+ import com.facebook.react.bridge.Promise;
3
7
  import com.facebook.react.bridge.ReactApplicationContext;
8
+ import com.facebook.react.bridge.ReactContext;
9
+ import com.facebook.react.bridge.WritableMap;
10
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
11
+ import numan.dev.videocompressor.VideoCompressTask;
12
+ import numan.dev.videocompressor.VideoCompressor;
4
13
 
5
14
  import java.io.File;
15
+ import java.util.HashMap;
16
+ import java.util.Map;
6
17
  import java.util.UUID;
7
18
 
8
19
  public class Utils {
20
+ static int videoCompressionThreshold=10;
21
+ static Map<String, VideoCompressTask> compressorExports = new HashMap<>();
22
+
9
23
  public static String generateCacheFilePath(String extension, ReactApplicationContext reactContext){
10
24
  File outputDir = reactContext.getCacheDir();
11
25
 
12
26
  String outputUri = String.format("%s/%s." + extension, outputDir.getPath(), UUID.randomUUID().toString());
13
27
  return outputUri;
14
28
  }
29
+
30
+
31
+ public static void compressVideo(String srcPath, String destinationPath, int resultWidth, int resultHeight, float videoBitRate, String uuid, Promise promise, ReactApplicationContext reactContext){
32
+ final int[] currentVideoCompression = {0};
33
+ try{
34
+ VideoCompressTask export=VideoCompressor.convertVideo(srcPath, destinationPath, resultWidth, resultHeight, (int) videoBitRate, new VideoCompressor.ProgressListener() {
35
+ @Override
36
+ public void onStart() {
37
+ //convert start
38
+ }
39
+ @Override
40
+ public void onFinish(boolean result) {
41
+ //convert finish,result(true is success,false is fail)
42
+ promise.resolve("file:/"+destinationPath);
43
+ }
44
+
45
+ @Override
46
+ public void onError(String errorMessage) {
47
+ promise.reject("Compression has canncelled");
48
+ }
49
+
50
+ @Override
51
+ public void onProgress(float percent) {
52
+ int roundProgress=Math.round(percent);
53
+ if(roundProgress%videoCompressionThreshold==0&&roundProgress> currentVideoCompression[0]) {
54
+ WritableMap params = Arguments.createMap();
55
+ WritableMap data = Arguments.createMap();
56
+ params.putString("uuid", uuid);
57
+ data.putDouble("progress", percent / 100);
58
+ params.putMap("data", data);
59
+ sendEvent(reactContext, "videoCompressProgress", params);
60
+ currentVideoCompression[0] =roundProgress;
61
+ }
62
+ }
63
+ });
64
+ compressorExports.put(uuid, export);
65
+ } catch (Exception ex) {
66
+ promise.reject(ex);
67
+ }
68
+ finally {
69
+ currentVideoCompression[0] =0;
70
+ }
71
+ }
72
+
73
+ public static void cancelCompressionHelper(String uuid){
74
+ try{
75
+ VideoCompressTask export=compressorExports.get(uuid);
76
+ export.cancel(true);
77
+ }
78
+ catch (Exception ex) {
79
+ }
80
+ }
81
+
82
+ private static void sendEvent(ReactContext reactContext,
83
+ String eventName,
84
+ @Nullable WritableMap params) {
85
+ reactContext
86
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
87
+ .emit(eventName, params);
88
+ }
15
89
  }
@@ -1,94 +1,60 @@
1
1
  package com.reactnativecompressor.Video.AutoVideoCompression;
2
2
 
3
- import android.media.MediaCodecInfo;
4
3
  import android.media.MediaMetadataRetriever;
5
- import android.media.session.MediaController;
6
4
  import android.net.Uri;
7
- import android.os.Build;
8
5
 
9
6
  import androidx.annotation.Nullable;
10
7
 
11
- import com.facebook.react.bridge.Arguments;
12
8
  import com.facebook.react.bridge.Promise;
13
9
  import com.facebook.react.bridge.ReactApplicationContext;
14
10
  import com.facebook.react.bridge.ReactContext;
15
11
  import com.facebook.react.bridge.WritableMap;
16
12
  import com.facebook.react.modules.core.DeviceEventManagerModule;
17
13
  import com.reactnativecompressor.Video.VideoCompressorHelper;
18
- import com.zolad.videoslimmer.VideoSlimmer;
14
+ import static com.reactnativecompressor.Utils.Utils.compressVideo;
19
15
 
20
16
  import java.io.File;
21
17
 
22
18
  import static com.reactnativecompressor.Utils.Utils.generateCacheFilePath;
23
19
 
24
20
  public class AutoVideoCompression {
25
- static int videoCompressionThreshold=10;
26
- static int currentVideoCompression=0;
27
-
28
21
  public static void createCompressionSettings(String fileUrl,VideoCompressorHelper options,Promise promise, ReactApplicationContext reactContext) {
29
22
  float maxSize = options.maxSize;
30
23
  float minimumFileSizeForCompress=options.minimumFileSizeForCompress;
31
24
  try{
32
- Uri uri= Uri.parse(fileUrl);
33
- String srcPath = uri.getPath();
34
- MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
35
- metaRetriever.setDataSource(srcPath);
36
- File file=new File(srcPath);
37
- float sizeInBytes = file.length();
38
- float sizeInMb = sizeInBytes / (1024 * 1024);
39
- if(sizeInMb>minimumFileSizeForCompress)
40
- {
41
- String destinationPath = generateCacheFilePath("mp4", reactContext);
42
- int actualHeight =Integer.parseInt(metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
43
- int actualWidth = Integer.parseInt(metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
44
- int bitrate = Integer.parseInt(metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE));
45
-
46
- float scale = actualWidth > actualHeight ? maxSize / actualWidth : maxSize / actualHeight;
47
- int resultWidth = Math.round(actualWidth * scale / 2) * 2;
48
- int resultHeight = Math.round(actualHeight * scale / 2) * 2;
49
-
50
- float videoBitRate = makeVideoBitrate(
51
- actualHeight, actualWidth,
52
- bitrate,
53
- resultHeight, resultWidth
54
- );
25
+ Uri uri= Uri.parse(fileUrl);
26
+ String srcPath = uri.getPath();
27
+ MediaMetadataRetriever metaRetriever = new MediaMetadataRetriever();
28
+ metaRetriever.setDataSource(srcPath);
29
+ File file=new File(srcPath);
30
+ float sizeInBytes = file.length();
31
+ float sizeInMb = sizeInBytes / (1024 * 1024);
32
+ if(sizeInMb>minimumFileSizeForCompress)
33
+ {
34
+ String destinationPath = generateCacheFilePath("mp4", reactContext);
35
+ int actualHeight =Integer.parseInt(metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT));
36
+ int actualWidth = Integer.parseInt(metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH));
37
+ int bitrate = Integer.parseInt(metaRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_BITRATE));
55
38
 
56
- VideoSlimmer.convertVideo(srcPath, destinationPath, resultWidth, resultHeight, (int) videoBitRate, new VideoSlimmer.ProgressListener() {
57
- @Override
58
- public void onStart() {
59
- //convert start
60
- }
61
- @Override
62
- public void onFinish(boolean result) {
63
- //convert finish,result(true is success,false is fail)
64
- promise.resolve("file:/"+destinationPath);
65
- }
66
- @Override
67
- public void onProgress(float percent) {
68
- int roundProgress=Math.round(percent);
69
- if(roundProgress%videoCompressionThreshold==0&&roundProgress>currentVideoCompression) {
70
- WritableMap params = Arguments.createMap();
71
- WritableMap data = Arguments.createMap();
72
- params.putString("uuid", options.uuid);
73
- data.putDouble("progress", percent / 100);
74
- params.putMap("data", data);
75
- sendEvent(reactContext, "videoCompressProgress", params);
76
- currentVideoCompression=roundProgress;
77
- }
78
- }
79
- });
39
+ float scale = actualWidth > actualHeight ? maxSize / actualWidth : maxSize / actualHeight;
40
+ int resultWidth = Math.round(actualWidth * scale / 2) * 2;
41
+ int resultHeight = Math.round(actualHeight * scale / 2) * 2;
80
42
 
43
+ float videoBitRate = makeVideoBitrate(
44
+ actualHeight, actualWidth,
45
+ bitrate,
46
+ resultHeight, resultWidth
47
+ );
48
+ compressVideo(srcPath, destinationPath, resultWidth, resultHeight, videoBitRate,options.uuid,promise,reactContext);
81
49
  }
82
50
  else
83
51
  {
84
52
  promise.resolve(fileUrl);
85
53
  }
54
+
86
55
  } catch (Exception ex) {
87
56
  promise.reject(ex);
88
57
  }
89
- finally {
90
- currentVideoCompression=0;
91
- }
92
58
  }
93
59
 
94
60
  public static int makeVideoBitrate(int originalHeight, int originalWidth, int originalBitrate, int height, int width) {
@@ -8,7 +8,6 @@ import android.os.PowerManager;
8
8
 
9
9
  import androidx.annotation.Nullable;
10
10
 
11
- import com.facebook.react.bridge.Arguments;
12
11
  import com.facebook.react.bridge.LifecycleEventListener;
13
12
  import com.facebook.react.bridge.Promise;
14
13
  import com.facebook.react.bridge.ReactApplicationContext;
@@ -17,13 +16,12 @@ import com.facebook.react.bridge.ReadableMap;
17
16
  import com.facebook.react.bridge.ReadableMapKeySetIterator;
18
17
  import com.facebook.react.bridge.WritableMap;
19
18
  import com.facebook.react.modules.core.DeviceEventManagerModule;
20
- import com.reactnativecompressor.Image.utils.ImageCompressorOptions;
21
19
  import com.reactnativecompressor.Utils.FileUplaoder.FileUploader;
22
20
  import com.reactnativecompressor.Video.AutoVideoCompression.AutoVideoCompression;
23
- import com.zolad.videoslimmer.VideoSlimmer;
24
21
 
25
22
  import java.util.UUID;
26
23
 
24
+ import static com.reactnativecompressor.Utils.Utils.compressVideo;
27
25
  import static com.reactnativecompressor.Utils.Utils.generateCacheFilePath;
28
26
 
29
27
  public class VideoCompressorHelper {
@@ -50,8 +48,8 @@ public class VideoCompressorHelper {
50
48
  };
51
49
 
52
50
  private static void sendEventString(ReactContext reactContext,
53
- String eventName,
54
- @Nullable String params) {
51
+ String eventName,
52
+ @Nullable String params) {
55
53
  reactContext
56
54
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
57
55
  .emit(eventName, params);
@@ -118,7 +116,7 @@ public class VideoCompressorHelper {
118
116
  case "maxSize":
119
117
  options.maxSize = (float) map.getDouble(key);
120
118
  break;
121
- case "uuid":
119
+ case "uuid":
122
120
  options.uuid = map.getString(key);
123
121
  break;
124
122
  case "minimumFileSizeForCompress":
@@ -166,44 +164,10 @@ public class VideoCompressorHelper {
166
164
  }
167
165
  }
168
166
  float videoBitRate = (options.bitrate>0)?options.bitrate: (float) (height * width * 1.5);
169
-
170
- VideoSlimmer.convertVideo(srcPath, destinationPath, width, height, (int) videoBitRate, new VideoSlimmer.ProgressListener() {
171
-
172
-
173
- @Override
174
- public void onStart() {
175
- //convert start
176
-
177
- }
178
-
179
- @Override
180
- public void onFinish(boolean result) {
181
- //convert finish,result(true is success,false is fail)
182
- promise.resolve("file:/"+destinationPath);
183
- }
184
-
185
-
186
- @Override
187
- public void onProgress(float percent) {
188
- int roundProgress=Math.round(percent);
189
- if(roundProgress%videoCompressionThreshold==0&&roundProgress>currentVideoCompression) {
190
- WritableMap params = Arguments.createMap();
191
- WritableMap data = Arguments.createMap();
192
- params.putString("uuid", options.uuid);
193
- data.putDouble("progress", percent / 100);
194
- params.putMap("data", data);
195
- sendEvent(reactContext, "videoCompressProgress", params);
196
- currentVideoCompression=roundProgress;
197
- }
198
- }
199
- });
200
-
167
+ compressVideo(srcPath, destinationPath, width, height, videoBitRate,options.uuid,promise,reactContext);
201
168
  } catch (Exception ex) {
202
169
  promise.reject(ex);
203
170
  }
204
- finally {
205
- currentVideoCompression=0;
206
- }
207
171
  }
208
172
 
209
173
 
@@ -212,4 +176,4 @@ public class VideoCompressorHelper {
212
176
  }
213
177
 
214
178
 
215
- }
179
+ }
@@ -1,12 +1,10 @@
1
1
  package com.reactnativecompressor.Video;
2
2
 
3
- import android.media.MediaMetadataRetriever;
4
- import android.net.Uri;
3
+ import android.util.Log;
5
4
 
6
5
  import androidx.annotation.NonNull;
7
6
  import androidx.annotation.Nullable;
8
7
 
9
- import com.facebook.react.bridge.Arguments;
10
8
  import com.facebook.react.bridge.Promise;
11
9
  import com.facebook.react.bridge.ReactApplicationContext;
12
10
  import com.facebook.react.bridge.ReactContext;
@@ -16,16 +14,13 @@ import com.facebook.react.bridge.ReadableMap;
16
14
  import com.facebook.react.bridge.WritableMap;
17
15
  import com.facebook.react.module.annotations.ReactModule;
18
16
  import com.facebook.react.modules.core.DeviceEventManagerModule;
19
- import com.reactnativecompressor.Image.utils.ImageCompressorOptions;
20
- import com.zolad.videoslimmer.VideoSlimmer;
21
17
 
22
- import static com.reactnativecompressor.Utils.Utils.generateCacheFilePath;
23
18
  import static com.reactnativecompressor.Video.VideoCompressorHelper.video_activateBackgroundTask_helper;
24
19
  import static com.reactnativecompressor.Video.VideoCompressorHelper.video_deactivateBackgroundTask_helper;
25
20
  import static com.reactnativecompressor.Video.VideoCompressorHelper.video_upload_helper;
26
-
21
+ import static com.reactnativecompressor.Utils.Utils.cancelCompressionHelper;
27
22
  @ReactModule(name = VideoModule.NAME)
28
- public class VideoModule extends ReactContextBaseJavaModule {
23
+ public class VideoModule extends ReactContextBaseJavaModule {
29
24
  public static final String NAME = "VideoCompressor";
30
25
  private final ReactApplicationContext reactContext;
31
26
  public VideoModule(ReactApplicationContext reactContext) {
@@ -53,18 +48,25 @@ public class VideoModule extends ReactContextBaseJavaModule {
53
48
  String fileUrl,
54
49
  ReadableMap optionMap,
55
50
  Promise promise) {
56
- final VideoCompressorHelper options = VideoCompressorHelper.fromMap(optionMap);
51
+ final VideoCompressorHelper options = VideoCompressorHelper.fromMap(optionMap);
52
+
53
+ if(options.compressionMethod==VideoCompressorHelper.CompressionMethod.auto)
54
+ {
55
+ VideoCompressorHelper.VideoCompressAuto(fileUrl,options,promise,reactContext);
56
+ }
57
+ else
58
+ {
59
+ VideoCompressorHelper.VideoCompressManual(fileUrl,options,promise,reactContext);
60
+ }
57
61
 
58
- if(options.compressionMethod==VideoCompressorHelper.CompressionMethod.auto)
59
- {
60
- VideoCompressorHelper.VideoCompressAuto(fileUrl,options,promise,reactContext);
61
- }
62
- else
63
- {
64
- VideoCompressorHelper.VideoCompressManual(fileUrl,options,promise,reactContext);
65
- }
66
62
 
63
+ }
67
64
 
65
+ @ReactMethod
66
+ public void cancelCompression(
67
+ String uuid) {
68
+ cancelCompressionHelper(uuid);
69
+ Log.d("cancelCompression", uuid);
68
70
  }
69
71
 
70
72
  @ReactMethod
package/ios/Compressor.m CHANGED
@@ -239,5 +239,6 @@ RCT_EXTERN_METHOD(deactivateBackgroundTask: (NSDictionary *)options
239
239
  withResolver:(RCTPromiseResolveBlock)resolve
240
240
  withRejecter:(RCTPromiseRejectBlock)reject)
241
241
 
242
- @end
242
+ RCT_EXTERN_METHOD(cancelCompression:(NSString *)uuid)
243
243
 
244
+ @end
@@ -34,8 +34,9 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
34
34
  var hasListener: Bool=false
35
35
  var uploadResolvers: [String: RCTPromiseResolveBlock] = [:]
36
36
  var uploadRejectors: [String: RCTPromiseRejectBlock] = [:]
37
+ var compressorExports: [String: NextLevelSessionExporter] = [:]
37
38
  let videoCompressionThreshold:Int=7
38
- var videoCompressionCounter:Int=0
39
+
39
40
 
40
41
  override static func requiresMainQueueSetup() -> Bool {
41
42
  return false
@@ -71,7 +72,7 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
71
72
  @objc(compress:withOptions:withResolver:withRejecter:)
72
73
  func compress(fileUrl: String, options: [String: Any], resolve:@escaping RCTPromiseResolveBlock, reject:@escaping RCTPromiseRejectBlock) -> Void {
73
74
  compressVideo(url: URL(string: fileUrl)!, options:options,
74
- onProgress: { progress in
75
+ onProgress: { progress in
75
76
  print("Progress", progress)
76
77
  if(self.hasListener){
77
78
  self.sendEvent(withName: "videoCompressProgress", body: ["uuid": options["uuid"], "data": ["progress": progress]])
@@ -83,6 +84,11 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
83
84
  })
84
85
  }
85
86
 
87
+ @objc(cancelCompression:)
88
+ func cancelCompression(uuid: String) -> Void {
89
+ compressorExports[uuid]?.cancelExport()
90
+ }
91
+
86
92
  func makeValidUri(filePath: String) -> String {
87
93
  let fileWithUrl = URL(fileURLWithPath: filePath)
88
94
  let absoluteUrl = fileWithUrl.deletingLastPathComponent()
@@ -219,7 +225,7 @@ func makeValidUri(filePath: String) -> String {
219
225
  }
220
226
  else
221
227
  {
222
- manualCompressionHelper(url: url, bitRate: options["bitrate"] as! Float?) { progress in
228
+ manualCompressionHelper(url: url, options:options) { progress in
223
229
  onProgress(progress)
224
230
  } onCompletion: { outputURL in
225
231
  onCompletion(outputURL)
@@ -247,7 +253,7 @@ func makeValidUri(filePath: String) -> String {
247
253
  let maxBitrate:Int = 1669000
248
254
  let minValue:Float=min(Float(originalHeight)/Float(height),Float(originalWidth)/Float(width))
249
255
  var remeasuredBitrate:Int = Int(Float(originalBitrate) / minValue)
250
- remeasuredBitrate = remeasuredBitrate*Int(compressFactor)
256
+ remeasuredBitrate = Int(Float(remeasuredBitrate)*compressFactor)
251
257
  let minBitrate:Int = self.getVideoBitrateWithFactor(f: minCompressFactor) / (1280 * 720 / (width * height))
252
258
  if (originalBitrate < minBitrate) {
253
259
  return remeasuredBitrate;
@@ -263,6 +269,7 @@ func makeValidUri(filePath: String) -> String {
263
269
 
264
270
  func autoCompressionHelper(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
265
271
  let maxSize:Float = options["maxSize"] as! Float;
272
+ let uuid:String = options["uuid"] as! String
266
273
 
267
274
  let asset = AVAsset(url: url)
268
275
  guard asset.tracks.count >= 1 else {
@@ -286,8 +293,8 @@ func makeValidUri(filePath: String) -> String {
286
293
  originalBitrate: Int(bitrate),
287
294
  height: Int(resultHeight), width: Int(resultWidth)
288
295
  );
289
-
290
- exportVideoHelper(url: url, asset: asset, bitRate: videoBitRate, resultWidth: resultWidth, resultHeight: resultHeight) { progress in
296
+
297
+ exportVideoHelper(url: url, asset: asset, bitRate: videoBitRate, resultWidth: resultWidth, resultHeight: resultHeight,uuid: uuid) { progress in
291
298
  onProgress(progress)
292
299
  } onCompletion: { outputURL in
293
300
  onCompletion(outputURL)
@@ -296,9 +303,9 @@ func makeValidUri(filePath: String) -> String {
296
303
  }
297
304
  }
298
305
 
299
- func manualCompressionHelper(url: URL, bitRate: Float?, onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
300
-
301
- var _bitRate=bitRate;
306
+ func manualCompressionHelper(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
307
+ let uuid:String = options["uuid"] as! String
308
+ var bitRate=options["bitrate"] as! Float?;
302
309
  let asset = AVAsset(url: url)
303
310
  guard asset.tracks.count >= 1 else {
304
311
  let error = CompressionError(message: "Invalid video URL, no track found")
@@ -321,12 +328,12 @@ func makeValidUri(filePath: String) -> String {
321
328
  }
322
329
  else
323
330
  {
324
- _bitRate=bitRate ?? Float(abs(track.estimatedDataRate))*0.8
331
+ bitRate=bitRate ?? Float(abs(track.estimatedDataRate))*0.8
325
332
  }
326
333
 
327
- let videoBitRate = _bitRate ?? height*width*1.5
334
+ let videoBitRate = bitRate ?? height*width*1.5
328
335
 
329
- exportVideoHelper(url: url, asset: asset, bitRate: Int(videoBitRate), resultWidth: width, resultHeight: height) { progress in
336
+ exportVideoHelper(url: url, asset: asset, bitRate: Int(videoBitRate), resultWidth: width, resultHeight: height,uuid: uuid) { progress in
330
337
  onProgress(progress)
331
338
  } onCompletion: { outputURL in
332
339
  onCompletion(outputURL)
@@ -335,7 +342,8 @@ func makeValidUri(filePath: String) -> String {
335
342
  }
336
343
  }
337
344
 
338
- func exportVideoHelper(url: URL,asset: AVAsset, bitRate: Int,resultWidth:Float,resultHeight:Float, onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
345
+ func exportVideoHelper(url: URL,asset: AVAsset, bitRate: Int,resultWidth:Float,resultHeight:Float,uuid:String, onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
346
+ var videoCompressionCounter:Int=0
339
347
  var tmpURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
340
348
  .appendingPathComponent(ProcessInfo().globallyUniqueString)
341
349
  .appendingPathExtension("mp4")
@@ -364,31 +372,28 @@ func makeValidUri(filePath: String) -> String {
364
372
  AVSampleRateKey: NSNumber(value: Float(44100))
365
373
  ]
366
374
 
367
-
375
+ compressorExports[uuid] = exporter
368
376
  exporter.export(progressHandler: { (progress) in
369
377
  let _progress:Float=progress*100;
370
- if(Int(_progress)==self.videoCompressionCounter)
378
+ if(Int(_progress)==videoCompressionCounter)
371
379
  {
372
- self.videoCompressionCounter=Int(_progress)+self.videoCompressionThreshold
380
+ videoCompressionCounter=Int(_progress)+self.videoCompressionThreshold
373
381
  onProgress(progress)
374
382
  }
375
383
 
376
384
  }, completionHandler: { result in
377
- self.videoCompressionCounter=0;
378
- switch result {
379
- case .success(let status):
380
- switch status {
385
+ videoCompressionCounter=0;
386
+ switch exporter.status {
381
387
  case .completed:
382
388
  onCompletion(exporter.outputURL!)
383
389
  break
390
+ case .cancelled:
391
+ let error = CompressionError(message: "Compression has canncelled")
392
+ onFailure(error)
393
+ break
384
394
  default:
385
395
  onCompletion(url)
386
396
  break
387
- }
388
- break
389
- case .failure(let error):
390
- onCompletion(url)
391
- break
392
397
  }
393
398
  })
394
399
  }
@@ -406,4 +411,6 @@ func makeValidUri(filePath: String) -> String {
406
411
  let track = asset.tracks[videoTrackIndex];
407
412
  return track;
408
413
  }
414
+
415
+
409
416
  }
@@ -11,7 +11,9 @@ var _utils = require("../utils");
11
11
 
12
12
  const NativeAudio = _reactNative.NativeModules.Compressor;
13
13
  const Audio = {
14
- compress: async (url, options = _utils.DEFAULT_COMPRESS_AUDIO_OPTIONS) => {
14
+ compress: async function (url) {
15
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _utils.DEFAULT_COMPRESS_AUDIO_OPTIONS;
16
+
15
17
  try {
16
18
  const checkUrlAndOptionsResult = await (0, _utils.checkUrlAndOptions)(url, options);
17
19
 
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["NativeAudio","NativeModules","Compressor","Audio","compress","url","options","DEFAULT_COMPRESS_AUDIO_OPTIONS","checkUrlAndOptionsResult","isCorrect","message","mediaDetails","bitrate","i","AUDIO_BITRATE","length","quality","compress_audio","error"],"mappings":";;;;;;;AAAA;;AACA;;AAOA,MAAMA,WAAW,GAAGC,2BAAcC,UAAlC;AAEA,MAAMC,KAAgB,GAAG;AACvBC,EAAAA,QAAQ,EAAE,OAAOC,GAAP,EAAYC,OAAO,GAAGC,qCAAtB,KAAyD;AACjE,QAAI;AACF,YAAMC,wBAA2C,GAC/C,MAAM,+BAAmBH,GAAnB,EAAwBC,OAAxB,CADR;;AAEA,UAAI,CAACE,wBAAwB,CAACC,SAA9B,EAAyC;AACvC,cAAMD,wBAAwB,CAACE,OAA/B;AACD,OAFD,MAEO;AACL;AAEA;AACA;AACA,cAAMC,YAAiB,GAAG;AACxBC,UAAAA,OAAO,EAAE;AADe,SAA1B,CALK,CASL;;AACA,YAAIA,OAAY,GAAGL,sCAA+BK,OAAlD;;AAEA,YAAID,YAAY,IAAIA,YAAY,CAACC,OAAjC,EAA0C;AACxC;AACA,eAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,qBAAcC,MAAlC,EAA0CF,CAAC,EAA3C,EAA+C;AAC7C;AACA,gBAAIF,YAAY,CAACC,OAAb,GAAuBE,qBAAcD,CAAd,CAA3B,EAA6C;AAC3C,kBAAIA,CAAC,GAAG,CAAJ,GAAQC,qBAAcC,MAA1B,EAAkC;AAChC,oBAAIT,OAAO,CAACU,OAAR,KAAoB,KAAxB,EAA+BJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CAA/B,KACK,IAAIP,OAAO,CAACU,OAAR,KAAoB,QAAxB,EACHJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CADG,KAEAD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;AACN,eALD,MAKO,IAAIA,CAAC,GAAG,CAAJ,GAAQC,qBAAcC,MAA1B,EAAkC;AACvC,oBAAIT,OAAO,CAACU,OAAR,KAAoB,KAAxB,EAA+BJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CAA/B,KACKD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;AACN,eAHM,MAGAD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;;AACP;AACD,aAb4C,CAe7C;;;AACA,gBACEF,YAAY,CAACC,OAAb,IAAwBE,qBAAcA,qBAAcC,MAAd,GAAuB,CAArC,CAD1B,EAEE;AACAH,cAAAA,OAAO,GAAGE,qBAAcA,qBAAcC,MAAd,GAAuB,CAArC,CAAV;AACA;AACD;AACF;AACF;;AAED,eAAOf,WAAW,CAACiB,cAAZ,CAA2BZ,GAA3B,EAAgC;AACrCO,UAAAA,OADqC;AAErCI,UAAAA,OAAO,EAAEV,OAAO,CAACU;AAFoB,SAAhC,CAAP;AAID;AACF,KAjDD,CAiDE,OAAOE,KAAP,EAAc;AACd,YAAMA,KAAK,CAACR,OAAZ;AACD;AACF;AAtDsB,CAAzB;eAyDeP,K","sourcesContent":["import { NativeModules } from 'react-native';\nimport {\n AUDIO_BITRATE,\n AudioType,\n DEFAULT_COMPRESS_AUDIO_OPTIONS,\n defaultResultType,\n checkUrlAndOptions,\n} from '../utils';\nconst NativeAudio = NativeModules.Compressor;\n\nconst Audio: AudioType = {\n compress: async (url, options = DEFAULT_COMPRESS_AUDIO_OPTIONS) => {\n try {\n const checkUrlAndOptionsResult: defaultResultType =\n await checkUrlAndOptions(url, options);\n if (!checkUrlAndOptionsResult.isCorrect) {\n throw checkUrlAndOptionsResult.message;\n } else {\n // Get resulting output file path\n\n // Get media details\n // const mediaDetails: any = await getDetails(url).catch(() => null);\n const mediaDetails: any = {\n bitrate: 0,\n };\n\n // Initialize bitrate\n let bitrate: any = DEFAULT_COMPRESS_AUDIO_OPTIONS.bitrate;\n\n if (mediaDetails && mediaDetails.bitrate) {\n // Check and return the appropriate bitrate according to quality expected\n for (let i = 0; i < AUDIO_BITRATE.length; i++) {\n // Check a particular bitrate to return its nearest lower according to quality\n if (mediaDetails.bitrate > AUDIO_BITRATE[i]) {\n if (i + 2 < AUDIO_BITRATE.length) {\n if (options.quality === 'low') bitrate = AUDIO_BITRATE[i + 2];\n else if (options.quality === 'medium')\n bitrate = AUDIO_BITRATE[i + 1];\n else bitrate = AUDIO_BITRATE[i];\n } else if (i + 1 < AUDIO_BITRATE.length) {\n if (options.quality === 'low') bitrate = AUDIO_BITRATE[i + 1];\n else bitrate = AUDIO_BITRATE[i];\n } else bitrate = AUDIO_BITRATE[i];\n break;\n }\n\n // Check if the matching bitrate is the last in the array\n if (\n mediaDetails.bitrate <= AUDIO_BITRATE[AUDIO_BITRATE.length - 1]\n ) {\n bitrate = AUDIO_BITRATE[AUDIO_BITRATE.length - 1];\n break;\n }\n }\n }\n\n return NativeAudio.compress_audio(url, {\n bitrate,\n quality: options.quality,\n });\n }\n } catch (error) {\n throw error.message;\n }\n },\n};\n\nexport default Audio;\n"]}
1
+ {"version":3,"sources":["index.tsx"],"names":["NativeAudio","NativeModules","Compressor","Audio","compress","url","options","DEFAULT_COMPRESS_AUDIO_OPTIONS","checkUrlAndOptionsResult","isCorrect","message","mediaDetails","bitrate","i","AUDIO_BITRATE","length","quality","compress_audio","error"],"mappings":";;;;;;;AAAA;;AACA;;AAOA,MAAMA,WAAW,GAAGC,2BAAcC,UAAlC;AAEA,MAAMC,KAAgB,GAAG;AACvBC,EAAAA,QAAQ,EAAE,gBAAOC,GAAP,EAAyD;AAAA,QAA7CC,OAA6C,uEAAnCC,qCAAmC;;AACjE,QAAI;AACF,YAAMC,wBAA2C,GAC/C,MAAM,+BAAmBH,GAAnB,EAAwBC,OAAxB,CADR;;AAEA,UAAI,CAACE,wBAAwB,CAACC,SAA9B,EAAyC;AACvC,cAAMD,wBAAwB,CAACE,OAA/B;AACD,OAFD,MAEO;AACL;AAEA;AACA;AACA,cAAMC,YAAiB,GAAG;AACxBC,UAAAA,OAAO,EAAE;AADe,SAA1B,CALK,CASL;;AACA,YAAIA,OAAY,GAAGL,sCAA+BK,OAAlD;;AAEA,YAAID,YAAY,IAAIA,YAAY,CAACC,OAAjC,EAA0C;AACxC;AACA,eAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGC,qBAAcC,MAAlC,EAA0CF,CAAC,EAA3C,EAA+C;AAC7C;AACA,gBAAIF,YAAY,CAACC,OAAb,GAAuBE,qBAAcD,CAAd,CAA3B,EAA6C;AAC3C,kBAAIA,CAAC,GAAG,CAAJ,GAAQC,qBAAcC,MAA1B,EAAkC;AAChC,oBAAIT,OAAO,CAACU,OAAR,KAAoB,KAAxB,EAA+BJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CAA/B,KACK,IAAIP,OAAO,CAACU,OAAR,KAAoB,QAAxB,EACHJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CADG,KAEAD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;AACN,eALD,MAKO,IAAIA,CAAC,GAAG,CAAJ,GAAQC,qBAAcC,MAA1B,EAAkC;AACvC,oBAAIT,OAAO,CAACU,OAAR,KAAoB,KAAxB,EAA+BJ,OAAO,GAAGE,qBAAcD,CAAC,GAAG,CAAlB,CAAV,CAA/B,KACKD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;AACN,eAHM,MAGAD,OAAO,GAAGE,qBAAcD,CAAd,CAAV;;AACP;AACD,aAb4C,CAe7C;;;AACA,gBACEF,YAAY,CAACC,OAAb,IAAwBE,qBAAcA,qBAAcC,MAAd,GAAuB,CAArC,CAD1B,EAEE;AACAH,cAAAA,OAAO,GAAGE,qBAAcA,qBAAcC,MAAd,GAAuB,CAArC,CAAV;AACA;AACD;AACF;AACF;;AAED,eAAOf,WAAW,CAACiB,cAAZ,CAA2BZ,GAA3B,EAAgC;AACrCO,UAAAA,OADqC;AAErCI,UAAAA,OAAO,EAAEV,OAAO,CAACU;AAFoB,SAAhC,CAAP;AAID;AACF,KAjDD,CAiDE,OAAOE,KAAP,EAAmB;AACnB,YAAMA,KAAK,CAACR,OAAZ;AACD;AACF;AAtDsB,CAAzB;eAyDeP,K","sourcesContent":["import { NativeModules } from 'react-native';\nimport {\n AUDIO_BITRATE,\n AudioType,\n DEFAULT_COMPRESS_AUDIO_OPTIONS,\n defaultResultType,\n checkUrlAndOptions,\n} from '../utils';\nconst NativeAudio = NativeModules.Compressor;\n\nconst Audio: AudioType = {\n compress: async (url, options = DEFAULT_COMPRESS_AUDIO_OPTIONS) => {\n try {\n const checkUrlAndOptionsResult: defaultResultType =\n await checkUrlAndOptions(url, options);\n if (!checkUrlAndOptionsResult.isCorrect) {\n throw checkUrlAndOptionsResult.message;\n } else {\n // Get resulting output file path\n\n // Get media details\n // const mediaDetails: any = await getDetails(url).catch(() => null);\n const mediaDetails: any = {\n bitrate: 0,\n };\n\n // Initialize bitrate\n let bitrate: any = DEFAULT_COMPRESS_AUDIO_OPTIONS.bitrate;\n\n if (mediaDetails && mediaDetails.bitrate) {\n // Check and return the appropriate bitrate according to quality expected\n for (let i = 0; i < AUDIO_BITRATE.length; i++) {\n // Check a particular bitrate to return its nearest lower according to quality\n if (mediaDetails.bitrate > AUDIO_BITRATE[i]) {\n if (i + 2 < AUDIO_BITRATE.length) {\n if (options.quality === 'low') bitrate = AUDIO_BITRATE[i + 2];\n else if (options.quality === 'medium')\n bitrate = AUDIO_BITRATE[i + 1];\n else bitrate = AUDIO_BITRATE[i];\n } else if (i + 1 < AUDIO_BITRATE.length) {\n if (options.quality === 'low') bitrate = AUDIO_BITRATE[i + 1];\n else bitrate = AUDIO_BITRATE[i];\n } else bitrate = AUDIO_BITRATE[i];\n break;\n }\n\n // Check if the matching bitrate is the last in the array\n if (\n mediaDetails.bitrate <= AUDIO_BITRATE[AUDIO_BITRATE.length - 1]\n ) {\n bitrate = AUDIO_BITRATE[AUDIO_BITRATE.length - 1];\n break;\n }\n }\n }\n\n return NativeAudio.compress_audio(url, {\n bitrate,\n quality: options.quality,\n });\n }\n } catch (error: any) {\n throw error.message;\n }\n },\n};\n\nexport default Audio;\n"]}