about summary refs log tree commit diff
path: root/src/lib/media/video/compress.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/media/video/compress.ts')
-rw-r--r--src/lib/media/video/compress.ts30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/lib/media/video/compress.ts b/src/lib/media/video/compress.ts
new file mode 100644
index 000000000..60e5e94a0
--- /dev/null
+++ b/src/lib/media/video/compress.ts
@@ -0,0 +1,30 @@
+import {getVideoMetaData, Video} from 'react-native-compressor'
+
+export type CompressedVideo = {
+  uri: string
+  size: number
+}
+
+export async function compressVideo(
+  file: string,
+  opts?: {
+    getCancellationId?: (id: string) => void
+    onProgress?: (progress: number) => void
+  },
+): Promise<CompressedVideo> {
+  const {onProgress, getCancellationId} = opts || {}
+
+  const compressed = await Video.compress(
+    file,
+    {
+      getCancellationId,
+      compressionMethod: 'manual',
+      bitrate: 3_000_000, // 3mbps
+      maxSize: 1920,
+    },
+    onProgress,
+  )
+
+  const info = await getVideoMetaData(compressed)
+  return {uri: compressed, size: info.size}
+}