From e261637c3c687cf04f9e66ad399045223bf46b69 Mon Sep 17 00:00:00 2001 From: tianjiaxing Date: Mon, 28 Jun 2021 15:27:56 +0800 Subject: [PATCH] feat(App): compressVideo --- packages/uni-api/src/index.ts | 1 + .../src/protocols/media/compressVideo.ts | 23 +++++++++++++ .../uni-app-plus/src/service/api/index.ts | 1 + .../src/service/api/media/compressVideo.ts | 32 +++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 packages/uni-api/src/protocols/media/compressVideo.ts create mode 100644 packages/uni-app-plus/src/service/api/media/compressVideo.ts diff --git a/packages/uni-api/src/index.ts b/packages/uni-api/src/index.ts index 4f5b847ba..4d058a620 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 000000000..dabaaa062 --- /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 19de2e81d..67ab13893 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 000000000..1a8aaffd0 --- /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 +) -- GitLab