react-native-compressor 0.5.8 → 0.5.13
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/README.md +19 -2
- package/android/.gradle/6.1.1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/6.1.1/fileHashes/fileHashes.lock +0 -0
- 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.1.1 → 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 +1 -1
- 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/.idea/jarRepositories.xml +10 -0
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml +4 -0
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml +4 -0
- package/android/.idea/libraries/Gradle__androidx_core_core_1_1_0_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +4 -0
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml +4 -0
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +4 -0
- package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +4 -0
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +3 -0
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +15 -0
- 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
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_66_1_aar.xml +14 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_1_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +13 -0
- package/android/.idea/libraries/Gradle__io_github_lizhangqu_coreprogress_1_0_2_aar.xml +5 -2
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_10.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_10.xml +13 -0
- package/android/.idea/modules/android.iml +34 -26
- package/android/build.gradle +6 -3
- package/android/src/main/java/com/reactnativecompressor/.DS_Store +0 -0
- package/android/src/main/java/com/reactnativecompressor/Audio/AudioCompressor.java +3 -4
- package/android/src/main/java/com/reactnativecompressor/CompressorModule.java +1 -33
- package/android/src/main/java/com/reactnativecompressor/Utils/Utils.java +68 -0
- package/app.plugin.js +1 -0
- package/ios/Video/VideoCompressor.swift +8 -9
- package/lib/commonjs/Audio/index.js +3 -1
- package/lib/commonjs/Audio/index.js.map +1 -1
- package/lib/commonjs/Video/index.js +3 -5
- package/lib/commonjs/Video/index.js.map +1 -1
- package/lib/commonjs/expo-plugin/compressor.js +17 -0
- package/lib/commonjs/expo-plugin/compressor.js.map +1 -0
- package/lib/commonjs/index.js +17 -10
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/index.js +15 -2
- package/lib/commonjs/utils/index.js.map +1 -1
- package/lib/module/Audio/index.js +3 -1
- package/lib/module/Audio/index.js.map +1 -1
- package/lib/module/Video/index.js +1 -2
- package/lib/module/Video/index.js.map +1 -1
- package/lib/module/expo-plugin/compressor.js +8 -0
- package/lib/module/expo-plugin/compressor.js.map +1 -0
- package/lib/module/index.js +5 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/index.js +11 -1
- package/lib/module/utils/index.js.map +1 -1
- package/lib/typescript/Video/index.d.ts +0 -1
- package/lib/typescript/expo-plugin/compressor.d.ts +4 -0
- package/lib/typescript/index.d.ts +3 -2
- package/lib/typescript/utils/index.d.ts +1 -0
- package/package.json +4 -7
- package/src/Audio/index.tsx +1 -1
- package/src/Video/index.tsx +1 -2
- package/src/expo-plugin/compressor.ts +8 -0
- package/src/index.tsx +3 -1
- package/src/utils/index.tsx +17 -0
- package/android/.gradle/6.1.1/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_core_core_1_0_1_aar.xml +0 -20
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_0_3.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_0_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fbcore_2_0_0_aar.xml +0 -22
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_0_0_aar.xml +0 -22
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_0_0_aar.xml +0 -22
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_0_0_aar.xml +0 -22
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_0_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_0_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_0_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_63_4_aar.xml +0 -22
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_9_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_9_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_9_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_14_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_12.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_3_12_12.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_zolad_videoslimmer_1_0_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_0.xml +0 -13
|
@@ -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
|
|
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,83 @@
|
|
|
1
1
|
package com.reactnativecompressor.Utils;
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
4
|
+
import com.facebook.react.bridge.ReactContext;
|
|
5
|
+
import com.facebook.react.bridge.WritableMap;
|
|
6
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
7
|
+
import numan.dev.videocompressor.VideoCompressTask;
|
|
8
|
+
import numan.dev.videocompressor.VideoCompressor;
|
|
4
9
|
|
|
5
10
|
import java.io.File;
|
|
6
11
|
import java.util.UUID;
|
|
7
12
|
|
|
8
13
|
public class Utils {
|
|
14
|
+
static int videoCompressionThreshold=10;
|
|
15
|
+
static Map<String, VideoCompressTask> compressorExports = new HashMap<>();
|
|
16
|
+
|
|
9
17
|
public static String generateCacheFilePath(String extension, ReactApplicationContext reactContext){
|
|
10
18
|
File outputDir = reactContext.getCacheDir();
|
|
11
19
|
|
|
12
20
|
String outputUri = String.format("%s/%s." + extension, outputDir.getPath(), UUID.randomUUID().toString());
|
|
13
21
|
return outputUri;
|
|
14
22
|
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
public static void compressVideo(String srcPath, String destinationPath, int resultWidth, int resultHeight, float videoBitRate, String uuid, Promise promise, ReactApplicationContext reactContext){
|
|
26
|
+
final int[] currentVideoCompression = {0};
|
|
27
|
+
try{
|
|
28
|
+
VideoCompressTask export=VideoCompressor.convertVideo(srcPath, destinationPath, resultWidth, resultHeight, (int) videoBitRate, new VideoCompressor.ProgressListener() {
|
|
29
|
+
@Override
|
|
30
|
+
public void onStart() {
|
|
31
|
+
//convert start
|
|
32
|
+
}
|
|
33
|
+
@Override
|
|
34
|
+
public void onFinish(boolean result) {
|
|
35
|
+
//convert finish,result(true is success,false is fail)
|
|
36
|
+
promise.resolve("file:/"+destinationPath);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@Override
|
|
40
|
+
public void onError(String errorMessage) {
|
|
41
|
+
promise.reject("Compression has canncelled");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Override
|
|
45
|
+
public void onProgress(float percent) {
|
|
46
|
+
int roundProgress=Math.round(percent);
|
|
47
|
+
if(roundProgress%videoCompressionThreshold==0&&roundProgress> currentVideoCompression[0]) {
|
|
48
|
+
WritableMap params = Arguments.createMap();
|
|
49
|
+
WritableMap data = Arguments.createMap();
|
|
50
|
+
params.putString("uuid", uuid);
|
|
51
|
+
data.putDouble("progress", percent / 100);
|
|
52
|
+
params.putMap("data", data);
|
|
53
|
+
sendEvent(reactContext, "videoCompressProgress", params);
|
|
54
|
+
currentVideoCompression[0] =roundProgress;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
compressorExports.put(uuid, export);
|
|
59
|
+
} catch (Exception ex) {
|
|
60
|
+
promise.reject(ex);
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
currentVideoCompression[0] =0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public static void cancelCompressionHelper(String uuid){
|
|
68
|
+
try{
|
|
69
|
+
VideoCompressTask export=compressorExports.get(uuid);
|
|
70
|
+
export.cancel(true);
|
|
71
|
+
}
|
|
72
|
+
catch (Exception ex) {
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private static void sendEvent(ReactContext reactContext,
|
|
77
|
+
String eventName,
|
|
78
|
+
@Nullable WritableMap params) {
|
|
79
|
+
reactContext
|
|
80
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
81
|
+
.emit(eventName, params);
|
|
82
|
+
}
|
|
15
83
|
}
|
package/app.plugin.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('./lib/commonjs/expo-plugin/compressor');
|
|
@@ -35,7 +35,7 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
|
|
|
35
35
|
var uploadResolvers: [String: RCTPromiseResolveBlock] = [:]
|
|
36
36
|
var uploadRejectors: [String: RCTPromiseRejectBlock] = [:]
|
|
37
37
|
let videoCompressionThreshold:Int=7
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
|
|
40
40
|
override static func requiresMainQueueSetup() -> Bool {
|
|
41
41
|
return false
|
|
@@ -247,7 +247,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
247
247
|
let maxBitrate:Int = 1669000
|
|
248
248
|
let minValue:Float=min(Float(originalHeight)/Float(height),Float(originalWidth)/Float(width))
|
|
249
249
|
var remeasuredBitrate:Int = Int(Float(originalBitrate) / minValue)
|
|
250
|
-
remeasuredBitrate = remeasuredBitrate*
|
|
250
|
+
remeasuredBitrate = Int(Float(remeasuredBitrate)*compressFactor)
|
|
251
251
|
let minBitrate:Int = self.getVideoBitrateWithFactor(f: minCompressFactor) / (1280 * 720 / (width * height))
|
|
252
252
|
if (originalBitrate < minBitrate) {
|
|
253
253
|
return remeasuredBitrate;
|
|
@@ -335,7 +335,8 @@ func makeValidUri(filePath: String) -> String {
|
|
|
335
335
|
}
|
|
336
336
|
}
|
|
337
337
|
|
|
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){
|
|
338
|
+
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){
|
|
339
|
+
var videoCompressionCounter:Int=0
|
|
339
340
|
var tmpURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
|
|
340
341
|
.appendingPathComponent(ProcessInfo().globallyUniqueString)
|
|
341
342
|
.appendingPathExtension("mp4")
|
|
@@ -367,17 +368,15 @@ func makeValidUri(filePath: String) -> String {
|
|
|
367
368
|
|
|
368
369
|
exporter.export(progressHandler: { (progress) in
|
|
369
370
|
let _progress:Float=progress*100;
|
|
370
|
-
if(Int(_progress)==
|
|
371
|
+
if(Int(_progress)==videoCompressionCounter)
|
|
371
372
|
{
|
|
372
|
-
|
|
373
|
+
videoCompressionCounter=Int(_progress)+self.videoCompressionThreshold
|
|
373
374
|
onProgress(progress)
|
|
374
375
|
}
|
|
375
376
|
|
|
376
377
|
}, completionHandler: { result in
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
case .success(let status):
|
|
380
|
-
switch status {
|
|
378
|
+
videoCompressionCounter=0;
|
|
379
|
+
switch exporter.status {
|
|
381
380
|
case .completed:
|
|
382
381
|
onCompletion(exporter.outputURL!)
|
|
383
382
|
break
|
|
@@ -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
|
|
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,
|
|
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"]}
|
|
@@ -7,15 +7,13 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
|
|
10
|
-
require("
|
|
11
|
-
|
|
12
|
-
var _uuid = require("uuid");
|
|
10
|
+
var _utils = require("../utils");
|
|
13
11
|
|
|
14
12
|
const VideoCompressEventEmitter = new _reactNative.NativeEventEmitter(_reactNative.NativeModules.VideoCompressor);
|
|
15
13
|
const NativeVideoCompressor = _reactNative.NativeModules.VideoCompressor;
|
|
16
14
|
const Video = {
|
|
17
15
|
compress: async (fileUrl, options, onProgress) => {
|
|
18
|
-
const uuid = (0,
|
|
16
|
+
const uuid = (0, _utils.uuidv4)();
|
|
19
17
|
let subscription = null;
|
|
20
18
|
|
|
21
19
|
try {
|
|
@@ -57,7 +55,7 @@ const Video = {
|
|
|
57
55
|
}
|
|
58
56
|
},
|
|
59
57
|
backgroundUpload: async (url, fileUrl, options, onProgress) => {
|
|
60
|
-
const uuid = (0,
|
|
58
|
+
const uuid = (0, _utils.uuidv4)();
|
|
61
59
|
let subscription = null;
|
|
62
60
|
|
|
63
61
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["VideoCompressEventEmitter","NativeEventEmitter","NativeModules","VideoCompressor","NativeVideoCompressor","Video","compress","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","progress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","result","removeSubscription","backgroundUpload","url","written","total","Platform","OS","includes","replace","upload","method","httpMethod","headers","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners"],"mappings":";;;;;;;AAAA;;AACA;;
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["VideoCompressEventEmitter","NativeEventEmitter","NativeModules","VideoCompressor","NativeVideoCompressor","Video","compress","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","progress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","result","removeSubscription","backgroundUpload","url","written","total","Platform","OS","includes","replace","upload","method","httpMethod","headers","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners"],"mappings":"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","sourcesContent":["import { NativeModules, NativeEventEmitter, Platform } from 'react-native';\nimport { uuidv4 } from '../utils';\n\nexport declare enum FileSystemUploadType {\n BINARY_CONTENT = 0,\n MULTIPART = 1,\n}\n\nexport declare type FileSystemAcceptedUploadHttpMethod =\n | 'POST'\n | 'PUT'\n | 'PATCH';\nexport type compressionMethod = 'auto' | 'manual';\ntype videoCompresssionType = {\n bitrate?: number;\n maxSize?: number;\n compressionMethod?: compressionMethod;\n minimumFileSizeForCompress?: number;\n};\n\nexport declare enum FileSystemSessionType {\n BACKGROUND = 0,\n FOREGROUND = 1,\n}\n\nexport declare type HTTPResponse = {\n status: number;\n headers: Record<string, string>;\n body: string;\n};\n\nexport declare type FileSystemUploadOptions = (\n | {\n uploadType?: FileSystemUploadType.BINARY_CONTENT;\n }\n | {\n uploadType: FileSystemUploadType.MULTIPART;\n fieldName?: string;\n mimeType?: string;\n parameters?: Record<string, string>;\n }\n) & {\n headers?: Record<string, string>;\n httpMethod?: FileSystemAcceptedUploadHttpMethod;\n sessionType?: FileSystemSessionType;\n};\n\nexport type VideoCompressorType = {\n compress(\n fileUrl: string,\n options?: videoCompresssionType,\n onProgress?: (progress: number) => void\n ): Promise<string>;\n backgroundUpload(\n url: string,\n fileUrl: string,\n options: FileSystemUploadOptions,\n onProgress?: (writtem: number, total: number) => void\n ): Promise<any>;\n activateBackgroundTask(onExpired?: (data: any) => void): Promise<any>;\n deactivateBackgroundTask(): Promise<any>;\n};\n\nconst VideoCompressEventEmitter = new NativeEventEmitter(\n NativeModules.VideoCompressor\n);\n\nconst NativeVideoCompressor = NativeModules.VideoCompressor;\n\nconst Video: VideoCompressorType = {\n compress: async (\n fileUrl: string,\n options?: {\n bitrate?: number;\n compressionMethod?: compressionMethod;\n maxSize?: number;\n minimumFileSizeForCompress?: number;\n },\n onProgress?: (progress: number) => void\n ) => {\n const uuid = uuidv4();\n let subscription = null;\n try {\n if (onProgress) {\n subscription = VideoCompressEventEmitter.addListener(\n 'videoCompressProgress',\n (event: any) => {\n if (event.uuid === uuid) {\n onProgress(event.data.progress);\n }\n }\n );\n }\n const modifiedOptions: {\n uuid: string;\n bitrate?: number;\n compressionMethod?: compressionMethod;\n maxSize?: number;\n minimumFileSizeForCompress?: number;\n } = { uuid };\n if (options?.bitrate) modifiedOptions.bitrate = options?.bitrate;\n if (options?.compressionMethod) {\n modifiedOptions.compressionMethod = options?.compressionMethod;\n } else {\n modifiedOptions.compressionMethod = 'manual';\n }\n if (options?.maxSize) {\n modifiedOptions.maxSize = options?.maxSize;\n } else {\n modifiedOptions.maxSize = 640;\n }\n if (options?.minimumFileSizeForCompress) {\n modifiedOptions.minimumFileSizeForCompress =\n options?.minimumFileSizeForCompress;\n }\n const result = await NativeVideoCompressor.compress(\n fileUrl,\n modifiedOptions\n );\n return result;\n } finally {\n if (subscription) {\n VideoCompressEventEmitter.removeSubscription(subscription);\n }\n }\n },\n backgroundUpload: async (url, fileUrl, options, onProgress) => {\n const uuid = uuidv4();\n let subscription = null;\n try {\n if (onProgress) {\n subscription = VideoCompressEventEmitter.addListener(\n 'VideoCompressorProgress',\n (event: any) => {\n if (event.uuid === uuid) {\n onProgress(event.data.written, event.data.total);\n }\n }\n );\n }\n if (Platform.OS === 'android' && fileUrl.includes('file://')) {\n fileUrl = fileUrl.replace('file://', '');\n }\n const result = await NativeVideoCompressor.upload(fileUrl, {\n uuid,\n method: options.httpMethod,\n headers: options.headers,\n url,\n });\n return result;\n } finally {\n if (subscription) {\n VideoCompressEventEmitter.removeSubscription(subscription);\n }\n }\n },\n activateBackgroundTask(onExpired?) {\n if (onExpired) {\n const subscription = VideoCompressEventEmitter.addListener(\n 'backgroundTaskExpired',\n (event: any) => {\n onExpired(event);\n VideoCompressEventEmitter.removeSubscription(subscription);\n }\n );\n }\n return NativeVideoCompressor.activateBackgroundTask({});\n },\n deactivateBackgroundTask() {\n VideoCompressEventEmitter.removeAllListeners('backgroundTaskExpired');\n return NativeVideoCompressor.deactivateBackgroundTask({});\n },\n} as VideoCompressorType;\n\nexport default Video;\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _configPlugins = require("@expo/config-plugins");
|
|
9
|
+
|
|
10
|
+
const pkg = require('../../../package.json');
|
|
11
|
+
|
|
12
|
+
const withCompressor = config => config;
|
|
13
|
+
|
|
14
|
+
var _default = (0, _configPlugins.createRunOncePlugin)(withCompressor, pkg.name, pkg.version);
|
|
15
|
+
|
|
16
|
+
exports.default = _default;
|
|
17
|
+
//# sourceMappingURL=compressor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["compressor.ts"],"names":["pkg","require","withCompressor","config","name","version"],"mappings":";;;;;;;AAAA;;AACA,MAAMA,GAAG,GAAGC,OAAO,CAAC,uBAAD,CAAnB;;AAIA,MAAMC,cAAmC,GAAIC,MAAD,IAAYA,MAAxD;;eAEe,wCAAoBD,cAApB,EAAoCF,GAAG,CAACI,IAAxC,EAA8CJ,GAAG,CAACK,OAAlD,C","sourcesContent":["import { ConfigPlugin, createRunOncePlugin } from '@expo/config-plugins';\nconst pkg = require('../../../package.json');\n\ntype Props = {};\n\nconst withCompressor: ConfigPlugin<Props> = (config) => config;\n\nexport default createRunOncePlugin(withCompressor, pkg.name, pkg.version);\n"]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -3,37 +3,43 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
Object.defineProperty(exports, "
|
|
6
|
+
Object.defineProperty(exports, "Audio", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function () {
|
|
9
|
-
return
|
|
9
|
+
return _Audio.default;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
Object.defineProperty(exports, "
|
|
12
|
+
Object.defineProperty(exports, "Image", {
|
|
13
13
|
enumerable: true,
|
|
14
14
|
get: function () {
|
|
15
|
-
return
|
|
15
|
+
return _Image.default;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
|
-
Object.defineProperty(exports, "
|
|
18
|
+
Object.defineProperty(exports, "Video", {
|
|
19
19
|
enumerable: true,
|
|
20
20
|
get: function () {
|
|
21
|
-
return
|
|
21
|
+
return _Video.default;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
-
Object.defineProperty(exports, "
|
|
24
|
+
Object.defineProperty(exports, "VideoCompressorType", {
|
|
25
25
|
enumerable: true,
|
|
26
26
|
get: function () {
|
|
27
|
-
return
|
|
27
|
+
return _Video.VideoCompressorType;
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
+
exports.default = void 0;
|
|
30
31
|
Object.defineProperty(exports, "getDetails", {
|
|
31
32
|
enumerable: true,
|
|
32
33
|
get: function () {
|
|
33
34
|
return _utils.getDetails;
|
|
34
35
|
}
|
|
35
36
|
});
|
|
36
|
-
exports
|
|
37
|
+
Object.defineProperty(exports, "uuidv4", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
get: function () {
|
|
40
|
+
return _utils.uuidv4;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
37
43
|
|
|
38
44
|
var _Video = _interopRequireWildcard(require("./Video"));
|
|
39
45
|
|
|
@@ -53,7 +59,8 @@ var _default = {
|
|
|
53
59
|
Video: _Video.default,
|
|
54
60
|
Audio: _Audio.default,
|
|
55
61
|
Image: _Image.default,
|
|
56
|
-
getDetails: _utils.getDetails
|
|
62
|
+
getDetails: _utils.getDetails,
|
|
63
|
+
uuidv4: _utils.uuidv4
|
|
57
64
|
};
|
|
58
65
|
exports.default = _default;
|
|
59
66
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["Video","Audio","Image","getDetails"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["Video","Audio","Image","getDetails","uuidv4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;eAWe;AACbA,EAAAA,KAAK,EAALA,cADa;AAEbC,EAAAA,KAAK,EAALA,cAFa;AAGbC,EAAAA,KAAK,EAALA,cAHa;AAIbC,EAAAA,UAAU,EAAVA,iBAJa;AAKbC,EAAAA,MAAM,EAANA;AALa,C","sourcesContent":["import Video, { VideoCompressorType } from './Video';\nimport Audio from './Audio';\nimport Image from './Image';\nimport { getDetails, uuidv4 } from './utils';\n\nexport {\n Video,\n Audio,\n Image,\n //type\n VideoCompressorType,\n getDetails,\n uuidv4,\n};\nexport default {\n Video,\n Audio,\n Image,\n getDetails,\n uuidv4,\n};\n"]}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.uuidv4 = exports.getDetails = exports.checkUrlAndOptions = exports.DEFAULT_COMPRESS_AUDIO_OPTIONS = exports.AUDIO_BITRATE = void 0;
|
|
7
7
|
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
|
|
10
|
+
/* eslint-disable no-bitwise */
|
|
10
11
|
const {
|
|
11
12
|
Compressor
|
|
12
13
|
} = _reactNative.NativeModules;
|
|
@@ -68,7 +69,8 @@ const isRemoteMedia = path => {
|
|
|
68
69
|
return typeof path === 'string' ? path.split(':/')[0].includes('http') : null;
|
|
69
70
|
};
|
|
70
71
|
|
|
71
|
-
const getDetails = (mediaFullPath
|
|
72
|
+
const getDetails = function (mediaFullPath) {
|
|
73
|
+
let extesnion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'mp3';
|
|
72
74
|
return new Promise(async (resolve, reject) => {
|
|
73
75
|
try {
|
|
74
76
|
// Since we used "-v error", a work around is to call first this command before the following
|
|
@@ -136,4 +138,15 @@ const checkUrlAndOptions = async (url, options) => {
|
|
|
136
138
|
};
|
|
137
139
|
|
|
138
140
|
exports.checkUrlAndOptions = checkUrlAndOptions;
|
|
141
|
+
|
|
142
|
+
const uuidv4 = () => {
|
|
143
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
144
|
+
const r = parseFloat('0.' + Math.random().toString().replace('0.', '') + new Date().getTime()) * 16 | 0,
|
|
145
|
+
// eslint-disable-next-line eqeqeq
|
|
146
|
+
v = c == 'x' ? r : r & 0x3 | 0x8;
|
|
147
|
+
return v.toString(16);
|
|
148
|
+
});
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
exports.uuidv4 = uuidv4;
|
|
139
152
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["Compressor","NativeModules","AUDIO_BITRATE","INCORRECT_INPUT_PATH","INCORRECT_OUTPUT_PATH","ERROR_OCCUR_WHILE_GENERATING_OUTPUT_FILE","DEFAULT_COMPRESS_AUDIO_OPTIONS","bitrate","quality","outputFilePath","generateFile","extension","Promise","resolve","reject","then","result","catch","error","isValidUrl","url","test","getFullFilename","path","_path","includes","length","substring","array","split","isFileNameError","filename","getFilename","fullFilename","slice","join","isRemoteMedia","getDetails","mediaFullPath","extesnion","Error","mediaInfo","JSON","parse","mediaInformation","getMediaProperties","bit_rate","size","Number","format","e","checkUrlAndOptions","options","defaultResult","isCorrect","message","undefined"],"mappings":"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","sourcesContent":["import { NativeModules } from 'react-native';\nconst { Compressor } = NativeModules;\nexport const AUDIO_BITRATE = [256, 192, 160, 128, 96, 64, 32];\ntype qualityType = 'low' | 'medium' | 'high';\nconst INCORRECT_INPUT_PATH = 'Incorrect input path. Please provide a valid one';\nconst INCORRECT_OUTPUT_PATH =\n 'Incorrect output path. Please provide a valid one';\nconst ERROR_OCCUR_WHILE_GENERATING_OUTPUT_FILE =\n 'An error occur while generating output file';\ntype audioCompresssionType = {\n bitrate?: number;\n quality: qualityType;\n outputFilePath?: string | undefined | null;\n};\n\nexport type defaultResultType = {\n outputFilePath: string | undefined | null;\n isCorrect: boolean;\n message: string;\n};\n\nexport const DEFAULT_COMPRESS_AUDIO_OPTIONS: audioCompresssionType = {\n bitrate: 96,\n quality: 'medium',\n outputFilePath: '',\n};\n\nexport type AudioType = {\n compress(value: string, options?: audioCompresssionType): Promise<string>;\n};\n\nconst generateFile: any = (extension: string) => {\n return new Promise((resolve, reject) => {\n Compressor.generateFile(extension)\n .then((result: any) => resolve('file://' + result))\n .catch((error: any) => reject(error));\n });\n};\n\nconst isValidUrl = (url: string) =>\n /^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$/.test(url);\n\nconst getFullFilename = (path: string | null) => {\n if (typeof path === 'string') {\n let _path = path;\n\n // In case of remote media, check if the url would be valid one\n if (path.includes('http') && !isValidUrl(path)) {\n return INCORRECT_INPUT_PATH;\n }\n\n // In case of url, check if it ends with \"/\" and do not consider it furthermore\n if (_path[_path.length - 1] === '/')\n _path = _path.substring(0, path.length - 1);\n\n const array = _path.split('/');\n return array.length > 1 ? array[array.length - 1] : INCORRECT_INPUT_PATH;\n }\n return INCORRECT_INPUT_PATH;\n};\n\nconst isFileNameError = (filename: string) => {\n return filename === INCORRECT_INPUT_PATH;\n};\n\nconst getFilename = (path: string | null) => {\n const fullFilename = getFullFilename(path);\n if (!isFileNameError(fullFilename)) {\n const array = fullFilename.split('.');\n return array.length > 1 ? array.slice(0, -1).join('') : array.join('');\n }\n return fullFilename;\n};\n\nconst isRemoteMedia = (path: string | null) => {\n return typeof path === 'string' ? path.split(':/')[0].includes('http') : null;\n};\n\nexport const getDetails = (\n mediaFullPath: string,\n extesnion: 'mp3' | 'mp4' = 'mp3'\n): Promise<any | null> => {\n return new Promise(async (resolve, reject) => {\n try {\n // Since we used \"-v error\", a work around is to call first this command before the following\n const result: any = {};\n if (result !== 0) {\n throw new Error('Failed to execute command');\n }\n\n // get the output result of the command\n // example of output {\"programs\": [], \"streams\": [{\"width\": 640,\"height\": 360}], \"format\": {\"size\": \"15804433\"}}\n let mediaInfo: any = await {};\n mediaInfo = JSON.parse(mediaInfo);\n\n // execute second command\n const mediaInformation: any = await {};\n\n // treat both results\n mediaInformation.filename = getFilename(mediaFullPath);\n mediaInformation.bitrate = mediaInformation.getMediaProperties().bit_rate;\n mediaInformation.extension = extesnion;\n mediaInformation.isRemoteMedia = isRemoteMedia(mediaFullPath);\n mediaInformation.size = Number(mediaInfo.format.size);\n\n resolve(mediaInformation);\n } catch (e) {\n reject(e);\n }\n });\n};\n\nexport const checkUrlAndOptions = async (\n url: string,\n options: audioCompresssionType\n): Promise<defaultResultType> => {\n if (!url) {\n throw new Error(\n 'Compression url is empty, please provide a url for compression.'\n );\n }\n const defaultResult: defaultResultType = {\n outputFilePath: '',\n isCorrect: true,\n message: '',\n };\n\n // Check if output file is correct\n let outputFilePath: string | undefined | null;\n try {\n // use default output file\n // or use new file from cache folder\n if (options.outputFilePath) {\n outputFilePath = options.outputFilePath;\n defaultResult.outputFilePath = outputFilePath;\n } else {\n outputFilePath = await generateFile('mp3');\n defaultResult.outputFilePath = outputFilePath;\n }\n if (outputFilePath === undefined || outputFilePath === null) {\n defaultResult.isCorrect = false;\n defaultResult.message = options.outputFilePath\n ? INCORRECT_OUTPUT_PATH\n : ERROR_OCCUR_WHILE_GENERATING_OUTPUT_FILE;\n }\n } catch (e) {\n defaultResult.isCorrect = false;\n defaultResult.message = options.outputFilePath\n ? INCORRECT_OUTPUT_PATH\n : ERROR_OCCUR_WHILE_GENERATING_OUTPUT_FILE;\n } finally {\n return defaultResult;\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["Compressor","NativeModules","AUDIO_BITRATE","INCORRECT_INPUT_PATH","INCORRECT_OUTPUT_PATH","ERROR_OCCUR_WHILE_GENERATING_OUTPUT_FILE","DEFAULT_COMPRESS_AUDIO_OPTIONS","bitrate","quality","outputFilePath","generateFile","extension","Promise","resolve","reject","then","result","catch","error","isValidUrl","url","test","getFullFilename","path","_path","includes","length","substring","array","split","isFileNameError","filename","getFilename","fullFilename","slice","join","isRemoteMedia","getDetails","mediaFullPath","extesnion","Error","mediaInfo","JSON","parse","mediaInformation","getMediaProperties","bit_rate","size","Number","format","e","checkUrlAndOptions","options","defaultResult","isCorrect","message","undefined","uuidv4","replace","c","r","parseFloat","Math","random","toString","Date","getTime","v"],"mappings":"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","sourcesContent":["/* eslint-disable no-bitwise */\nimport { NativeModules } from 'react-native';\nconst { Compressor } = NativeModules;\nexport const AUDIO_BITRATE = [256, 192, 160, 128, 96, 64, 32];\ntype qualityType = 'low' | 'medium' | 'high';\nconst INCORRECT_INPUT_PATH = 'Incorrect input path. Please provide a valid one';\nconst INCORRECT_OUTPUT_PATH =\n 'Incorrect output path. Please provide a valid one';\nconst ERROR_OCCUR_WHILE_GENERATING_OUTPUT_FILE =\n 'An error occur while generating output file';\ntype audioCompresssionType = {\n bitrate?: number;\n quality: qualityType;\n outputFilePath?: string | undefined | null;\n};\n\nexport type defaultResultType = {\n outputFilePath: string | undefined | null;\n isCorrect: boolean;\n message: string;\n};\n\nexport const DEFAULT_COMPRESS_AUDIO_OPTIONS: audioCompresssionType = {\n bitrate: 96,\n quality: 'medium',\n outputFilePath: '',\n};\n\nexport type AudioType = {\n compress(value: string, options?: audioCompresssionType): Promise<string>;\n};\n\nconst generateFile: any = (extension: string) => {\n return new Promise((resolve, reject) => {\n Compressor.generateFile(extension)\n .then((result: any) => resolve('file://' + result))\n .catch((error: any) => reject(error));\n });\n};\n\nconst isValidUrl = (url: string) =>\n /^(?:\\w+:)?\\/\\/([^\\s\\.]+\\.\\S{2}|localhost[\\:?\\d]*)\\S*$/.test(url);\n\nconst getFullFilename = (path: string | null) => {\n if (typeof path === 'string') {\n let _path = path;\n\n // In case of remote media, check if the url would be valid one\n if (path.includes('http') && !isValidUrl(path)) {\n return INCORRECT_INPUT_PATH;\n }\n\n // In case of url, check if it ends with \"/\" and do not consider it furthermore\n if (_path[_path.length - 1] === '/')\n _path = _path.substring(0, path.length - 1);\n\n const array = _path.split('/');\n return array.length > 1 ? array[array.length - 1] : INCORRECT_INPUT_PATH;\n }\n return INCORRECT_INPUT_PATH;\n};\n\nconst isFileNameError = (filename: string) => {\n return filename === INCORRECT_INPUT_PATH;\n};\n\nconst getFilename = (path: string | null) => {\n const fullFilename = getFullFilename(path);\n if (!isFileNameError(fullFilename)) {\n const array = fullFilename.split('.');\n return array.length > 1 ? array.slice(0, -1).join('') : array.join('');\n }\n return fullFilename;\n};\n\nconst isRemoteMedia = (path: string | null) => {\n return typeof path === 'string' ? path.split(':/')[0].includes('http') : null;\n};\n\nexport const getDetails = (\n mediaFullPath: string,\n extesnion: 'mp3' | 'mp4' = 'mp3'\n): Promise<any | null> => {\n return new Promise(async (resolve, reject) => {\n try {\n // Since we used \"-v error\", a work around is to call first this command before the following\n const result: any = {};\n if (result !== 0) {\n throw new Error('Failed to execute command');\n }\n\n // get the output result of the command\n // example of output {\"programs\": [], \"streams\": [{\"width\": 640,\"height\": 360}], \"format\": {\"size\": \"15804433\"}}\n let mediaInfo: any = await {};\n mediaInfo = JSON.parse(mediaInfo);\n\n // execute second command\n const mediaInformation: any = await {};\n\n // treat both results\n mediaInformation.filename = getFilename(mediaFullPath);\n mediaInformation.bitrate = mediaInformation.getMediaProperties().bit_rate;\n mediaInformation.extension = extesnion;\n mediaInformation.isRemoteMedia = isRemoteMedia(mediaFullPath);\n mediaInformation.size = Number(mediaInfo.format.size);\n\n resolve(mediaInformation);\n } catch (e) {\n reject(e);\n }\n });\n};\n\nexport const checkUrlAndOptions = async (\n url: string,\n options: audioCompresssionType\n): Promise<defaultResultType> => {\n if (!url) {\n throw new Error(\n 'Compression url is empty, please provide a url for compression.'\n );\n }\n const defaultResult: defaultResultType = {\n outputFilePath: '',\n isCorrect: true,\n message: '',\n };\n\n // Check if output file is correct\n let outputFilePath: string | undefined | null;\n try {\n // use default output file\n // or use new file from cache folder\n if (options.outputFilePath) {\n outputFilePath = options.outputFilePath;\n defaultResult.outputFilePath = outputFilePath;\n } else {\n outputFilePath = await generateFile('mp3');\n defaultResult.outputFilePath = outputFilePath;\n }\n if (outputFilePath === undefined || outputFilePath === null) {\n defaultResult.isCorrect = false;\n defaultResult.message = options.outputFilePath\n ? INCORRECT_OUTPUT_PATH\n : ERROR_OCCUR_WHILE_GENERATING_OUTPUT_FILE;\n }\n } catch (e) {\n defaultResult.isCorrect = false;\n defaultResult.message = options.outputFilePath\n ? INCORRECT_OUTPUT_PATH\n : ERROR_OCCUR_WHILE_GENERATING_OUTPUT_FILE;\n } finally {\n return defaultResult;\n }\n};\n\nexport const uuidv4 = () => {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r =\n (parseFloat(\n '0.' +\n Math.random().toString().replace('0.', '') +\n new Date().getTime()\n ) *\n 16) |\n 0,\n // eslint-disable-next-line eqeqeq\n v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n};\n"]}
|
|
@@ -2,7 +2,9 @@ import { NativeModules } from 'react-native';
|
|
|
2
2
|
import { AUDIO_BITRATE, DEFAULT_COMPRESS_AUDIO_OPTIONS, checkUrlAndOptions } from '../utils';
|
|
3
3
|
const NativeAudio = NativeModules.Compressor;
|
|
4
4
|
const Audio = {
|
|
5
|
-
compress: async (url
|
|
5
|
+
compress: async function (url) {
|
|
6
|
+
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_COMPRESS_AUDIO_OPTIONS;
|
|
7
|
+
|
|
6
8
|
try {
|
|
7
9
|
const checkUrlAndOptionsResult = await checkUrlAndOptions(url, options);
|
|
8
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["NativeModules","AUDIO_BITRATE","DEFAULT_COMPRESS_AUDIO_OPTIONS","checkUrlAndOptions","NativeAudio","Compressor","Audio","compress","url","options","checkUrlAndOptionsResult","isCorrect","message","mediaDetails","bitrate","i","length","quality","compress_audio","error"],"mappings":"AAAA,SAASA,aAAT,QAA8B,cAA9B;AACA,SACEC,aADF,EAGEC,8BAHF,EAKEC,kBALF,QAMO,UANP;AAOA,MAAMC,WAAW,GAAGJ,aAAa,CAACK,UAAlC;AAEA,MAAMC,KAAgB,GAAG;AACvBC,EAAAA,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["NativeModules","AUDIO_BITRATE","DEFAULT_COMPRESS_AUDIO_OPTIONS","checkUrlAndOptions","NativeAudio","Compressor","Audio","compress","url","options","checkUrlAndOptionsResult","isCorrect","message","mediaDetails","bitrate","i","length","quality","compress_audio","error"],"mappings":"AAAA,SAASA,aAAT,QAA8B,cAA9B;AACA,SACEC,aADF,EAGEC,8BAHF,EAKEC,kBALF,QAMO,UANP;AAOA,MAAMC,WAAW,GAAGJ,aAAa,CAACK,UAAlC;AAEA,MAAMC,KAAgB,GAAG;AACvBC,EAAAA,QAAQ,EAAE,gBAAOC,GAAP,EAAyD;AAAA,QAA7CC,OAA6C,uEAAnCP,8BAAmC;;AACjE,QAAI;AACF,YAAMQ,wBAA2C,GAC/C,MAAMP,kBAAkB,CAACK,GAAD,EAAMC,OAAN,CAD1B;;AAEA,UAAI,CAACC,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,GAAGZ,8BAA8B,CAACY,OAAlD;;AAEA,YAAID,YAAY,IAAIA,YAAY,CAACC,OAAjC,EAA0C;AACxC;AACA,eAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGd,aAAa,CAACe,MAAlC,EAA0CD,CAAC,EAA3C,EAA+C;AAC7C;AACA,gBAAIF,YAAY,CAACC,OAAb,GAAuBb,aAAa,CAACc,CAAD,CAAxC,EAA6C;AAC3C,kBAAIA,CAAC,GAAG,CAAJ,GAAQd,aAAa,CAACe,MAA1B,EAAkC;AAChC,oBAAIP,OAAO,CAACQ,OAAR,KAAoB,KAAxB,EAA+BH,OAAO,GAAGb,aAAa,CAACc,CAAC,GAAG,CAAL,CAAvB,CAA/B,KACK,IAAIN,OAAO,CAACQ,OAAR,KAAoB,QAAxB,EACHH,OAAO,GAAGb,aAAa,CAACc,CAAC,GAAG,CAAL,CAAvB,CADG,KAEAD,OAAO,GAAGb,aAAa,CAACc,CAAD,CAAvB;AACN,eALD,MAKO,IAAIA,CAAC,GAAG,CAAJ,GAAQd,aAAa,CAACe,MAA1B,EAAkC;AACvC,oBAAIP,OAAO,CAACQ,OAAR,KAAoB,KAAxB,EAA+BH,OAAO,GAAGb,aAAa,CAACc,CAAC,GAAG,CAAL,CAAvB,CAA/B,KACKD,OAAO,GAAGb,aAAa,CAACc,CAAD,CAAvB;AACN,eAHM,MAGAD,OAAO,GAAGb,aAAa,CAACc,CAAD,CAAvB;;AACP;AACD,aAb4C,CAe7C;;;AACA,gBACEF,YAAY,CAACC,OAAb,IAAwBb,aAAa,CAACA,aAAa,CAACe,MAAd,GAAuB,CAAxB,CADvC,EAEE;AACAF,cAAAA,OAAO,GAAGb,aAAa,CAACA,aAAa,CAACe,MAAd,GAAuB,CAAxB,CAAvB;AACA;AACD;AACF;AACF;;AAED,eAAOZ,WAAW,CAACc,cAAZ,CAA2BV,GAA3B,EAAgC;AACrCM,UAAAA,OADqC;AAErCG,UAAAA,OAAO,EAAER,OAAO,CAACQ;AAFoB,SAAhC,CAAP;AAID;AACF,KAjDD,CAiDE,OAAOE,KAAP,EAAmB;AACnB,YAAMA,KAAK,CAACP,OAAZ;AACD;AACF;AAtDsB,CAAzB;AAyDA,eAAeN,KAAf","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"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { NativeModules, NativeEventEmitter, Platform } from 'react-native';
|
|
2
|
-
import '
|
|
3
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import { uuidv4 } from '../utils';
|
|
4
3
|
const VideoCompressEventEmitter = new NativeEventEmitter(NativeModules.VideoCompressor);
|
|
5
4
|
const NativeVideoCompressor = NativeModules.VideoCompressor;
|
|
6
5
|
const Video = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["NativeModules","NativeEventEmitter","Platform","
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["NativeModules","NativeEventEmitter","Platform","uuidv4","VideoCompressEventEmitter","VideoCompressor","NativeVideoCompressor","Video","compress","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","progress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","result","removeSubscription","backgroundUpload","url","written","total","OS","includes","replace","upload","method","httpMethod","headers","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners"],"mappings":"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","sourcesContent":["import { NativeModules, NativeEventEmitter, Platform } from 'react-native';\nimport { uuidv4 } from '../utils';\n\nexport declare enum FileSystemUploadType {\n BINARY_CONTENT = 0,\n MULTIPART = 1,\n}\n\nexport declare type FileSystemAcceptedUploadHttpMethod =\n | 'POST'\n | 'PUT'\n | 'PATCH';\nexport type compressionMethod = 'auto' | 'manual';\ntype videoCompresssionType = {\n bitrate?: number;\n maxSize?: number;\n compressionMethod?: compressionMethod;\n minimumFileSizeForCompress?: number;\n};\n\nexport declare enum FileSystemSessionType {\n BACKGROUND = 0,\n FOREGROUND = 1,\n}\n\nexport declare type HTTPResponse = {\n status: number;\n headers: Record<string, string>;\n body: string;\n};\n\nexport declare type FileSystemUploadOptions = (\n | {\n uploadType?: FileSystemUploadType.BINARY_CONTENT;\n }\n | {\n uploadType: FileSystemUploadType.MULTIPART;\n fieldName?: string;\n mimeType?: string;\n parameters?: Record<string, string>;\n }\n) & {\n headers?: Record<string, string>;\n httpMethod?: FileSystemAcceptedUploadHttpMethod;\n sessionType?: FileSystemSessionType;\n};\n\nexport type VideoCompressorType = {\n compress(\n fileUrl: string,\n options?: videoCompresssionType,\n onProgress?: (progress: number) => void\n ): Promise<string>;\n backgroundUpload(\n url: string,\n fileUrl: string,\n options: FileSystemUploadOptions,\n onProgress?: (writtem: number, total: number) => void\n ): Promise<any>;\n activateBackgroundTask(onExpired?: (data: any) => void): Promise<any>;\n deactivateBackgroundTask(): Promise<any>;\n};\n\nconst VideoCompressEventEmitter = new NativeEventEmitter(\n NativeModules.VideoCompressor\n);\n\nconst NativeVideoCompressor = NativeModules.VideoCompressor;\n\nconst Video: VideoCompressorType = {\n compress: async (\n fileUrl: string,\n options?: {\n bitrate?: number;\n compressionMethod?: compressionMethod;\n maxSize?: number;\n minimumFileSizeForCompress?: number;\n },\n onProgress?: (progress: number) => void\n ) => {\n const uuid = uuidv4();\n let subscription = null;\n try {\n if (onProgress) {\n subscription = VideoCompressEventEmitter.addListener(\n 'videoCompressProgress',\n (event: any) => {\n if (event.uuid === uuid) {\n onProgress(event.data.progress);\n }\n }\n );\n }\n const modifiedOptions: {\n uuid: string;\n bitrate?: number;\n compressionMethod?: compressionMethod;\n maxSize?: number;\n minimumFileSizeForCompress?: number;\n } = { uuid };\n if (options?.bitrate) modifiedOptions.bitrate = options?.bitrate;\n if (options?.compressionMethod) {\n modifiedOptions.compressionMethod = options?.compressionMethod;\n } else {\n modifiedOptions.compressionMethod = 'manual';\n }\n if (options?.maxSize) {\n modifiedOptions.maxSize = options?.maxSize;\n } else {\n modifiedOptions.maxSize = 640;\n }\n if (options?.minimumFileSizeForCompress) {\n modifiedOptions.minimumFileSizeForCompress =\n options?.minimumFileSizeForCompress;\n }\n const result = await NativeVideoCompressor.compress(\n fileUrl,\n modifiedOptions\n );\n return result;\n } finally {\n if (subscription) {\n VideoCompressEventEmitter.removeSubscription(subscription);\n }\n }\n },\n backgroundUpload: async (url, fileUrl, options, onProgress) => {\n const uuid = uuidv4();\n let subscription = null;\n try {\n if (onProgress) {\n subscription = VideoCompressEventEmitter.addListener(\n 'VideoCompressorProgress',\n (event: any) => {\n if (event.uuid === uuid) {\n onProgress(event.data.written, event.data.total);\n }\n }\n );\n }\n if (Platform.OS === 'android' && fileUrl.includes('file://')) {\n fileUrl = fileUrl.replace('file://', '');\n }\n const result = await NativeVideoCompressor.upload(fileUrl, {\n uuid,\n method: options.httpMethod,\n headers: options.headers,\n url,\n });\n return result;\n } finally {\n if (subscription) {\n VideoCompressEventEmitter.removeSubscription(subscription);\n }\n }\n },\n activateBackgroundTask(onExpired?) {\n if (onExpired) {\n const subscription = VideoCompressEventEmitter.addListener(\n 'backgroundTaskExpired',\n (event: any) => {\n onExpired(event);\n VideoCompressEventEmitter.removeSubscription(subscription);\n }\n );\n }\n return NativeVideoCompressor.activateBackgroundTask({});\n },\n deactivateBackgroundTask() {\n VideoCompressEventEmitter.removeAllListeners('backgroundTaskExpired');\n return NativeVideoCompressor.deactivateBackgroundTask({});\n },\n} as VideoCompressorType;\n\nexport default Video;\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createRunOncePlugin } from '@expo/config-plugins';
|
|
2
|
+
|
|
3
|
+
const pkg = require('../../../package.json');
|
|
4
|
+
|
|
5
|
+
const withCompressor = config => config;
|
|
6
|
+
|
|
7
|
+
export default createRunOncePlugin(withCompressor, pkg.name, pkg.version);
|
|
8
|
+
//# sourceMappingURL=compressor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["compressor.ts"],"names":["createRunOncePlugin","pkg","require","withCompressor","config","name","version"],"mappings":"AAAA,SAAuBA,mBAAvB,QAAkD,sBAAlD;;AACA,MAAMC,GAAG,GAAGC,OAAO,CAAC,uBAAD,CAAnB;;AAIA,MAAMC,cAAmC,GAAIC,MAAD,IAAYA,MAAxD;;AAEA,eAAeJ,mBAAmB,CAACG,cAAD,EAAiBF,GAAG,CAACI,IAArB,EAA2BJ,GAAG,CAACK,OAA/B,CAAlC","sourcesContent":["import { ConfigPlugin, createRunOncePlugin } from '@expo/config-plugins';\nconst pkg = require('../../../package.json');\n\ntype Props = {};\n\nconst withCompressor: ConfigPlugin<Props> = (config) => config;\n\nexport default createRunOncePlugin(withCompressor, pkg.name, pkg.version);\n"]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import Video, { VideoCompressorType } from './Video';
|
|
2
2
|
import Audio from './Audio';
|
|
3
3
|
import Image from './Image';
|
|
4
|
-
import { getDetails } from './utils';
|
|
5
|
-
export { Video, Audio, Image //type
|
|
6
|
-
|
|
4
|
+
import { getDetails, uuidv4 } from './utils';
|
|
5
|
+
export { Video, Audio, Image, //type
|
|
6
|
+
VideoCompressorType, getDetails, uuidv4 };
|
|
7
7
|
export default {
|
|
8
8
|
Video,
|
|
9
9
|
Audio,
|
|
10
10
|
Image,
|
|
11
|
-
getDetails
|
|
11
|
+
getDetails,
|
|
12
|
+
uuidv4
|
|
12
13
|
};
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["Video","VideoCompressorType","Audio","Image","getDetails"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,mBAAhB,QAA2C,SAA3C;AACA,OAAOC,KAAP,MAAkB,SAAlB;AACA,OAAOC,KAAP,MAAkB,SAAlB;AACA,SAASC,UAAT,
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["Video","VideoCompressorType","Audio","Image","getDetails","uuidv4"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,mBAAhB,QAA2C,SAA3C;AACA,OAAOC,KAAP,MAAkB,SAAlB;AACA,OAAOC,KAAP,MAAkB,SAAlB;AACA,SAASC,UAAT,EAAqBC,MAArB,QAAmC,SAAnC;AAEA,SACEL,KADF,EAEEE,KAFF,EAGEC,KAHF,EAIE;AACAF,mBALF,EAMEG,UANF,EAOEC,MAPF;AASA,eAAe;AACbL,EAAAA,KADa;AAEbE,EAAAA,KAFa;AAGbC,EAAAA,KAHa;AAIbC,EAAAA,UAJa;AAKbC,EAAAA;AALa,CAAf","sourcesContent":["import Video, { VideoCompressorType } from './Video';\nimport Audio from './Audio';\nimport Image from './Image';\nimport { getDetails, uuidv4 } from './utils';\n\nexport {\n Video,\n Audio,\n Image,\n //type\n VideoCompressorType,\n getDetails,\n uuidv4,\n};\nexport default {\n Video,\n Audio,\n Image,\n getDetails,\n uuidv4,\n};\n"]}
|