react-native-compressor
Version:
Compress Image, Video, and Audio same like Whatsapp & Auto/Manual Compression | Background Upload | Download File | Create Video Thumbnail
87 lines (86 loc) • 2.87 kB
JavaScript
;
import { NativeEventEmitter } from 'react-native';
import { Compressor } from '../Main';
import { uuidv4 } from '../utils';
const VideoCompressEventEmitter = new NativeEventEmitter(Compressor);
const NativeVideoCompressor = Compressor;
export const cancelCompression = cancellationId => {
return NativeVideoCompressor.cancelCompression(cancellationId);
};
const Video = {
compress: async (fileUrl, options, onProgress) => {
const uuid = uuidv4();
let subscription;
let subscription2;
try {
if (onProgress) {
subscription = VideoCompressEventEmitter.addListener('videoCompressProgress', event => {
if (event.uuid === uuid) {
onProgress(event.data.progress);
}
});
}
if (options?.downloadProgress) {
//@ts-ignore
subscription2 = VideoCompressEventEmitter.addListener('downloadProgress', event => {
if (event.uuid === uuid) {
options.downloadProgress && options.downloadProgress(event.data.progress);
}
});
}
const modifiedOptions = {
uuid
};
if (options?.progressDivider) modifiedOptions.progressDivider = options?.progressDivider;
if (options?.bitrate) modifiedOptions.bitrate = options?.bitrate;
if (options?.compressionMethod) {
modifiedOptions.compressionMethod = options?.compressionMethod;
} else {
modifiedOptions.compressionMethod = 'auto';
}
if (options?.maxSize) {
modifiedOptions.maxSize = options?.maxSize;
} else {
modifiedOptions.maxSize = 640;
}
if (options?.minimumFileSizeForCompress !== undefined) {
modifiedOptions.minimumFileSizeForCompress = options?.minimumFileSizeForCompress;
}
if (options?.stripAudio) {
modifiedOptions.stripAudio = options.stripAudio;
}
if (options?.getCancellationId) {
options?.getCancellationId(uuid);
}
const result = await NativeVideoCompressor.compress(fileUrl, modifiedOptions);
return result;
} finally {
// @ts-ignore
if (subscription) {
subscription.remove();
}
//@ts-ignore
if (subscription2) {
subscription2.remove();
}
}
},
cancelCompression,
activateBackgroundTask(onExpired) {
if (onExpired) {
const subscription = VideoCompressEventEmitter.addListener('backgroundTaskExpired', event => {
onExpired(event);
if (subscription) {
subscription.remove();
}
});
}
return NativeVideoCompressor.activateBackgroundTask({});
},
deactivateBackgroundTask() {
VideoCompressEventEmitter.removeAllListeners('backgroundTaskExpired');
return NativeVideoCompressor.deactivateBackgroundTask({});
}
};
export default Video;
//# sourceMappingURL=index.js.map