react-native-compressor 1.3.1 → 1.3.2
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 +1 -36
- package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- 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 +7 -3
- package/android/src/main/java/com/reactnativecompressor/Audio/AudioCompressor.java +3 -4
- package/android/src/main/java/com/reactnativecompressor/CompressorModule.java +1 -37
- package/android/src/main/java/com/reactnativecompressor/Utils/Utils.java +5 -5
- package/android/src/main/java/com/reactnativecompressor/Video/.DS_Store +0 -0
- package/android/src/main/java/com/reactnativecompressor/Video/AutoVideoCompression/AutoVideoCompression.java +37 -3
- package/android/src/main/java/com/reactnativecompressor/Video/VideoCompressorHelper.java +38 -2
- package/android/src/main/java/com/reactnativecompressor/Video/VideoModule.java +7 -9
- package/ios/Compressor.m +0 -2
- package/ios/Video/VideoCompressor.swift +11 -20
- package/lib/commonjs/Video/index.js +1 -12
- package/lib/commonjs/Video/index.js.map +1 -1
- package/lib/module/Video/index.js +0 -8
- package/lib/module/Video/index.js.map +1 -1
- package/lib/typescript/Video/index.d.ts +0 -3
- package/package.json +1 -1
- package/src/Video/index.tsx +6 -11
- 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
- package/android/src/main/java/com/reactnativecompressor/Video/videoslimmer/VideoSlimEncoder.java +0 -629
- package/android/src/main/java/com/reactnativecompressor/Video/videoslimmer/VideoSlimTask.java +0 -59
- package/android/src/main/java/com/reactnativecompressor/Video/videoslimmer/VideoSlimmer.java +0 -20
- package/android/src/main/java/com/reactnativecompressor/Video/videoslimmer/listner/SlimProgressListener.java +0 -6
- package/android/src/main/java/com/reactnativecompressor/Video/videoslimmer/muxer/CodecInputSurface.java +0 -202
- package/android/src/main/java/com/reactnativecompressor/Video/videoslimmer/render/TextureRenderer.java +0 -196
|
@@ -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.reactnativecompressor.Video.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,39 +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
|
-
@Override
|
|
114
|
-
public void onError(String errorMessage) {
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
@Override
|
|
119
|
-
public void onProgress(float percent) {
|
|
120
|
-
WritableMap params = Arguments.createMap();
|
|
121
|
-
WritableMap data = Arguments.createMap();
|
|
122
|
-
params.putString("uuid", options.uuid);
|
|
123
|
-
data.putDouble("progress", percent/100);
|
|
124
|
-
params.putMap("data", data);
|
|
125
|
-
Log.d("nomi onProgress", "onProgress: "+percent);
|
|
126
|
-
sendEvent(reactContext, "videoCompressProgress", params);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
92
|
+
new AudioCompressor().CompressAudio(srcPath, destinationPath, (int) bitrate*1000);
|
|
129
93
|
|
|
130
94
|
} catch (Exception ex) {
|
|
131
95
|
promise.reject(ex);
|
|
@@ -8,8 +8,8 @@ import com.facebook.react.bridge.ReactApplicationContext;
|
|
|
8
8
|
import com.facebook.react.bridge.ReactContext;
|
|
9
9
|
import com.facebook.react.bridge.WritableMap;
|
|
10
10
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
11
|
-
import
|
|
12
|
-
import
|
|
11
|
+
import numan.dev.videocompressor.VideoCompressTask;
|
|
12
|
+
import numan.dev.videocompressor.VideoCompressor;
|
|
13
13
|
|
|
14
14
|
import java.io.File;
|
|
15
15
|
import java.util.HashMap;
|
|
@@ -19,7 +19,7 @@ import java.util.UUID;
|
|
|
19
19
|
public class Utils {
|
|
20
20
|
static int videoCompressionThreshold=10;
|
|
21
21
|
static int currentVideoCompression=0;
|
|
22
|
-
static Map<String,
|
|
22
|
+
static Map<String, VideoCompressTask> compressorExports = new HashMap<>();
|
|
23
23
|
|
|
24
24
|
public static String generateCacheFilePath(String extension, ReactApplicationContext reactContext){
|
|
25
25
|
File outputDir = reactContext.getCacheDir();
|
|
@@ -31,7 +31,7 @@ public class Utils {
|
|
|
31
31
|
|
|
32
32
|
public static void compressVideo(String srcPath, String destinationPath, int resultWidth, int resultHeight, float videoBitRate, String uuid, Promise promise, ReactApplicationContext reactContext){
|
|
33
33
|
try{
|
|
34
|
-
|
|
34
|
+
VideoCompressTask export=VideoCompressor.convertVideo(srcPath, destinationPath, resultWidth, resultHeight, (int) videoBitRate, new VideoCompressor.ProgressListener() {
|
|
35
35
|
@Override
|
|
36
36
|
public void onStart() {
|
|
37
37
|
//convert start
|
|
@@ -72,7 +72,7 @@ public class Utils {
|
|
|
72
72
|
|
|
73
73
|
public static void cancelCompressionHelper(String uuid){
|
|
74
74
|
try{
|
|
75
|
-
|
|
75
|
+
VideoCompressTask export=compressorExports.get(uuid);
|
|
76
76
|
export.cancel(true);
|
|
77
77
|
}
|
|
78
78
|
catch (Exception ex) {
|
|
Binary file
|
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
package com.reactnativecompressor.Video.AutoVideoCompression;
|
|
2
2
|
|
|
3
|
+
import android.media.MediaCodecInfo;
|
|
3
4
|
import android.media.MediaMetadataRetriever;
|
|
5
|
+
import android.media.session.MediaController;
|
|
4
6
|
import android.net.Uri;
|
|
7
|
+
import android.os.Build;
|
|
5
8
|
|
|
6
9
|
import androidx.annotation.Nullable;
|
|
7
10
|
|
|
11
|
+
import com.facebook.react.bridge.Arguments;
|
|
8
12
|
import com.facebook.react.bridge.Promise;
|
|
9
13
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
10
14
|
import com.facebook.react.bridge.ReactContext;
|
|
11
15
|
import com.facebook.react.bridge.WritableMap;
|
|
12
16
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
13
17
|
import com.reactnativecompressor.Video.VideoCompressorHelper;
|
|
14
|
-
import
|
|
18
|
+
import com.zolad.videoslimmer.VideoSlimmer;
|
|
15
19
|
|
|
16
20
|
import java.io.File;
|
|
17
21
|
|
|
18
22
|
import static com.reactnativecompressor.Utils.Utils.generateCacheFilePath;
|
|
19
23
|
|
|
20
24
|
public class AutoVideoCompression {
|
|
25
|
+
static int videoCompressionThreshold=10;
|
|
26
|
+
static int currentVideoCompression=0;
|
|
27
|
+
|
|
21
28
|
public static void createCompressionSettings(String fileUrl,VideoCompressorHelper options,Promise promise, ReactApplicationContext reactContext) {
|
|
22
29
|
float maxSize = options.maxSize;
|
|
23
30
|
float minimumFileSizeForCompress=options.minimumFileSizeForCompress;
|
|
@@ -45,16 +52,43 @@ public class AutoVideoCompression {
|
|
|
45
52
|
bitrate,
|
|
46
53
|
resultHeight, resultWidth
|
|
47
54
|
);
|
|
48
|
-
|
|
55
|
+
|
|
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
|
+
});
|
|
80
|
+
|
|
49
81
|
}
|
|
50
82
|
else
|
|
51
83
|
{
|
|
52
84
|
promise.resolve(fileUrl);
|
|
53
85
|
}
|
|
54
|
-
|
|
55
86
|
} catch (Exception ex) {
|
|
56
87
|
promise.reject(ex);
|
|
57
88
|
}
|
|
89
|
+
finally {
|
|
90
|
+
currentVideoCompression=0;
|
|
91
|
+
}
|
|
58
92
|
}
|
|
59
93
|
|
|
60
94
|
public static int makeVideoBitrate(int originalHeight, int originalWidth, int originalBitrate, int height, int width) {
|
|
@@ -8,6 +8,7 @@ import android.os.PowerManager;
|
|
|
8
8
|
|
|
9
9
|
import androidx.annotation.Nullable;
|
|
10
10
|
|
|
11
|
+
import com.facebook.react.bridge.Arguments;
|
|
11
12
|
import com.facebook.react.bridge.LifecycleEventListener;
|
|
12
13
|
import com.facebook.react.bridge.Promise;
|
|
13
14
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
@@ -16,12 +17,13 @@ import com.facebook.react.bridge.ReadableMap;
|
|
|
16
17
|
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
|
17
18
|
import com.facebook.react.bridge.WritableMap;
|
|
18
19
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
20
|
+
import com.reactnativecompressor.Image.utils.ImageCompressorOptions;
|
|
19
21
|
import com.reactnativecompressor.Utils.FileUplaoder.FileUploader;
|
|
20
22
|
import com.reactnativecompressor.Video.AutoVideoCompression.AutoVideoCompression;
|
|
23
|
+
import com.zolad.videoslimmer.VideoSlimmer;
|
|
21
24
|
|
|
22
25
|
import java.util.UUID;
|
|
23
26
|
|
|
24
|
-
import static com.reactnativecompressor.Utils.Utils.compressVideo;
|
|
25
27
|
import static com.reactnativecompressor.Utils.Utils.generateCacheFilePath;
|
|
26
28
|
|
|
27
29
|
public class VideoCompressorHelper {
|
|
@@ -164,10 +166,44 @@ public class VideoCompressorHelper {
|
|
|
164
166
|
}
|
|
165
167
|
}
|
|
166
168
|
float videoBitRate = (options.bitrate>0)?options.bitrate: (float) (height * width * 1.5);
|
|
167
|
-
|
|
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
|
+
|
|
168
201
|
} catch (Exception ex) {
|
|
169
202
|
promise.reject(ex);
|
|
170
203
|
}
|
|
204
|
+
finally {
|
|
205
|
+
currentVideoCompression=0;
|
|
206
|
+
}
|
|
171
207
|
}
|
|
172
208
|
|
|
173
209
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
package com.reactnativecompressor.Video;
|
|
2
2
|
|
|
3
|
-
import android.
|
|
3
|
+
import android.media.MediaMetadataRetriever;
|
|
4
|
+
import android.net.Uri;
|
|
4
5
|
|
|
5
6
|
import androidx.annotation.NonNull;
|
|
6
7
|
import androidx.annotation.Nullable;
|
|
7
8
|
|
|
9
|
+
import com.facebook.react.bridge.Arguments;
|
|
8
10
|
import com.facebook.react.bridge.Promise;
|
|
9
11
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
10
12
|
import com.facebook.react.bridge.ReactContext;
|
|
@@ -14,11 +16,14 @@ import com.facebook.react.bridge.ReadableMap;
|
|
|
14
16
|
import com.facebook.react.bridge.WritableMap;
|
|
15
17
|
import com.facebook.react.module.annotations.ReactModule;
|
|
16
18
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
19
|
+
import com.reactnativecompressor.Image.utils.ImageCompressorOptions;
|
|
20
|
+
import com.zolad.videoslimmer.VideoSlimmer;
|
|
17
21
|
|
|
22
|
+
import static com.reactnativecompressor.Utils.Utils.generateCacheFilePath;
|
|
18
23
|
import static com.reactnativecompressor.Video.VideoCompressorHelper.video_activateBackgroundTask_helper;
|
|
19
24
|
import static com.reactnativecompressor.Video.VideoCompressorHelper.video_deactivateBackgroundTask_helper;
|
|
20
25
|
import static com.reactnativecompressor.Video.VideoCompressorHelper.video_upload_helper;
|
|
21
|
-
|
|
26
|
+
|
|
22
27
|
@ReactModule(name = VideoModule.NAME)
|
|
23
28
|
public class VideoModule extends ReactContextBaseJavaModule {
|
|
24
29
|
public static final String NAME = "VideoCompressor";
|
|
@@ -62,13 +67,6 @@ public class VideoModule extends ReactContextBaseJavaModule {
|
|
|
62
67
|
|
|
63
68
|
}
|
|
64
69
|
|
|
65
|
-
@ReactMethod
|
|
66
|
-
public void cancelCompression(
|
|
67
|
-
String uuid) {
|
|
68
|
-
cancelCompressionHelper(uuid);
|
|
69
|
-
Log.d("cancelCompression", uuid);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
70
|
@ReactMethod
|
|
73
71
|
public void upload(
|
|
74
72
|
String fileUrl,
|
package/ios/Compressor.m
CHANGED
|
@@ -34,7 +34,6 @@ 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] = [:]
|
|
38
37
|
let videoCompressionThreshold:Int=7
|
|
39
38
|
var videoCompressionCounter:Int=0
|
|
40
39
|
|
|
@@ -84,11 +83,6 @@ class VideoCompressor: RCTEventEmitter, URLSessionTaskDelegate {
|
|
|
84
83
|
})
|
|
85
84
|
}
|
|
86
85
|
|
|
87
|
-
@objc(cancelCompression:)
|
|
88
|
-
func cancelCompression(uuid: String) -> Void {
|
|
89
|
-
compressorExports[uuid]?.cancelExport()
|
|
90
|
-
}
|
|
91
|
-
|
|
92
86
|
func makeValidUri(filePath: String) -> String {
|
|
93
87
|
let fileWithUrl = URL(fileURLWithPath: filePath)
|
|
94
88
|
let absoluteUrl = fileWithUrl.deletingLastPathComponent()
|
|
@@ -225,7 +219,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
225
219
|
}
|
|
226
220
|
else
|
|
227
221
|
{
|
|
228
|
-
manualCompressionHelper(url: url,
|
|
222
|
+
manualCompressionHelper(url: url, bitRate: options["bitrate"] as! Float?) { progress in
|
|
229
223
|
onProgress(progress)
|
|
230
224
|
} onCompletion: { outputURL in
|
|
231
225
|
onCompletion(outputURL)
|
|
@@ -269,7 +263,6 @@ func makeValidUri(filePath: String) -> String {
|
|
|
269
263
|
|
|
270
264
|
func autoCompressionHelper(url: URL, options: [String: Any], onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
|
|
271
265
|
let maxSize:Float = options["maxSize"] as! Float;
|
|
272
|
-
let uuid:String = options["uuid"] as! String
|
|
273
266
|
|
|
274
267
|
let asset = AVAsset(url: url)
|
|
275
268
|
guard asset.tracks.count >= 1 else {
|
|
@@ -293,8 +286,8 @@ func makeValidUri(filePath: String) -> String {
|
|
|
293
286
|
originalBitrate: Int(bitrate),
|
|
294
287
|
height: Int(resultHeight), width: Int(resultWidth)
|
|
295
288
|
);
|
|
296
|
-
|
|
297
|
-
exportVideoHelper(url: url, asset: asset, bitRate: videoBitRate, resultWidth: resultWidth, resultHeight: resultHeight
|
|
289
|
+
|
|
290
|
+
exportVideoHelper(url: url, asset: asset, bitRate: videoBitRate, resultWidth: resultWidth, resultHeight: resultHeight) { progress in
|
|
298
291
|
onProgress(progress)
|
|
299
292
|
} onCompletion: { outputURL in
|
|
300
293
|
onCompletion(outputURL)
|
|
@@ -303,9 +296,9 @@ func makeValidUri(filePath: String) -> String {
|
|
|
303
296
|
}
|
|
304
297
|
}
|
|
305
298
|
|
|
306
|
-
func manualCompressionHelper(url: URL,
|
|
307
|
-
|
|
308
|
-
var bitRate
|
|
299
|
+
func manualCompressionHelper(url: URL, bitRate: Float?, onProgress: @escaping (Float) -> Void, onCompletion: @escaping (URL) -> Void, onFailure: @escaping (Error) -> Void){
|
|
300
|
+
|
|
301
|
+
var _bitRate=bitRate;
|
|
309
302
|
let asset = AVAsset(url: url)
|
|
310
303
|
guard asset.tracks.count >= 1 else {
|
|
311
304
|
let error = CompressionError(message: "Invalid video URL, no track found")
|
|
@@ -328,12 +321,12 @@ func makeValidUri(filePath: String) -> String {
|
|
|
328
321
|
}
|
|
329
322
|
else
|
|
330
323
|
{
|
|
331
|
-
|
|
324
|
+
_bitRate=bitRate ?? Float(abs(track.estimatedDataRate))*0.8
|
|
332
325
|
}
|
|
333
326
|
|
|
334
|
-
let videoBitRate =
|
|
327
|
+
let videoBitRate = _bitRate ?? height*width*1.5
|
|
335
328
|
|
|
336
|
-
exportVideoHelper(url: url, asset: asset, bitRate: Int(videoBitRate), resultWidth: width, resultHeight: height
|
|
329
|
+
exportVideoHelper(url: url, asset: asset, bitRate: Int(videoBitRate), resultWidth: width, resultHeight: height) { progress in
|
|
337
330
|
onProgress(progress)
|
|
338
331
|
} onCompletion: { outputURL in
|
|
339
332
|
onCompletion(outputURL)
|
|
@@ -342,7 +335,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
342
335
|
}
|
|
343
336
|
}
|
|
344
337
|
|
|
345
|
-
func exportVideoHelper(url: URL,asset: AVAsset, bitRate: Int,resultWidth:Float,resultHeight:Float,
|
|
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){
|
|
346
339
|
var tmpURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
|
|
347
340
|
.appendingPathComponent(ProcessInfo().globallyUniqueString)
|
|
348
341
|
.appendingPathExtension("mp4")
|
|
@@ -371,7 +364,7 @@ func makeValidUri(filePath: String) -> String {
|
|
|
371
364
|
AVSampleRateKey: NSNumber(value: Float(44100))
|
|
372
365
|
]
|
|
373
366
|
|
|
374
|
-
|
|
367
|
+
|
|
375
368
|
exporter.export(progressHandler: { (progress) in
|
|
376
369
|
let _progress:Float=progress*100;
|
|
377
370
|
if(Int(_progress)==self.videoCompressionCounter)
|
|
@@ -410,6 +403,4 @@ func makeValidUri(filePath: String) -> String {
|
|
|
410
403
|
let track = asset.tracks[videoTrackIndex];
|
|
411
404
|
return track;
|
|
412
405
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
406
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = exports.
|
|
6
|
+
exports.default = exports.backgroundUpload = void 0;
|
|
7
7
|
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
|
|
@@ -45,12 +45,6 @@ const backgroundUpload = async (url, fileUrl, options, onProgress) => {
|
|
|
45
45
|
};
|
|
46
46
|
|
|
47
47
|
exports.backgroundUpload = backgroundUpload;
|
|
48
|
-
|
|
49
|
-
const cancelCompression = cancellationId => {
|
|
50
|
-
return NativeVideoCompressor.cancelCompression(cancellationId);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
exports.cancelCompression = cancelCompression;
|
|
54
48
|
const Video = {
|
|
55
49
|
compress: async (fileUrl, options, onProgress) => {
|
|
56
50
|
const uuid = (0, _utils.uuidv4)();
|
|
@@ -86,10 +80,6 @@ const Video = {
|
|
|
86
80
|
modifiedOptions.minimumFileSizeForCompress = options === null || options === void 0 ? void 0 : options.minimumFileSizeForCompress;
|
|
87
81
|
}
|
|
88
82
|
|
|
89
|
-
if (options !== null && options !== void 0 && options.getCancellationId) {
|
|
90
|
-
options === null || options === void 0 ? void 0 : options.getCancellationId(uuid);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
83
|
const result = await NativeVideoCompressor.compress(fileUrl, modifiedOptions);
|
|
94
84
|
return result;
|
|
95
85
|
} finally {
|
|
@@ -100,7 +90,6 @@ const Video = {
|
|
|
100
90
|
}
|
|
101
91
|
},
|
|
102
92
|
backgroundUpload,
|
|
103
|
-
cancelCompression,
|
|
104
93
|
|
|
105
94
|
activateBackgroundTask(onExpired) {
|
|
106
95
|
if (onExpired) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["VideoCompressEventEmitter","NativeEventEmitter","NativeModules","VideoCompressor","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","written","total","Platform","OS","includes","replace","result","upload","method","httpMethod","headers","remove","
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["VideoCompressEventEmitter","NativeEventEmitter","NativeModules","VideoCompressor","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","written","total","Platform","OS","includes","replace","result","upload","method","httpMethod","headers","remove","Video","compress","progress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners"],"mappings":";;;;;;;AAAA;;AAMA;;AA8DA,MAAMA,yBAAyB,GAAG,IAAIC,+BAAJ,CAChCC,2BAAcC,eADkB,CAAlC;AAIA,MAAMC,qBAAqB,GAAGF,2BAAcC,eAA5C;;AAEO,MAAME,gBAAgB,GAAG,OAC9BC,GAD8B,EAE9BC,OAF8B,EAG9BC,OAH8B,EAI9BC,UAJ8B,KAKb;AACjB,QAAMC,IAAI,GAAG,oBAAb;AACA,MAAIC,YAAJ;;AACA,MAAI;AACF,QAAIF,UAAJ,EAAgB;AACdE,MAAAA,YAAY,GAAGX,yBAAyB,CAACY,WAA1B,CACb,yBADa,EAEZC,KAAD,IAAgB;AACd,YAAIA,KAAK,CAACH,IAAN,KAAeA,IAAnB,EAAyB;AACvBD,UAAAA,UAAU,CAACI,KAAK,CAACC,IAAN,CAAWC,OAAZ,EAAqBF,KAAK,CAACC,IAAN,CAAWE,KAAhC,CAAV;AACD;AACF,OANY,CAAf;AAQD;;AACD,QAAIC,sBAASC,EAAT,KAAgB,SAAhB,IAA6BX,OAAO,CAACY,QAAR,CAAiB,SAAjB,CAAjC,EAA8D;AAC5DZ,MAAAA,OAAO,GAAGA,OAAO,CAACa,OAAR,CAAgB,SAAhB,EAA2B,EAA3B,CAAV;AACD;;AACD,UAAMC,MAAM,GAAG,MAAMjB,qBAAqB,CAACkB,MAAtB,CAA6Bf,OAA7B,EAAsC;AACzDG,MAAAA,IADyD;AAEzDa,MAAAA,MAAM,EAAEf,OAAO,CAACgB,UAFyC;AAGzDC,MAAAA,OAAO,EAAEjB,OAAO,CAACiB,OAHwC;AAIzDnB,MAAAA;AAJyD,KAAtC,CAArB;AAMA,WAAOe,MAAP;AACD,GArBD,SAqBU;AACR;AACA,QAAIV,YAAJ,EAAkB;AAChBA,MAAAA,YAAY,CAACe,MAAb;AACD;AACF;AACF,CAnCM;;;AAqCP,MAAMC,KAA0B,GAAG;AACjCC,EAAAA,QAAQ,EAAE,OACRrB,OADQ,EAERC,OAFQ,EAQRC,UARQ,KASL;AACH,UAAMC,IAAI,GAAG,oBAAb;AACA,QAAIC,YAAJ;;AACA,QAAI;AACF,UAAIF,UAAJ,EAAgB;AACdE,QAAAA,YAAY,GAAGX,yBAAyB,CAACY,WAA1B,CACb,uBADa,EAEZC,KAAD,IAAgB;AACd,cAAIA,KAAK,CAACH,IAAN,KAAeA,IAAnB,EAAyB;AACvBD,YAAAA,UAAU,CAACI,KAAK,CAACC,IAAN,CAAWe,QAAZ,CAAV;AACD;AACF,SANY,CAAf;AAQD;;AACD,YAAMC,eAML,GAAG;AAAEpB,QAAAA;AAAF,OANJ;AAOA,UAAIF,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEuB,OAAb,EAAsBD,eAAe,CAACC,OAAhB,GAA0BvB,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAEuB,OAAnC;;AACtB,UAAIvB,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEwB,iBAAb,EAAgC;AAC9BF,QAAAA,eAAe,CAACE,iBAAhB,GAAoCxB,OAApC,aAAoCA,OAApC,uBAAoCA,OAAO,CAAEwB,iBAA7C;AACD,OAFD,MAEO;AACLF,QAAAA,eAAe,CAACE,iBAAhB,GAAoC,QAApC;AACD;;AACD,UAAIxB,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEyB,OAAb,EAAsB;AACpBH,QAAAA,eAAe,CAACG,OAAhB,GAA0BzB,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAEyB,OAAnC;AACD,OAFD,MAEO;AACLH,QAAAA,eAAe,CAACG,OAAhB,GAA0B,GAA1B;AACD;;AACD,UAAIzB,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAE0B,0BAAb,EAAyC;AACvCJ,QAAAA,eAAe,CAACI,0BAAhB,GACE1B,OADF,aACEA,OADF,uBACEA,OAAO,CAAE0B,0BADX;AAED;;AACD,YAAMb,MAAM,GAAG,MAAMjB,qBAAqB,CAACwB,QAAtB,CACnBrB,OADmB,EAEnBuB,eAFmB,CAArB;AAIA,aAAOT,MAAP;AACD,KAtCD,SAsCU;AACR;AACA,UAAIV,YAAJ,EAAkB;AAChBA,QAAAA,YAAY,CAACe,MAAb;AACD;AACF;AACF,GAzDgC;AA0DjCrB,EAAAA,gBA1DiC;;AA2DjC8B,EAAAA,sBAAsB,CAACC,SAAD,EAAa;AACjC,QAAIA,SAAJ,EAAe;AACb,YAAMzB,YAAqC,GACzCX,yBAAyB,CAACY,WAA1B,CACE,uBADF,EAEGC,KAAD,IAAgB;AACduB,QAAAA,SAAS,CAACvB,KAAD,CAAT;;AACA,YAAIF,YAAJ,EAAkB;AAChBA,UAAAA,YAAY,CAACe,MAAb;AACD;AACF,OAPH,CADF;AAUD;;AACD,WAAOtB,qBAAqB,CAAC+B,sBAAtB,CAA6C,EAA7C,CAAP;AACD,GAzEgC;;AA0EjCE,EAAAA,wBAAwB,GAAG;AACzBrC,IAAAA,yBAAyB,CAACsC,kBAA1B,CAA6C,uBAA7C;AACA,WAAOlC,qBAAqB,CAACiC,wBAAtB,CAA+C,EAA/C,CAAP;AACD;;AA7EgC,CAAnC;eAgFeV,K","sourcesContent":["import {\n NativeModules,\n NativeEventEmitter,\n Platform,\n NativeEventSubscription,\n} 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\nexport const backgroundUpload = async (\n url: string,\n fileUrl: string,\n options: FileSystemUploadOptions,\n onProgress?: (writtem: number, total: number) => void\n): Promise<any> => {\n const uuid = uuidv4();\n let subscription: NativeEventSubscription;\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 // @ts-ignore\n if (subscription) {\n subscription.remove();\n }\n }\n};\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: NativeEventSubscription;\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 // @ts-ignore\n if (subscription) {\n subscription.remove();\n }\n }\n },\n backgroundUpload,\n activateBackgroundTask(onExpired?) {\n if (onExpired) {\n const subscription: NativeEventSubscription =\n VideoCompressEventEmitter.addListener(\n 'backgroundTaskExpired',\n (event: any) => {\n onExpired(event);\n if (subscription) {\n subscription.remove();\n }\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"]}
|
|
@@ -33,9 +33,6 @@ export const backgroundUpload = async (url, fileUrl, options, onProgress) => {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
|
-
export const cancelCompression = cancellationId => {
|
|
37
|
-
return NativeVideoCompressor.cancelCompression(cancellationId);
|
|
38
|
-
};
|
|
39
36
|
const Video = {
|
|
40
37
|
compress: async (fileUrl, options, onProgress) => {
|
|
41
38
|
const uuid = uuidv4();
|
|
@@ -71,10 +68,6 @@ const Video = {
|
|
|
71
68
|
modifiedOptions.minimumFileSizeForCompress = options === null || options === void 0 ? void 0 : options.minimumFileSizeForCompress;
|
|
72
69
|
}
|
|
73
70
|
|
|
74
|
-
if (options !== null && options !== void 0 && options.getCancellationId) {
|
|
75
|
-
options === null || options === void 0 ? void 0 : options.getCancellationId(uuid);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
71
|
const result = await NativeVideoCompressor.compress(fileUrl, modifiedOptions);
|
|
79
72
|
return result;
|
|
80
73
|
} finally {
|
|
@@ -85,7 +78,6 @@ const Video = {
|
|
|
85
78
|
}
|
|
86
79
|
},
|
|
87
80
|
backgroundUpload,
|
|
88
|
-
cancelCompression,
|
|
89
81
|
|
|
90
82
|
activateBackgroundTask(onExpired) {
|
|
91
83
|
if (onExpired) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.tsx"],"names":["NativeModules","NativeEventEmitter","Platform","uuidv4","VideoCompressEventEmitter","VideoCompressor","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","written","total","OS","includes","replace","result","upload","method","httpMethod","headers","remove","
|
|
1
|
+
{"version":3,"sources":["index.tsx"],"names":["NativeModules","NativeEventEmitter","Platform","uuidv4","VideoCompressEventEmitter","VideoCompressor","NativeVideoCompressor","backgroundUpload","url","fileUrl","options","onProgress","uuid","subscription","addListener","event","data","written","total","OS","includes","replace","result","upload","method","httpMethod","headers","remove","Video","compress","progress","modifiedOptions","bitrate","compressionMethod","maxSize","minimumFileSizeForCompress","activateBackgroundTask","onExpired","deactivateBackgroundTask","removeAllListeners"],"mappings":"AAAA,SACEA,aADF,EAEEC,kBAFF,EAGEC,QAHF,QAKO,cALP;AAMA,SAASC,MAAT,QAAuB,UAAvB;AA8DA,MAAMC,yBAAyB,GAAG,IAAIH,kBAAJ,CAChCD,aAAa,CAACK,eADkB,CAAlC;AAIA,MAAMC,qBAAqB,GAAGN,aAAa,CAACK,eAA5C;AAEA,OAAO,MAAME,gBAAgB,GAAG,OAC9BC,GAD8B,EAE9BC,OAF8B,EAG9BC,OAH8B,EAI9BC,UAJ8B,KAKb;AACjB,QAAMC,IAAI,GAAGT,MAAM,EAAnB;AACA,MAAIU,YAAJ;;AACA,MAAI;AACF,QAAIF,UAAJ,EAAgB;AACdE,MAAAA,YAAY,GAAGT,yBAAyB,CAACU,WAA1B,CACb,yBADa,EAEZC,KAAD,IAAgB;AACd,YAAIA,KAAK,CAACH,IAAN,KAAeA,IAAnB,EAAyB;AACvBD,UAAAA,UAAU,CAACI,KAAK,CAACC,IAAN,CAAWC,OAAZ,EAAqBF,KAAK,CAACC,IAAN,CAAWE,KAAhC,CAAV;AACD;AACF,OANY,CAAf;AAQD;;AACD,QAAIhB,QAAQ,CAACiB,EAAT,KAAgB,SAAhB,IAA6BV,OAAO,CAACW,QAAR,CAAiB,SAAjB,CAAjC,EAA8D;AAC5DX,MAAAA,OAAO,GAAGA,OAAO,CAACY,OAAR,CAAgB,SAAhB,EAA2B,EAA3B,CAAV;AACD;;AACD,UAAMC,MAAM,GAAG,MAAMhB,qBAAqB,CAACiB,MAAtB,CAA6Bd,OAA7B,EAAsC;AACzDG,MAAAA,IADyD;AAEzDY,MAAAA,MAAM,EAAEd,OAAO,CAACe,UAFyC;AAGzDC,MAAAA,OAAO,EAAEhB,OAAO,CAACgB,OAHwC;AAIzDlB,MAAAA;AAJyD,KAAtC,CAArB;AAMA,WAAOc,MAAP;AACD,GArBD,SAqBU;AACR;AACA,QAAIT,YAAJ,EAAkB;AAChBA,MAAAA,YAAY,CAACc,MAAb;AACD;AACF;AACF,CAnCM;AAqCP,MAAMC,KAA0B,GAAG;AACjCC,EAAAA,QAAQ,EAAE,OACRpB,OADQ,EAERC,OAFQ,EAQRC,UARQ,KASL;AACH,UAAMC,IAAI,GAAGT,MAAM,EAAnB;AACA,QAAIU,YAAJ;;AACA,QAAI;AACF,UAAIF,UAAJ,EAAgB;AACdE,QAAAA,YAAY,GAAGT,yBAAyB,CAACU,WAA1B,CACb,uBADa,EAEZC,KAAD,IAAgB;AACd,cAAIA,KAAK,CAACH,IAAN,KAAeA,IAAnB,EAAyB;AACvBD,YAAAA,UAAU,CAACI,KAAK,CAACC,IAAN,CAAWc,QAAZ,CAAV;AACD;AACF,SANY,CAAf;AAQD;;AACD,YAAMC,eAML,GAAG;AAAEnB,QAAAA;AAAF,OANJ;AAOA,UAAIF,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEsB,OAAb,EAAsBD,eAAe,CAACC,OAAhB,GAA0BtB,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAEsB,OAAnC;;AACtB,UAAItB,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEuB,iBAAb,EAAgC;AAC9BF,QAAAA,eAAe,CAACE,iBAAhB,GAAoCvB,OAApC,aAAoCA,OAApC,uBAAoCA,OAAO,CAAEuB,iBAA7C;AACD,OAFD,MAEO;AACLF,QAAAA,eAAe,CAACE,iBAAhB,GAAoC,QAApC;AACD;;AACD,UAAIvB,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEwB,OAAb,EAAsB;AACpBH,QAAAA,eAAe,CAACG,OAAhB,GAA0BxB,OAA1B,aAA0BA,OAA1B,uBAA0BA,OAAO,CAAEwB,OAAnC;AACD,OAFD,MAEO;AACLH,QAAAA,eAAe,CAACG,OAAhB,GAA0B,GAA1B;AACD;;AACD,UAAIxB,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEyB,0BAAb,EAAyC;AACvCJ,QAAAA,eAAe,CAACI,0BAAhB,GACEzB,OADF,aACEA,OADF,uBACEA,OAAO,CAAEyB,0BADX;AAED;;AACD,YAAMb,MAAM,GAAG,MAAMhB,qBAAqB,CAACuB,QAAtB,CACnBpB,OADmB,EAEnBsB,eAFmB,CAArB;AAIA,aAAOT,MAAP;AACD,KAtCD,SAsCU;AACR;AACA,UAAIT,YAAJ,EAAkB;AAChBA,QAAAA,YAAY,CAACc,MAAb;AACD;AACF;AACF,GAzDgC;AA0DjCpB,EAAAA,gBA1DiC;;AA2DjC6B,EAAAA,sBAAsB,CAACC,SAAD,EAAa;AACjC,QAAIA,SAAJ,EAAe;AACb,YAAMxB,YAAqC,GACzCT,yBAAyB,CAACU,WAA1B,CACE,uBADF,EAEGC,KAAD,IAAgB;AACdsB,QAAAA,SAAS,CAACtB,KAAD,CAAT;;AACA,YAAIF,YAAJ,EAAkB;AAChBA,UAAAA,YAAY,CAACc,MAAb;AACD;AACF,OAPH,CADF;AAUD;;AACD,WAAOrB,qBAAqB,CAAC8B,sBAAtB,CAA6C,EAA7C,CAAP;AACD,GAzEgC;;AA0EjCE,EAAAA,wBAAwB,GAAG;AACzBlC,IAAAA,yBAAyB,CAACmC,kBAA1B,CAA6C,uBAA7C;AACA,WAAOjC,qBAAqB,CAACgC,wBAAtB,CAA+C,EAA/C,CAAP;AACD;;AA7EgC,CAAnC;AAgFA,eAAeV,KAAf","sourcesContent":["import {\n NativeModules,\n NativeEventEmitter,\n Platform,\n NativeEventSubscription,\n} 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\nexport const backgroundUpload = async (\n url: string,\n fileUrl: string,\n options: FileSystemUploadOptions,\n onProgress?: (writtem: number, total: number) => void\n): Promise<any> => {\n const uuid = uuidv4();\n let subscription: NativeEventSubscription;\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 // @ts-ignore\n if (subscription) {\n subscription.remove();\n }\n }\n};\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: NativeEventSubscription;\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 // @ts-ignore\n if (subscription) {\n subscription.remove();\n }\n }\n },\n backgroundUpload,\n activateBackgroundTask(onExpired?) {\n if (onExpired) {\n const subscription: NativeEventSubscription =\n VideoCompressEventEmitter.addListener(\n 'backgroundTaskExpired',\n (event: any) => {\n onExpired(event);\n if (subscription) {\n subscription.remove();\n }\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"]}
|
|
@@ -9,7 +9,6 @@ declare type videoCompresssionType = {
|
|
|
9
9
|
maxSize?: number;
|
|
10
10
|
compressionMethod?: compressionMethod;
|
|
11
11
|
minimumFileSizeForCompress?: number;
|
|
12
|
-
getCancellationId?: (cancellationId: string) => void;
|
|
13
12
|
};
|
|
14
13
|
export declare enum FileSystemSessionType {
|
|
15
14
|
BACKGROUND = 0,
|
|
@@ -34,12 +33,10 @@ export declare type FileSystemUploadOptions = ({
|
|
|
34
33
|
};
|
|
35
34
|
export declare type VideoCompressorType = {
|
|
36
35
|
compress(fileUrl: string, options?: videoCompresssionType, onProgress?: (progress: number) => void): Promise<string>;
|
|
37
|
-
cancelCompression(cancellationId: string): void;
|
|
38
36
|
backgroundUpload(url: string, fileUrl: string, options: FileSystemUploadOptions, onProgress?: (writtem: number, total: number) => void): Promise<any>;
|
|
39
37
|
activateBackgroundTask(onExpired?: (data: any) => void): Promise<any>;
|
|
40
38
|
deactivateBackgroundTask(): Promise<any>;
|
|
41
39
|
};
|
|
42
40
|
export declare const backgroundUpload: (url: string, fileUrl: string, options: FileSystemUploadOptions, onProgress?: ((writtem: number, total: number) => void) | undefined) => Promise<any>;
|
|
43
|
-
export declare const cancelCompression: (cancellationId: string) => any;
|
|
44
41
|
declare const Video: VideoCompressorType;
|
|
45
42
|
export default Video;
|
package/package.json
CHANGED
package/src/Video/index.tsx
CHANGED
|
@@ -21,7 +21,6 @@ type videoCompresssionType = {
|
|
|
21
21
|
maxSize?: number;
|
|
22
22
|
compressionMethod?: compressionMethod;
|
|
23
23
|
minimumFileSizeForCompress?: number;
|
|
24
|
-
getCancellationId?: (cancellationId: string) => void;
|
|
25
24
|
};
|
|
26
25
|
|
|
27
26
|
export declare enum FileSystemSessionType {
|
|
@@ -57,7 +56,6 @@ export type VideoCompressorType = {
|
|
|
57
56
|
options?: videoCompresssionType,
|
|
58
57
|
onProgress?: (progress: number) => void
|
|
59
58
|
): Promise<string>;
|
|
60
|
-
cancelCompression(cancellationId: string): void;
|
|
61
59
|
backgroundUpload(
|
|
62
60
|
url: string,
|
|
63
61
|
fileUrl: string,
|
|
@@ -111,14 +109,15 @@ export const backgroundUpload = async (
|
|
|
111
109
|
}
|
|
112
110
|
};
|
|
113
111
|
|
|
114
|
-
export const cancelCompression = (cancellationId: string) => {
|
|
115
|
-
return NativeVideoCompressor.cancelCompression(cancellationId);
|
|
116
|
-
};
|
|
117
|
-
|
|
118
112
|
const Video: VideoCompressorType = {
|
|
119
113
|
compress: async (
|
|
120
114
|
fileUrl: string,
|
|
121
|
-
options?:
|
|
115
|
+
options?: {
|
|
116
|
+
bitrate?: number;
|
|
117
|
+
compressionMethod?: compressionMethod;
|
|
118
|
+
maxSize?: number;
|
|
119
|
+
minimumFileSizeForCompress?: number;
|
|
120
|
+
},
|
|
122
121
|
onProgress?: (progress: number) => void
|
|
123
122
|
) => {
|
|
124
123
|
const uuid = uuidv4();
|
|
@@ -156,9 +155,6 @@ const Video: VideoCompressorType = {
|
|
|
156
155
|
modifiedOptions.minimumFileSizeForCompress =
|
|
157
156
|
options?.minimumFileSizeForCompress;
|
|
158
157
|
}
|
|
159
|
-
if (options?.getCancellationId) {
|
|
160
|
-
options?.getCancellationId(uuid);
|
|
161
|
-
}
|
|
162
158
|
const result = await NativeVideoCompressor.compress(
|
|
163
159
|
fileUrl,
|
|
164
160
|
modifiedOptions
|
|
@@ -172,7 +168,6 @@ const Video: VideoCompressorType = {
|
|
|
172
168
|
}
|
|
173
169
|
},
|
|
174
170
|
backgroundUpload,
|
|
175
|
-
cancelCompression,
|
|
176
171
|
activateBackgroundTask(onExpired?) {
|
|
177
172
|
if (onExpired) {
|
|
178
173
|
const subscription: NativeEventSubscription =
|