-
-
Notifications
You must be signed in to change notification settings - Fork 82
/
Utils.java
89 lines (77 loc) · 2.98 KB
/
Utils.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package com.reactnativecompressor.Utils;
import androidx.annotation.Nullable;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.reactnativecompressor.Video.videoslimmer.VideoSlimTask;
import com.reactnativecompressor.Video.videoslimmer.VideoSlimmer;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class Utils {
static int videoCompressionThreshold=10;
static int currentVideoCompression=0;
static Map<String, VideoSlimTask> compressorExports = new HashMap<>();
public static String generateCacheFilePath(String extension, ReactApplicationContext reactContext){
File outputDir = reactContext.getCacheDir();
String outputUri = String.format("%s/%s." + extension, outputDir.getPath(), UUID.randomUUID().toString());
return outputUri;
}
public static void compressVideo(String srcPath, String destinationPath, int resultWidth, int resultHeight, float videoBitRate, String uuid, Promise promise, ReactApplicationContext reactContext){
try{
VideoSlimTask export=VideoSlimmer.convertVideo(srcPath, destinationPath, resultWidth, resultHeight, (int) videoBitRate, new VideoSlimmer.ProgressListener() {
@Override
public void onStart() {
//convert start
}
@Override
public void onFinish(boolean result) {
//convert finish,result(true is success,false is fail)
promise.resolve("file:/"+destinationPath);
}
@Override
public void onError(String errorMessage) {
promise.resolve(srcPath);
}
@Override
public void onProgress(float percent) {
int roundProgress=Math.round(percent);
if(roundProgress%videoCompressionThreshold==0&&roundProgress>currentVideoCompression) {
WritableMap params = Arguments.createMap();
WritableMap data = Arguments.createMap();
params.putString("uuid", uuid);
data.putDouble("progress", percent / 100);
params.putMap("data", data);
sendEvent(reactContext, "videoCompressProgress", params);
currentVideoCompression=roundProgress;
}
}
});
compressorExports.put(uuid, export);
} catch (Exception ex) {
promise.reject(ex);
}
finally {
currentVideoCompression=0;
}
}
public static void cancelCompressionHelper(String uuid){
try{
VideoSlimTask export=compressorExports.get(uuid);
export.cancel(true);
}
catch (Exception ex) {
}
}
private static void sendEvent(ReactContext reactContext,
String eventName,
@Nullable WritableMap params) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
}