diff --git a/packages/uni-api/src/index.ts b/packages/uni-api/src/index.ts index 4f5b847baf0be8c96d89f4479663c9bd999edd9a..4d058a6203ca7bd6d4d3a992608d1c783ca21f5b 100644 --- a/packages/uni-api/src/index.ts +++ b/packages/uni-api/src/index.ts @@ -54,6 +54,7 @@ export * from './protocols/media/saveImageToPhotosAlbum' export * from './protocols/media/saveVideoToPhotosAlbum' export * from './protocols/media/getRecorderManager' export * from './protocols/media/compressImage' +export * from './protocols/media/compressVideo' export * from './protocols/network/request' export * from './protocols/network/downloadFile' diff --git a/packages/uni-api/src/protocols/media/compressVideo.ts b/packages/uni-api/src/protocols/media/compressVideo.ts new file mode 100644 index 0000000000000000000000000000000000000000..dabaaa0629e9f2347bcb1e47d40904b4041435a3 --- /dev/null +++ b/packages/uni-api/src/protocols/media/compressVideo.ts @@ -0,0 +1,23 @@ +import { getRealPath } from '@dcloudio/uni-platform' + +export const API_COMPRESS_VIDEO = 'compressVideo' +export type API_TYPE_COMPRESS_VIDEO = typeof uni.compressVideo + +export const CompressVideoOptions: ApiOptions = { + formatArgs: { + src(src, params) { + params.src = getRealPath(src) + }, + }, +} + +export const CompressVideoProtocol: ApiProtocol = { + src: { + type: String, + required: true, + }, + quality: String as any, + bitrate: Number, + fps: Number, + resolution: Number, +} diff --git a/packages/uni-app-plus/src/service/api/index.ts b/packages/uni-app-plus/src/service/api/index.ts index 19de2e81d5ecf495518cfa9c195548178430b7cd..67ab13893288a2439709f948a3576142bcb4d208 100644 --- a/packages/uni-app-plus/src/service/api/index.ts +++ b/packages/uni-app-plus/src/service/api/index.ts @@ -18,6 +18,7 @@ export * from './media/getRecorderManager' export * from './media/saveVideoToPhotosAlbum' export * from './media/saveImageToPhotosAlbum' export * from './media/compressImage' +export * from './media/compressVideo' export * from './keyboard/keyboard' diff --git a/packages/uni-app-plus/src/service/api/media/compressVideo.ts b/packages/uni-app-plus/src/service/api/media/compressVideo.ts new file mode 100644 index 0000000000000000000000000000000000000000..1a8aaffd09fa007ec3a0a49f8b178b9f385c833b --- /dev/null +++ b/packages/uni-app-plus/src/service/api/media/compressVideo.ts @@ -0,0 +1,32 @@ +import { extend } from '@vue/shared' +import { getFileName } from '../../../helpers/file' +import { TEMP_PATH } from '../constants' +import { + API_COMPRESS_VIDEO, + API_TYPE_COMPRESS_VIDEO, + defineAsyncApi, + CompressVideoOptions, + CompressVideoProtocol, +} from '@dcloudio/uni-api' + +export const compressVideo = defineAsyncApi( + API_COMPRESS_VIDEO, + (options, { resolve, reject }) => { + const dst = `${TEMP_PATH}/compressed/${Date.now()}_${getFileName( + options.src + )}` + plus.zip.compressVideo( + extend({}, options, { + dst, + }), + () => { + resolve({ + tempFilePath: dst, + }) + }, + reject + ) + }, + CompressVideoProtocol, + CompressVideoOptions +)