diff options
Diffstat (limited to 'src/lib/media')
-rw-r--r-- | src/lib/media/video/compress.ts | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/lib/media/video/compress.ts b/src/lib/media/video/compress.ts index e783a8438..ebbbc2034 100644 --- a/src/lib/media/video/compress.ts +++ b/src/lib/media/video/compress.ts @@ -1,9 +1,13 @@ import {getVideoMetaData, Video} from 'react-native-compressor' +import {ImagePickerAsset} from 'expo-image-picker' +import {SUPPORTED_MIME_TYPES, SupportedMimeTypes} from '#/lib/constants' import {CompressedVideo} from './types' +const MIN_SIZE_FOR_COMPRESSION = 1024 * 1024 * 25 // 25mb + export async function compressVideo( - file: string, + file: ImagePickerAsset, opts?: { signal?: AbortSignal onProgress?: (progress: number) => void @@ -11,12 +15,21 @@ export async function compressVideo( ): Promise<CompressedVideo> { const {onProgress, signal} = opts || {} + const isAcceptableFormat = SUPPORTED_MIME_TYPES.includes( + file.mimeType as SupportedMimeTypes, + ) + + const minimumFileSizeForCompress = isAcceptableFormat + ? MIN_SIZE_FOR_COMPRESSION + : 0 + const compressed = await Video.compress( - file, + file.uri, { compressionMethod: 'manual', bitrate: 3_000_000, // 3mbps maxSize: 1920, + minimumFileSizeForCompress, getCancellationId: id => { if (signal) { signal.addEventListener('abort', () => { |