@tarojs/taro-h5 3.7.0-alpha.2 → 3.7.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/ad/index.js +2 -2
- package/dist/api/ad/index.js.map +1 -1
- package/dist/api/ai/facial.js +3 -3
- package/dist/api/ai/facial.js.map +1 -1
- package/dist/api/ai/index.d.ts +3 -2
- package/dist/api/ai/index.js +1 -0
- package/dist/api/ai/index.js.map +1 -1
- package/dist/api/ai/inference.d.ts +3 -0
- package/dist/api/ai/inference.js +8 -0
- package/dist/api/ai/inference.js.map +1 -0
- package/dist/api/ai/visual.js +2 -2
- package/dist/api/ai/visual.js.map +1 -1
- package/dist/api/alipay/index.js +1 -1
- package/dist/api/alipay/index.js.map +1 -1
- package/dist/api/base/crypto.js +1 -1
- package/dist/api/base/crypto.js.map +1 -1
- package/dist/api/base/debug.js +3 -3
- package/dist/api/base/debug.js.map +1 -1
- package/dist/api/base/index.d.ts +8 -9
- package/dist/api/base/index.js +6 -6
- package/dist/api/base/index.js.map +1 -1
- package/dist/api/base/performance.d.ts +4 -1
- package/dist/api/base/performance.js +6 -3
- package/dist/api/base/performance.js.map +1 -1
- package/dist/api/base/system.d.ts +4 -1
- package/dist/api/base/system.js +6 -3
- package/dist/api/base/system.js.map +1 -1
- package/dist/api/base/update.js +2 -2
- package/dist/api/base/update.js.map +1 -1
- package/dist/api/base/weapp/app-event.d.ts +13 -11
- package/dist/api/base/weapp/app-event.js +84 -14
- package/dist/api/base/weapp/app-event.js.map +1 -1
- package/dist/api/canvas/CanvasContext.d.ts +2 -1
- package/dist/api/canvas/CanvasContext.js.map +1 -1
- package/dist/api/canvas/index.d.ts +4 -4
- package/dist/api/canvas/index.js +1 -1
- package/dist/api/canvas/index.js.map +1 -1
- package/dist/api/data-analysis/index.js +4 -4
- package/dist/api/data-analysis/index.js.map +1 -1
- package/dist/api/device/accelerometer.js +1 -2
- package/dist/api/device/accelerometer.js.map +1 -1
- package/dist/api/device/accessibility.js +1 -1
- package/dist/api/device/accessibility.js.map +1 -1
- package/dist/api/device/battery.js +1 -1
- package/dist/api/device/battery.js.map +1 -1
- package/dist/api/device/bluetooth-ble.js +16 -16
- package/dist/api/device/bluetooth-ble.js.map +1 -1
- package/dist/api/device/bluetooth-peripheral.js +3 -3
- package/dist/api/device/bluetooth-peripheral.js.map +1 -1
- package/dist/api/device/bluetooth.js +13 -13
- package/dist/api/device/bluetooth.js.map +1 -1
- package/dist/api/device/calendar.d.ts +3 -2
- package/dist/api/device/calendar.js +142 -3
- package/dist/api/device/calendar.js.map +1 -1
- package/dist/api/device/compass.js +1 -2
- package/dist/api/device/compass.js.map +1 -1
- package/dist/api/device/contact.js +2 -2
- package/dist/api/device/contact.js.map +1 -1
- package/dist/api/device/crypto.js +1 -1
- package/dist/api/device/crypto.js.map +1 -1
- package/dist/api/device/gyroscope.js +4 -4
- package/dist/api/device/gyroscope.js.map +1 -1
- package/dist/api/device/iBeacon.js +7 -7
- package/dist/api/device/iBeacon.js.map +1 -1
- package/dist/api/device/index.d.ts +24 -23
- package/dist/api/device/index.js +3 -2
- package/dist/api/device/index.js.map +1 -1
- package/dist/api/device/keyboard.js +4 -4
- package/dist/api/device/keyboard.js.map +1 -1
- package/dist/api/device/memory.js +2 -2
- package/dist/api/device/memory.js.map +1 -1
- package/dist/api/device/motion.js +1 -2
- package/dist/api/device/motion.js.map +1 -1
- package/dist/api/device/network.js +3 -3
- package/dist/api/device/network.js.map +1 -1
- package/dist/api/device/nfc.js +7 -7
- package/dist/api/device/nfc.js.map +1 -1
- package/dist/api/device/scan.js +1 -1
- package/dist/api/device/scan.js.map +1 -1
- package/dist/api/device/screen.d.ts +4 -1
- package/dist/api/device/screen.js +10 -7
- package/dist/api/device/screen.js.map +1 -1
- package/dist/api/device/sms.d.ts +2 -0
- package/dist/api/device/sms.js +7 -0
- package/dist/api/device/sms.js.map +1 -0
- package/dist/api/device/wifi.d.ts +2 -1
- package/dist/api/device/wifi.js +13 -12
- package/dist/api/device/wifi.js.map +1 -1
- package/dist/api/ext/index.js +2 -2
- package/dist/api/ext/index.js.map +1 -1
- package/dist/api/files/index.js +8 -8
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/framework/index.d.ts +1 -1
- package/dist/api/index.d.ts +25 -24
- package/dist/api/index.js +24 -14
- package/dist/api/index.js.map +1 -1
- package/dist/api/location/chooseLocation.js +9 -5
- package/dist/api/location/chooseLocation.js.map +1 -1
- package/dist/api/location/getLocation.js +1 -1
- package/dist/api/location/getLocation.js.map +1 -1
- package/dist/api/location/index.d.ts +2 -2
- package/dist/api/location/index.js +10 -10
- package/dist/api/location/index.js.map +1 -1
- package/dist/api/media/audio/InnerAudioContext.d.ts +3 -1
- package/dist/api/media/audio/InnerAudioContext.js +4 -1
- package/dist/api/media/audio/InnerAudioContext.js.map +1 -1
- package/dist/api/media/audio/index.js +8 -8
- package/dist/api/media/audio/index.js.map +1 -1
- package/dist/api/media/background-audio/BackgroundAudioManager.d.ts +1 -1
- package/dist/api/media/background-audio/index.d.ts +1 -1
- package/dist/api/media/background-audio/index.js +8 -8
- package/dist/api/media/background-audio/index.js.map +1 -1
- package/dist/api/media/camera.js +1 -1
- package/dist/api/media/camera.js.map +1 -1
- package/dist/api/media/image/chooseImage.d.ts +1 -0
- package/dist/api/media/image/chooseImage.js +28 -71
- package/dist/api/media/image/chooseImage.js.map +1 -1
- package/dist/api/media/image/index.d.ts +9 -6
- package/dist/api/media/image/index.js +8 -7
- package/dist/api/media/image/index.js.map +1 -1
- package/dist/api/media/image/previewImage.js +5 -5
- package/dist/api/media/image/previewImage.js.map +1 -1
- package/dist/api/media/image/saveImageToPhotosAlbum.d.ts +3 -0
- package/dist/api/media/image/saveImageToPhotosAlbum.js +30 -0
- package/dist/api/media/image/saveImageToPhotosAlbum.js.map +1 -0
- package/dist/api/media/index.d.ts +12 -12
- package/dist/api/media/index.js +3 -3
- package/dist/api/media/live.js +2 -2
- package/dist/api/media/live.js.map +1 -1
- package/dist/api/media/map.js +1 -1
- package/dist/api/media/map.js.map +1 -1
- package/dist/api/media/media-recorder.js +1 -1
- package/dist/api/media/media-recorder.js.map +1 -1
- package/dist/api/media/recorder.js +3 -3
- package/dist/api/media/recorder.js.map +1 -1
- package/dist/api/media/video/chooseMedia.d.ts +6 -0
- package/dist/api/media/video/chooseMedia.js +208 -0
- package/dist/api/media/video/chooseMedia.js.map +1 -0
- package/dist/api/media/video/chooseVideo.d.ts +7 -0
- package/dist/api/media/video/chooseVideo.js +44 -0
- package/dist/api/media/video/chooseVideo.js.map +1 -0
- package/dist/api/media/video/getVideoInfo.d.ts +3 -0
- package/dist/api/media/video/getVideoInfo.js +63 -0
- package/dist/api/media/video/getVideoInfo.js.map +1 -0
- package/dist/api/media/video/index.d.ts +5 -8
- package/dist/api/media/video/index.js +8 -67
- package/dist/api/media/video/index.js.map +1 -1
- package/dist/api/media/video/saveVideoToPhotosAlbum.d.ts +3 -0
- package/dist/api/media/video/saveVideoToPhotosAlbum.js +30 -0
- package/dist/api/media/video/saveVideoToPhotosAlbum.js.map +1 -0
- package/dist/api/media/video-decoder.js +1 -1
- package/dist/api/media/video-decoder.js.map +1 -1
- package/dist/api/media/video-processing.js +1 -1
- package/dist/api/media/video-processing.js.map +1 -1
- package/dist/api/media/voip.d.ts +3 -1
- package/dist/api/media/voip.js +17 -15
- package/dist/api/media/voip.js.map +1 -1
- package/dist/api/navigate/index.js +5 -5
- package/dist/api/navigate/index.js.map +1 -1
- package/dist/api/network/index.d.ts +7 -7
- package/dist/api/network/mdns.js +10 -10
- package/dist/api/network/mdns.js.map +1 -1
- package/dist/api/network/request/index.d.ts +1 -1
- package/dist/api/network/request/index.js +23 -18
- package/dist/api/network/request/index.js.map +1 -1
- package/dist/api/network/tcp.js +1 -1
- package/dist/api/network/tcp.js.map +1 -1
- package/dist/api/network/udp.js +1 -1
- package/dist/api/network/udp.js.map +1 -1
- package/dist/api/network/upload.js.map +1 -1
- package/dist/api/open-api/account.js +1 -1
- package/dist/api/open-api/account.js.map +1 -1
- package/dist/api/open-api/address.js +1 -1
- package/dist/api/open-api/address.js.map +1 -1
- package/dist/api/open-api/authorize.js +2 -2
- package/dist/api/open-api/authorize.js.map +1 -1
- package/dist/api/open-api/card.js +2 -2
- package/dist/api/open-api/card.js.map +1 -1
- package/dist/api/open-api/channels-live.d.ts +3 -1
- package/dist/api/open-api/channels-live.js +9 -7
- package/dist/api/open-api/channels-live.js.map +1 -1
- package/dist/api/open-api/customer-service.js +1 -1
- package/dist/api/open-api/customer-service.js.map +1 -1
- package/dist/api/open-api/device-voip.d.ts +3 -0
- package/dist/api/open-api/device-voip.js +8 -0
- package/dist/api/open-api/device-voip.js.map +1 -0
- package/dist/api/open-api/facial.js +4 -4
- package/dist/api/open-api/facial.js.map +1 -1
- package/dist/api/open-api/favorites.js +3 -3
- package/dist/api/open-api/favorites.js.map +1 -1
- package/dist/api/open-api/group.js +1 -1
- package/dist/api/open-api/group.js.map +1 -1
- package/dist/api/open-api/index.d.ts +19 -18
- package/dist/api/open-api/index.js +3 -2
- package/dist/api/open-api/index.js.map +1 -1
- package/dist/api/open-api/invoice.js +2 -2
- package/dist/api/open-api/invoice.js.map +1 -1
- package/dist/api/open-api/license-plate.js +1 -1
- package/dist/api/open-api/license-plate.js.map +1 -1
- package/dist/api/open-api/login.js +3 -3
- package/dist/api/open-api/login.js.map +1 -1
- package/dist/api/open-api/red-package.js +1 -1
- package/dist/api/open-api/red-package.js.map +1 -1
- package/dist/api/open-api/settings.js +2 -2
- package/dist/api/open-api/settings.js.map +1 -1
- package/dist/api/open-api/soter.js +3 -3
- package/dist/api/open-api/soter.js.map +1 -1
- package/dist/api/open-api/subscribe-message.d.ts +2 -1
- package/dist/api/open-api/subscribe-message.js +4 -2
- package/dist/api/open-api/subscribe-message.js.map +1 -1
- package/dist/api/open-api/user-info.js +2 -2
- package/dist/api/open-api/user-info.js.map +1 -1
- package/dist/api/open-api/werun.js +2 -2
- package/dist/api/open-api/werun.js.map +1 -1
- package/dist/api/payment/index.d.ts +2 -1
- package/dist/api/payment/index.js +4 -3
- package/dist/api/payment/index.js.map +1 -1
- package/dist/api/qq/index.d.ts +2 -0
- package/dist/api/qq/index.js +7 -0
- package/dist/api/qq/index.js.map +1 -0
- package/dist/api/share/index.d.ts +10 -0
- package/dist/api/share/index.js +21 -11
- package/dist/api/share/index.js.map +1 -1
- package/dist/api/storage/background-fetch.js +4 -4
- package/dist/api/storage/background-fetch.js.map +1 -1
- package/dist/api/storage/cache-manager.d.ts +2 -0
- package/dist/api/storage/cache-manager.js +7 -0
- package/dist/api/storage/cache-manager.js.map +1 -0
- package/dist/api/storage/index.d.ts +7 -2
- package/dist/api/storage/index.js +8 -3
- package/dist/api/storage/index.js.map +1 -1
- package/dist/api/swan/index.js +21 -21
- package/dist/api/swan/index.js.map +1 -1
- package/dist/api/taro.d.ts +7 -2
- package/dist/api/taro.js +13 -4
- package/dist/api/taro.js.map +1 -1
- package/dist/api/ui/background.js +2 -2
- package/dist/api/ui/background.js.map +1 -1
- package/dist/api/ui/index.d.ts +12 -12
- package/dist/api/ui/index.js +1 -1
- package/dist/api/ui/interaction/index.d.ts +1 -1
- package/dist/api/ui/interaction/index.js +4 -4
- package/dist/api/ui/interaction/index.js.map +1 -1
- package/dist/api/ui/interaction/modal.js +6 -0
- package/dist/api/ui/interaction/modal.js.map +1 -1
- package/dist/api/ui/interaction/toast.js +4 -0
- package/dist/api/ui/interaction/toast.js.map +1 -1
- package/dist/api/ui/menu.js +1 -1
- package/dist/api/ui/menu.js.map +1 -1
- package/dist/api/ui/navigation-bar/index.js +3 -3
- package/dist/api/ui/navigation-bar/index.js.map +1 -1
- package/dist/api/ui/scroll/index.js +4 -3
- package/dist/api/ui/scroll/index.js.map +1 -1
- package/dist/api/ui/sticky.js +1 -1
- package/dist/api/ui/sticky.js.map +1 -1
- package/dist/api/ui/window.d.ts +2 -1
- package/dist/api/ui/window.js +3 -2
- package/dist/api/ui/window.js.map +1 -1
- package/dist/api/worker/index.js +1 -1
- package/dist/api/worker/index.js.map +1 -1
- package/dist/api/wxml/IntersectionObserver.d.ts +1 -1
- package/dist/api/wxml/IntersectionObserver.js +15 -13
- package/dist/api/wxml/IntersectionObserver.js.map +1 -1
- package/dist/api/wxml/MediaQueryObserver.d.ts +1 -1
- package/dist/api/wxml/MediaQueryObserver.js +1 -2
- package/dist/api/wxml/MediaQueryObserver.js.map +1 -1
- package/dist/api/wxml/nodesRef.d.ts +1 -1
- package/dist/api/wxml/selectorQuery.d.ts +1 -1
- package/dist/api/wxml/selectorQuery.js +9 -6
- package/dist/api/wxml/selectorQuery.js.map +1 -1
- package/dist/index.cjs.d.ts +95 -51
- package/dist/index.cjs.js +3226 -2710
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.esm.d.ts +95 -51
- package/dist/index.esm.js +2401 -1914
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +29 -15
- package/dist/index.js.map +1 -1
- package/dist/utils/handler.d.ts +13 -26
- package/dist/utils/handler.js +4 -16
- package/dist/utils/handler.js.map +1 -1
- package/dist/utils/helper.d.ts +2 -0
- package/dist/utils/helper.js +11 -0
- package/dist/utils/helper.js.map +1 -0
- package/dist/utils/index.d.ts +7 -6
- package/dist/utils/index.js +4 -12
- package/dist/utils/index.js.map +1 -1
- package/package.json +20 -14
- package/dist/utils/lodash.d.ts +0 -3
- package/dist/utils/lodash.js +0 -32
- package/dist/utils/lodash.js.map +0 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { __awaiter } from '../../../node_modules/.pnpm/registry.npmjs.org_tslib@2.5.0/node_modules/tslib/tslib.es6.js';
|
|
2
|
+
import { getMobileDetect } from '@tarojs/router/dist/utils/navigate';
|
|
3
|
+
import '../../ui/index.js';
|
|
4
|
+
import { shouldBeObject, getParameterError } from '../../../utils/index.js';
|
|
5
|
+
import { MethodHandler } from '../../../utils/handler.js';
|
|
6
|
+
import { showActionSheet } from '../../ui/interaction/index.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* 拍摄或从手机相册中选择图片或视频。
|
|
10
|
+
*/
|
|
11
|
+
const chooseMedia = function (options, methodName = 'chooseMedia') {
|
|
12
|
+
var _a;
|
|
13
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
// options must be an Object
|
|
15
|
+
const isObject = shouldBeObject(options);
|
|
16
|
+
if (!isObject.flag) {
|
|
17
|
+
const res = { errMsg: `${methodName}:fail ${isObject.msg}` };
|
|
18
|
+
console.error(res.errMsg);
|
|
19
|
+
return Promise.reject(res);
|
|
20
|
+
}
|
|
21
|
+
const { count = 9, mediaId = 'taroChooseMedia', mediaType = ['image', 'video'], sourceType = ['album', 'camera'],
|
|
22
|
+
// sizeType = ['original', 'compressed'], // TODO 考虑通过 ffmpeg 支持压缩
|
|
23
|
+
// maxDuration = 10, // TODO 考虑通过 ffmpeg 剪裁视频
|
|
24
|
+
camera = 'back', success, fail, complete, } = options;
|
|
25
|
+
const handle = new MethodHandler({ name: methodName, success, fail, complete });
|
|
26
|
+
const withImage = mediaType.length < 1 || mediaType.indexOf('image') > -1;
|
|
27
|
+
const withVideo = mediaType.length < 1 || mediaType.indexOf('video') > -1;
|
|
28
|
+
const res = {
|
|
29
|
+
tempFiles: [],
|
|
30
|
+
type: withImage && withVideo ? 'mix' : withImage ? 'image' : 'video',
|
|
31
|
+
};
|
|
32
|
+
if (count && typeof count !== 'number') {
|
|
33
|
+
res.errMsg = getParameterError({
|
|
34
|
+
para: 'count',
|
|
35
|
+
correct: 'Number',
|
|
36
|
+
wrong: count
|
|
37
|
+
});
|
|
38
|
+
return handle.fail(res);
|
|
39
|
+
}
|
|
40
|
+
let el = document.getElementById(mediaId);
|
|
41
|
+
if (!el) {
|
|
42
|
+
el = document.createElement('input');
|
|
43
|
+
el.setAttribute('type', 'file');
|
|
44
|
+
el.setAttribute('id', mediaId);
|
|
45
|
+
el.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;');
|
|
46
|
+
}
|
|
47
|
+
if (count > 1) {
|
|
48
|
+
el.setAttribute('multiple', 'multiple');
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
el.removeAttribute('multiple');
|
|
52
|
+
}
|
|
53
|
+
// Note: Input 仅在移动端支持 capture 属性,可以使用 getUserMedia 替代(暂不考虑)
|
|
54
|
+
const md = getMobileDetect();
|
|
55
|
+
if (md.mobile()) {
|
|
56
|
+
if (sourceType.length > 1 || sourceType.length < 1) {
|
|
57
|
+
try {
|
|
58
|
+
const { tapIndex } = yield showActionSheet({
|
|
59
|
+
itemList: ['拍摄', '从相册选择'],
|
|
60
|
+
}, methodName);
|
|
61
|
+
sourceType.splice(0, 1, tapIndex === 0 ? 'camera' : 'album');
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
return handle.fail({
|
|
65
|
+
errMsg: (_a = e.errMsg) === null || _a === void 0 ? void 0 : _a.replace('^.*:fail ', '')
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (sourceType.includes('camera')) {
|
|
71
|
+
el.setAttribute('capture', camera === 'front' ? 'user' : 'environment');
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
el.removeAttribute('capture');
|
|
75
|
+
}
|
|
76
|
+
if (res.type === 'image') {
|
|
77
|
+
el.setAttribute('accept', 'image/*');
|
|
78
|
+
}
|
|
79
|
+
else if (res.type === 'video') {
|
|
80
|
+
el.setAttribute('accept', 'video/*');
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
el.setAttribute('accept', 'image/*, video/*');
|
|
84
|
+
}
|
|
85
|
+
return new Promise((resolve, reject) => {
|
|
86
|
+
if (!el)
|
|
87
|
+
return;
|
|
88
|
+
document.body.appendChild(el);
|
|
89
|
+
el.onchange = function (e) {
|
|
90
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
const target = e.target;
|
|
92
|
+
if (target) {
|
|
93
|
+
const files = target.files || [];
|
|
94
|
+
const arr = [...files];
|
|
95
|
+
yield Promise.all(arr.map((item) => __awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
var _a;
|
|
97
|
+
try {
|
|
98
|
+
(_a = res.tempFiles) === null || _a === void 0 ? void 0 : _a.push(yield loadMedia(item));
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(error);
|
|
102
|
+
}
|
|
103
|
+
})));
|
|
104
|
+
}
|
|
105
|
+
handle.success(res, { resolve, reject });
|
|
106
|
+
target.value = '';
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
el.onabort = () => handle.fail({ errMsg: 'abort' }, { resolve, reject });
|
|
110
|
+
el.oncancel = () => handle.fail({ errMsg: 'cancel' }, { resolve, reject });
|
|
111
|
+
el.onerror = e => handle.fail({ errMsg: e.toString() }, { resolve, reject });
|
|
112
|
+
el.click();
|
|
113
|
+
}).finally(() => {
|
|
114
|
+
if (!el)
|
|
115
|
+
return;
|
|
116
|
+
document.body.removeChild(el);
|
|
117
|
+
});
|
|
118
|
+
function loadMedia(file) {
|
|
119
|
+
const dataUrl = URL.createObjectURL(file);
|
|
120
|
+
const res = {
|
|
121
|
+
tempFilePath: dataUrl,
|
|
122
|
+
size: file.size,
|
|
123
|
+
duration: 0,
|
|
124
|
+
height: 0,
|
|
125
|
+
width: 0,
|
|
126
|
+
thumbTempFilePath: '',
|
|
127
|
+
fileType: file.type,
|
|
128
|
+
originalFileObj: file
|
|
129
|
+
};
|
|
130
|
+
if (/^video\//.test(res.fileType)) {
|
|
131
|
+
// Video
|
|
132
|
+
const video = document.createElement('video');
|
|
133
|
+
const reader = new FileReader();
|
|
134
|
+
video.crossOrigin = 'Anonymous';
|
|
135
|
+
video.preload = 'metadata';
|
|
136
|
+
video.src = res.tempFilePath;
|
|
137
|
+
return new Promise((resolve, reject) => {
|
|
138
|
+
// 对齐旧版本实现
|
|
139
|
+
reader.onload = (event) => {
|
|
140
|
+
var _a;
|
|
141
|
+
res.tempFilePath = (_a = event.target) === null || _a === void 0 ? void 0 : _a.result;
|
|
142
|
+
};
|
|
143
|
+
reader.onerror = e => reject(e);
|
|
144
|
+
reader.readAsDataURL(res.originalFileObj);
|
|
145
|
+
video.onloadedmetadata = () => {
|
|
146
|
+
res.duration = video.duration;
|
|
147
|
+
res.height = video.videoHeight;
|
|
148
|
+
res.width = video.videoWidth;
|
|
149
|
+
};
|
|
150
|
+
video.oncanplay = () => {
|
|
151
|
+
res.thumbTempFilePath = getThumbTempFilePath(video, res.height, res.width, 0.8);
|
|
152
|
+
resolve(res);
|
|
153
|
+
};
|
|
154
|
+
video.onerror = e => reject(e);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// Image
|
|
159
|
+
const img = new Image();
|
|
160
|
+
/** 允许图片和 canvas 跨源使用
|
|
161
|
+
* https://developer.mozilla.org/zh-CN/docs/Web/HTML/CORS_enabled_image
|
|
162
|
+
*/
|
|
163
|
+
img.crossOrigin = 'Anonymous';
|
|
164
|
+
img.src = res.tempFilePath;
|
|
165
|
+
return new Promise((resolve, reject) => {
|
|
166
|
+
if (img.complete) {
|
|
167
|
+
res.height = img.height;
|
|
168
|
+
res.width = img.width;
|
|
169
|
+
res.thumbTempFilePath = getThumbTempFilePath(img, res.height, res.width, 0.8);
|
|
170
|
+
resolve(res);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
img.onload = () => {
|
|
174
|
+
res.height = img.height;
|
|
175
|
+
res.width = img.width;
|
|
176
|
+
res.thumbTempFilePath = getThumbTempFilePath(img, res.height, res.width, 0.8);
|
|
177
|
+
resolve(res);
|
|
178
|
+
};
|
|
179
|
+
img.onerror = e => reject(e);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function getThumbTempFilePath(el, height = 0, width = height, quality = 0.8) {
|
|
185
|
+
const max = 256;
|
|
186
|
+
const canvas = document.createElement('canvas');
|
|
187
|
+
if (height > max || width > max) {
|
|
188
|
+
const radio = height / width;
|
|
189
|
+
if (radio > 1) {
|
|
190
|
+
height = max;
|
|
191
|
+
width = height / radio;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
width = max;
|
|
195
|
+
height = width * radio;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
canvas.height = height;
|
|
199
|
+
canvas.width = width;
|
|
200
|
+
const ctx = canvas.getContext('2d');
|
|
201
|
+
ctx === null || ctx === void 0 ? void 0 : ctx.drawImage(el, 0, 0, canvas.width, canvas.height);
|
|
202
|
+
return canvas.toDataURL('image/jpeg', quality);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
export { chooseMedia };
|
|
208
|
+
//# sourceMappingURL=chooseMedia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chooseMedia.js","sources":["../../../../src/api/media/video/chooseMedia.ts"],"sourcesContent":["import Taro from '@tarojs/api'\nimport { getMobileDetect } from '@tarojs/router/dist/utils/navigate'\n\nimport { showActionSheet } from '../../../api/ui'\nimport { getParameterError, shouldBeObject } from '../../../utils'\nimport { MethodHandler } from '../../../utils/handler'\n\n/**\n * 拍摄或从手机相册中选择图片或视频。\n */\nexport const chooseMedia = async function (\n options: Taro.chooseMedia.Option,\n methodName = 'chooseMedia',\n): Promise<Taro.chooseMedia.SuccessCallbackResult> {\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `${methodName}:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n\n const {\n count = 9,\n mediaId = 'taroChooseMedia',\n mediaType = ['image', 'video'],\n sourceType = ['album', 'camera'],\n // sizeType = ['original', 'compressed'], // TODO 考虑通过 ffmpeg 支持压缩\n // maxDuration = 10, // TODO 考虑通过 ffmpeg 剪裁视频\n camera = 'back',\n success,\n fail,\n complete,\n } = options\n const handle = new MethodHandler({ name: methodName, success, fail, complete })\n const withImage = mediaType.length < 1 || mediaType.indexOf('image') > -1\n const withVideo = mediaType.length < 1 || mediaType.indexOf('video') > -1\n const res: Partial<Taro.chooseMedia.SuccessCallbackResult> = {\n tempFiles: [],\n type: withImage && withVideo ? 'mix' : withImage ? 'image' : 'video',\n }\n\n if (count && typeof count !== 'number') {\n res.errMsg = getParameterError({\n para: 'count',\n correct: 'Number',\n wrong: count\n })\n return handle.fail(res)\n }\n\n let el = document.getElementById(mediaId)\n if (!el) {\n el = document.createElement('input')\n el.setAttribute('type', 'file')\n el.setAttribute('id', mediaId)\n el.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;')\n }\n\n if (count > 1) {\n el.setAttribute('multiple', 'multiple')\n } else {\n el.removeAttribute('multiple')\n }\n\n // Note: Input 仅在移动端支持 capture 属性,可以使用 getUserMedia 替代(暂不考虑)\n const md = getMobileDetect()\n if (md.mobile()) {\n if (sourceType.length > 1 || sourceType.length < 1) {\n try {\n const { tapIndex } = await showActionSheet({\n itemList: ['拍摄', '从相册选择'],\n }, methodName)\n sourceType.splice(0, 1, tapIndex === 0 ? 'camera' : 'album')\n } catch (e) {\n return handle.fail({\n errMsg: e.errMsg?.replace('^.*:fail ', '')\n })\n }\n }\n }\n if (sourceType.includes('camera')) {\n el.setAttribute('capture', camera === 'front' ? 'user' : 'environment')\n } else {\n el.removeAttribute('capture')\n }\n\n if (res.type === 'image') {\n el.setAttribute('accept', 'image/*')\n } else if (res.type === 'video') {\n el.setAttribute('accept', 'video/*')\n } else {\n el.setAttribute('accept', 'image/*, video/*')\n }\n return new Promise<Taro.chooseMedia.SuccessCallbackResult>((resolve, reject) => {\n if (!el) return\n document.body.appendChild(el)\n el.onchange = async function (e) {\n const target = e.target as HTMLInputElement\n if (target) {\n const files = target.files || []\n const arr = [...files]\n await Promise.all(\n arr.map(async item => {\n try {\n res.tempFiles?.push(await loadMedia(item))\n } catch (error) {\n console.error(error)\n }\n })\n )\n }\n handle.success(res, { resolve, reject })\n target.value = ''\n }\n el.onabort = () => handle.fail({ errMsg: 'abort' }, { resolve, reject })\n el.oncancel = () => handle.fail({ errMsg: 'cancel' }, { resolve, reject })\n el.onerror = e => handle.fail({ errMsg: e.toString() }, { resolve, reject })\n el.click()\n }).finally(() => {\n if (!el) return\n document.body.removeChild(el)\n })\n\n function loadMedia (file: File): Promise<Taro.chooseMedia.ChooseMedia> {\n const dataUrl = URL.createObjectURL(file)\n const res = {\n tempFilePath: dataUrl,\n size: file.size,\n duration: 0,\n height: 0,\n width: 0,\n thumbTempFilePath: '',\n fileType: file.type,\n originalFileObj: file\n }\n\n if (/^video\\//.test(res.fileType)) {\n // Video\n const video = document.createElement('video')\n const reader = new FileReader()\n video.crossOrigin = 'Anonymous'\n video.preload = 'metadata'\n video.src = res.tempFilePath\n\n return new Promise((resolve, reject) => {\n // 对齐旧版本实现\n reader.onload = (event) => {\n res.tempFilePath = event.target?.result as string\n }\n reader.onerror = e => reject(e)\n reader.readAsDataURL(res.originalFileObj)\n\n video.onloadedmetadata = () => {\n res.duration = video.duration\n res.height = video.videoHeight\n res.width = video.videoWidth\n }\n video.oncanplay = () => {\n res.thumbTempFilePath = getThumbTempFilePath(video, res.height, res.width, 0.8)\n resolve(res)\n }\n video.onerror = e => reject(e)\n })\n } else {\n // Image\n const img = new Image()\n /** 允许图片和 canvas 跨源使用\n * https://developer.mozilla.org/zh-CN/docs/Web/HTML/CORS_enabled_image\n */\n img.crossOrigin = 'Anonymous'\n img.src = res.tempFilePath\n\n return new Promise((resolve, reject) => {\n if (img.complete) {\n res.height = img.height\n res.width = img.width\n res.thumbTempFilePath = getThumbTempFilePath(img, res.height, res.width, 0.8)\n resolve(res)\n } else {\n img.onload = () => {\n res.height = img.height\n res.width = img.width\n res.thumbTempFilePath = getThumbTempFilePath(img, res.height, res.width, 0.8)\n resolve(res)\n }\n img.onerror = e => reject(e)\n }\n })\n }\n }\n\n function getThumbTempFilePath (el: CanvasImageSource, height = 0, width = height, quality = 0.8) {\n const max = 256\n const canvas = document.createElement('canvas')\n if (height > max || width > max) {\n const radio = height / width\n if (radio > 1) {\n height = max\n width = height / radio\n } else {\n width = max\n height = width * radio\n }\n }\n canvas.height = height\n canvas.width = width\n\n const ctx = canvas.getContext('2d')\n ctx?.drawImage(el, 0, 0, canvas.width, canvas.height)\n return canvas.toDataURL('image/jpeg', quality)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { shouldBeObject } from '../../../utils/index.js';
|
|
2
|
+
import { chooseMedia } from './chooseMedia.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 拍摄视频或从手机相册中选视频。
|
|
6
|
+
* @deprecated 请使用 chooseMedia 接口
|
|
7
|
+
*/
|
|
8
|
+
const chooseVideo = (options) => {
|
|
9
|
+
// options must be an Object
|
|
10
|
+
const isObject = shouldBeObject(options);
|
|
11
|
+
if (!isObject.flag) {
|
|
12
|
+
const res = { errMsg: `chooseVideo:fail ${isObject.msg}` };
|
|
13
|
+
console.error(res.errMsg);
|
|
14
|
+
return Promise.reject(res);
|
|
15
|
+
}
|
|
16
|
+
const { sourceType = ['album', 'camera'],
|
|
17
|
+
// TODO 考虑通过 ffmpeg 支持压缩
|
|
18
|
+
// compressed = true,
|
|
19
|
+
maxDuration = 60, camera = 'back', success, fail, complete, } = options;
|
|
20
|
+
function parseRes(res) {
|
|
21
|
+
const { tempFiles = [], errMsg } = res;
|
|
22
|
+
const [video] = tempFiles;
|
|
23
|
+
return Object.assign(Object.assign({}, video), { errMsg });
|
|
24
|
+
}
|
|
25
|
+
return chooseMedia({
|
|
26
|
+
mediaId: 'taroChooseVideo',
|
|
27
|
+
sourceType,
|
|
28
|
+
mediaType: ['video'],
|
|
29
|
+
maxDuration,
|
|
30
|
+
camera,
|
|
31
|
+
success: (res) => {
|
|
32
|
+
const param = parseRes(res);
|
|
33
|
+
success === null || success === void 0 ? void 0 : success(param);
|
|
34
|
+
complete === null || complete === void 0 ? void 0 : complete(param);
|
|
35
|
+
},
|
|
36
|
+
fail: (err) => {
|
|
37
|
+
fail === null || fail === void 0 ? void 0 : fail(err);
|
|
38
|
+
complete === null || complete === void 0 ? void 0 : complete(err);
|
|
39
|
+
},
|
|
40
|
+
}, 'chooseVideo').then(parseRes);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { chooseVideo };
|
|
44
|
+
//# sourceMappingURL=chooseVideo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chooseVideo.js","sources":["../../../../src/api/media/video/chooseVideo.ts"],"sourcesContent":["import Taro from '@tarojs/api'\n\nimport { shouldBeObject } from '../../../utils'\nimport { chooseMedia } from './chooseMedia'\n\n/**\n * 拍摄视频或从手机相册中选视频。\n * @deprecated 请使用 chooseMedia 接口\n */\nexport const chooseVideo: typeof Taro.chooseVideo = (options) => {\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `chooseVideo:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n\n const {\n sourceType = ['album', 'camera'],\n // TODO 考虑通过 ffmpeg 支持压缩\n // compressed = true,\n maxDuration = 60,\n camera = 'back',\n success,\n fail,\n complete,\n } = options\n\n function parseRes (res: Taro.chooseMedia.SuccessCallbackResult): Taro.chooseVideo.SuccessCallbackResult {\n const { tempFiles = [], errMsg } = res\n const [video] = tempFiles\n return { ...video, errMsg }\n }\n\n return chooseMedia({\n mediaId: 'taroChooseVideo',\n sourceType,\n mediaType: ['video'],\n maxDuration,\n camera,\n success: (res) => {\n const param = parseRes(res)\n success?.(param)\n complete?.(param)\n },\n fail: (err) => {\n fail?.(err)\n complete?.(err)\n },\n }, 'chooseVideo').then(parseRes)\n}\n"],"names":[],"mappings":";;;AAKA;;;AAGG;AACU,MAAA,WAAW,GAA4B,CAAC,OAAO,KAAI;;AAE9D,IAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;AACxC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAClB,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,CAAoB,iBAAA,EAAA,QAAQ,CAAC,GAAG,CAAE,CAAA,EAAE,CAAA;AAC1D,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACzB,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC3B,KAAA;AAED,IAAA,MAAM,EACJ,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;;;AAGhC,IAAA,WAAW,GAAG,EAAE,EAChB,MAAM,GAAG,MAAM,EACf,OAAO,EACP,IAAI,EACJ,QAAQ,GACT,GAAG,OAAO,CAAA;IAEX,SAAS,QAAQ,CAAE,GAA2C,EAAA;QAC5D,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,GAAG,CAAA;AACtC,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAA;QACzB,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAK,CAAE,EAAA,EAAA,MAAM,EAAE,CAAA,CAAA;KAC5B;AAED,IAAA,OAAO,WAAW,CAAC;AACjB,QAAA,OAAO,EAAE,iBAAiB;QAC1B,UAAU;QACV,SAAS,EAAE,CAAC,OAAO,CAAC;QACpB,WAAW;QACX,MAAM;AACN,QAAA,OAAO,EAAE,CAAC,GAAG,KAAI;AACf,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;AAC3B,YAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAG,KAAK,CAAC,CAAA;AAChB,YAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAG,KAAK,CAAC,CAAA;SAClB;AACD,QAAA,IAAI,EAAE,CAAC,GAAG,KAAI;AACZ,YAAA,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAG,GAAG,CAAC,CAAA;AACX,YAAA,QAAQ,aAAR,QAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAR,QAAQ,CAAG,GAAG,CAAC,CAAA;SAChB;AACF,KAAA,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClC;;;;"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { __awaiter } from '../../../node_modules/.pnpm/registry.npmjs.org_tslib@2.5.0/node_modules/tslib/tslib.es6.js';
|
|
2
|
+
import 'whatwg-fetch';
|
|
3
|
+
import { shouldBeObject, getParameterError } from '../../../utils/index.js';
|
|
4
|
+
import { MethodHandler } from '../../../utils/handler.js';
|
|
5
|
+
|
|
6
|
+
const getVideoInfo = function (options) {
|
|
7
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
8
|
+
// options must be an Object
|
|
9
|
+
const isObject = shouldBeObject(options);
|
|
10
|
+
if (!isObject.flag) {
|
|
11
|
+
const res = { errMsg: `getVideoInfo:fail ${isObject.msg}` };
|
|
12
|
+
console.error(res.errMsg);
|
|
13
|
+
return Promise.reject(res);
|
|
14
|
+
}
|
|
15
|
+
const res = {
|
|
16
|
+
orientation: 'up',
|
|
17
|
+
type: '',
|
|
18
|
+
duration: 0,
|
|
19
|
+
size: 0,
|
|
20
|
+
height: 0,
|
|
21
|
+
width: 0,
|
|
22
|
+
fps: 30,
|
|
23
|
+
bitrate: 0,
|
|
24
|
+
};
|
|
25
|
+
const { src, success, fail, complete, } = options;
|
|
26
|
+
const handle = new MethodHandler({ name: 'getVideoInfo', success, fail, complete });
|
|
27
|
+
if (typeof src !== 'string') {
|
|
28
|
+
res.errMsg = getParameterError({
|
|
29
|
+
para: 'src',
|
|
30
|
+
correct: 'String',
|
|
31
|
+
wrong: src
|
|
32
|
+
});
|
|
33
|
+
return handle.fail(res);
|
|
34
|
+
}
|
|
35
|
+
const video = document.createElement('video');
|
|
36
|
+
video.crossOrigin = 'Anonymous';
|
|
37
|
+
video.preload = 'metadata';
|
|
38
|
+
video.src = src;
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
40
|
+
video.onloadedmetadata = () => {
|
|
41
|
+
res.duration = video.duration;
|
|
42
|
+
res.height = video.videoHeight;
|
|
43
|
+
res.width = video.videoWidth;
|
|
44
|
+
fetch(src)
|
|
45
|
+
.then((e) => __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
const blob = yield e.blob();
|
|
47
|
+
res.type = blob.type;
|
|
48
|
+
res.size = blob.size;
|
|
49
|
+
res.bitrate = blob.size / video.duration;
|
|
50
|
+
handle.success(res, { resolve, reject });
|
|
51
|
+
}))
|
|
52
|
+
.catch(e => {
|
|
53
|
+
handle.fail({
|
|
54
|
+
errMsg: e.toString()
|
|
55
|
+
}, { resolve, reject });
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { getVideoInfo };
|
|
63
|
+
//# sourceMappingURL=getVideoInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getVideoInfo.js","sources":["../../../../src/api/media/video/getVideoInfo.ts"],"sourcesContent":["import 'whatwg-fetch'\n\nimport Taro from '@tarojs/api'\n\nimport { getParameterError, shouldBeObject } from '../../../utils'\nimport { MethodHandler } from '../../../utils/handler'\n\nexport const getVideoInfo: typeof Taro.getVideoInfo = async function (options) {\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `getVideoInfo:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n const res: Partial<Taro.getVideoInfo.SuccessCallbackResult> = {\n orientation: 'up',\n type: '',\n duration: 0,\n size: 0,\n height: 0,\n width: 0,\n fps: 30,\n bitrate: 0,\n }\n const {\n src,\n success,\n fail,\n complete,\n } = options\n const handle = new MethodHandler({ name: 'getVideoInfo', success, fail, complete })\n\n if (typeof src !== 'string') {\n res.errMsg = getParameterError({\n para: 'src',\n correct: 'String',\n wrong: src\n })\n return handle.fail(res)\n }\n\n const video = document.createElement('video')\n video.crossOrigin = 'Anonymous'\n video.preload = 'metadata'\n video.src = src\n\n return new Promise((resolve, reject) => {\n video.onloadedmetadata = () => {\n res.duration = video.duration\n res.height = video.videoHeight\n res.width = video.videoWidth\n\n fetch(src)\n .then(async e => {\n const blob = await e.blob()\n res.type = blob.type\n res.size = blob.size\n res.bitrate = blob.size / video.duration\n\n handle.success(res, { resolve, reject })\n })\n .catch(e => {\n handle.fail({\n errMsg: e.toString()\n }, { resolve, reject })\n })\n }\n })\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import Taro from '@tarojs/api';
|
|
2
|
-
declare const saveVideoToPhotosAlbum: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
3
2
|
declare const openVideoEditor: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
4
|
-
declare const getVideoInfo: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
5
3
|
/**
|
|
6
4
|
* 创建 video 上下文 VideoContext 对象。
|
|
7
5
|
*/
|
|
8
6
|
declare const createVideoContext: typeof Taro.createVideoContext;
|
|
9
7
|
declare const compressVideo: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export { saveVideoToPhotosAlbum, openVideoEditor, getVideoInfo, createVideoContext, compressVideo, chooseVideo, chooseMedia };
|
|
8
|
+
export * from "./saveVideoToPhotosAlbum.js";
|
|
9
|
+
export { openVideoEditor, createVideoContext, compressVideo };
|
|
10
|
+
export * from "./getVideoInfo.js";
|
|
11
|
+
export * from "./chooseMedia.js";
|
|
12
|
+
export * from "./chooseVideo.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { temporarilyNotSupport, findDOM
|
|
2
|
-
|
|
1
|
+
import { temporarilyNotSupport, findDOM } from '../../../utils/index.js';
|
|
2
|
+
export { saveVideoToPhotosAlbum } from './saveVideoToPhotosAlbum.js';
|
|
3
|
+
export { getVideoInfo } from './getVideoInfo.js';
|
|
4
|
+
export { chooseMedia } from './chooseMedia.js';
|
|
5
|
+
export { chooseVideo } from './chooseVideo.js';
|
|
3
6
|
|
|
4
|
-
|
|
5
|
-
const saveVideoToPhotosAlbum = temporarilyNotSupport('saveVideoToPhotosAlbum');
|
|
6
|
-
const openVideoEditor = temporarilyNotSupport('openVideoEditor');
|
|
7
|
-
const getVideoInfo = temporarilyNotSupport('getVideoInfo');
|
|
7
|
+
const openVideoEditor = /* @__PURE__ */ temporarilyNotSupport('openVideoEditor');
|
|
8
8
|
/**
|
|
9
9
|
* 创建 video 上下文 VideoContext 对象。
|
|
10
10
|
*/
|
|
@@ -13,66 +13,7 @@ const createVideoContext = (id, inst) => {
|
|
|
13
13
|
// TODO HTMLVideoElement to VideoContext
|
|
14
14
|
return el === null || el === void 0 ? void 0 : el.querySelector(`taro-video-core[id=${id}]`);
|
|
15
15
|
};
|
|
16
|
-
const compressVideo = temporarilyNotSupport('compressVideo');
|
|
17
|
-
/**
|
|
18
|
-
* 拍摄视频或从手机相册中选视频。
|
|
19
|
-
*/
|
|
20
|
-
const chooseVideo = (options) => {
|
|
21
|
-
// options must be an Object
|
|
22
|
-
const isObject = shouldBeObject(options);
|
|
23
|
-
if (!isObject.flag) {
|
|
24
|
-
const res = { errMsg: `chooseVideo:fail ${isObject.msg}` };
|
|
25
|
-
console.error(res.errMsg);
|
|
26
|
-
return Promise.reject(res);
|
|
27
|
-
}
|
|
28
|
-
const { success, fail, complete } = options;
|
|
29
|
-
const handle = new MethodHandler({ name: 'chooseVideo', success, fail, complete });
|
|
30
|
-
const res = {
|
|
31
|
-
tempFilePath: '',
|
|
32
|
-
duration: 0,
|
|
33
|
-
size: 0,
|
|
34
|
-
height: 0,
|
|
35
|
-
width: 0
|
|
36
|
-
};
|
|
37
|
-
const inputEl = document.createElement('input');
|
|
38
|
-
inputEl.setAttribute('type', 'file');
|
|
39
|
-
inputEl.setAttribute('multiple', 'multiple');
|
|
40
|
-
inputEl.setAttribute('accept', 'video/*');
|
|
41
|
-
inputEl.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;');
|
|
42
|
-
document.body.appendChild(inputEl);
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
const TaroMouseEvents = document.createEvent('MouseEvents');
|
|
45
|
-
TaroMouseEvents.initEvent('click', true, true);
|
|
46
|
-
inputEl.dispatchEvent(TaroMouseEvents);
|
|
47
|
-
inputEl.onchange = function (e) {
|
|
48
|
-
var _a;
|
|
49
|
-
const target = e.target;
|
|
50
|
-
const file = (_a = target.files) === null || _a === void 0 ? void 0 : _a[0];
|
|
51
|
-
const reader = new FileReader();
|
|
52
|
-
reader.onload = function (event) {
|
|
53
|
-
var _a;
|
|
54
|
-
const videoEl = document.createElement('video');
|
|
55
|
-
const url = (_a = event.target) === null || _a === void 0 ? void 0 : _a.result;
|
|
56
|
-
videoEl.preload = 'metadata';
|
|
57
|
-
videoEl.src = url;
|
|
58
|
-
videoEl.onloadedmetadata = () => {
|
|
59
|
-
res.tempFilePath = url;
|
|
60
|
-
res.duration = videoEl.duration;
|
|
61
|
-
res.size = event.total;
|
|
62
|
-
res.height = videoEl.videoHeight;
|
|
63
|
-
res.width = videoEl.videoHeight;
|
|
64
|
-
return handle.success(res, { resolve, reject });
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
if (file) {
|
|
68
|
-
reader.readAsDataURL(file);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
}).finally(() => {
|
|
72
|
-
document.body.removeChild(inputEl);
|
|
73
|
-
});
|
|
74
|
-
};
|
|
75
|
-
const chooseMedia = temporarilyNotSupport('chooseMedia');
|
|
16
|
+
const compressVideo = /* @__PURE__ */ temporarilyNotSupport('compressVideo');
|
|
76
17
|
|
|
77
|
-
export {
|
|
18
|
+
export { compressVideo, createVideoContext, openVideoEditor };
|
|
78
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/api/media/video/index.ts"],"sourcesContent":["import Taro from '@tarojs/api'\n\nimport { findDOM,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/api/media/video/index.ts"],"sourcesContent":["import Taro from '@tarojs/api'\n\nimport { findDOM, temporarilyNotSupport } from '../../../utils'\n\n// 视频\nexport * from './saveVideoToPhotosAlbum'\n\nexport const openVideoEditor = /* @__PURE__ */ temporarilyNotSupport('openVideoEditor')\n\nexport * from './getVideoInfo'\n\n/**\n * 创建 video 上下文 VideoContext 对象。\n */\nexport const createVideoContext: typeof Taro.createVideoContext = (id, inst) => {\n const el = findDOM(inst) as HTMLVideoElement\n // TODO HTMLVideoElement to VideoContext\n return el?.querySelector(`taro-video-core[id=${id}]`) as unknown as Taro.VideoContext\n}\n\nexport const compressVideo = /* @__PURE__ */ temporarilyNotSupport('compressVideo')\n\nexport * from './chooseMedia'\nexport * from './chooseVideo'\n"],"names":[],"mappings":";;;;;;AAOa,MAAA,eAAe,mBAAmB,qBAAqB,CAAC,iBAAiB,EAAC;AAIvF;;AAEG;MACU,kBAAkB,GAAmC,CAAC,EAAE,EAAE,IAAI,KAAI;AAC7E,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAqB,CAAA;;AAE5C,IAAA,OAAO,EAAE,KAAA,IAAA,IAAF,EAAE,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAF,EAAE,CAAE,aAAa,CAAC,CAAsB,mBAAA,EAAA,EAAE,CAAG,CAAA,CAAA,CAAiC,CAAA;AACvF,EAAC;AAEY,MAAA,aAAa,mBAAmB,qBAAqB,CAAC,eAAe;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { shouldBeObject, getParameterError } from '../../../utils/index.js';
|
|
2
|
+
import { MethodHandler } from '../../../utils/handler.js';
|
|
3
|
+
import { createDownload } from '../../../utils/helper.js';
|
|
4
|
+
|
|
5
|
+
const saveVideoToPhotosAlbum = (options) => {
|
|
6
|
+
const methodName = 'saveVideoToPhotosAlbum';
|
|
7
|
+
// options must be an Object
|
|
8
|
+
const isObject = shouldBeObject(options);
|
|
9
|
+
if (!isObject.flag) {
|
|
10
|
+
const res = { errMsg: `${methodName}:fail ${isObject.msg}` };
|
|
11
|
+
console.error(res.errMsg);
|
|
12
|
+
return Promise.reject(res);
|
|
13
|
+
}
|
|
14
|
+
const { filePath, success, fail, complete, } = options;
|
|
15
|
+
const handle = new MethodHandler({ name: methodName, success, fail, complete });
|
|
16
|
+
if (typeof filePath !== 'string') {
|
|
17
|
+
return handle.fail({
|
|
18
|
+
errMsg: getParameterError({
|
|
19
|
+
para: 'filePath',
|
|
20
|
+
correct: 'String',
|
|
21
|
+
wrong: filePath
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
createDownload(filePath);
|
|
26
|
+
return handle.success();
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { saveVideoToPhotosAlbum };
|
|
30
|
+
//# sourceMappingURL=saveVideoToPhotosAlbum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saveVideoToPhotosAlbum.js","sources":["../../../../src/api/media/video/saveVideoToPhotosAlbum.ts"],"sourcesContent":["import Taro from '@tarojs/api'\n\nimport { createDownload, getParameterError, shouldBeObject } from '../../../utils'\nimport { MethodHandler } from '../../../utils/handler'\n\nexport const saveVideoToPhotosAlbum: typeof Taro.saveVideoToPhotosAlbum = (options) => {\n const methodName = 'saveVideoToPhotosAlbum'\n // options must be an Object\n const isObject = shouldBeObject(options)\n if (!isObject.flag) {\n const res = { errMsg: `${methodName}:fail ${isObject.msg}` }\n console.error(res.errMsg)\n return Promise.reject(res)\n }\n\n const {\n filePath,\n success,\n fail,\n complete,\n } = options\n const handle = new MethodHandler({ name: methodName, success, fail, complete })\n if (typeof filePath !== 'string') {\n return handle.fail({\n errMsg: getParameterError({\n para: 'filePath',\n correct: 'String',\n wrong: filePath\n })\n })\n }\n\n createDownload(filePath)\n return handle.success()\n}\n"],"names":[],"mappings":";;;;AAKa,MAAA,sBAAsB,GAAuC,CAAC,OAAO,KAAI;IACpF,MAAM,UAAU,GAAG,wBAAwB,CAAA;;AAE3C,IAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;AACxC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAClB,QAAA,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,CAAA,EAAG,UAAU,CAAA,MAAA,EAAS,QAAQ,CAAC,GAAG,CAAA,CAAE,EAAE,CAAA;AAC5D,QAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AACzB,QAAA,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC3B,KAAA;IAED,MAAM,EACJ,QAAQ,EACR,OAAO,EACP,IAAI,EACJ,QAAQ,GACT,GAAG,OAAO,CAAA;AACX,IAAA,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC/E,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;QAChC,OAAO,MAAM,CAAC,IAAI,CAAC;YACjB,MAAM,EAAE,iBAAiB,CAAC;AACxB,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,KAAK,EAAE,QAAQ;aAChB,CAAC;AACH,SAAA,CAAC,CAAA;AACH,KAAA;IAED,cAAc,CAAC,QAAQ,CAAC,CAAA;AACxB,IAAA,OAAO,MAAM,CAAC,OAAO,EAAE,CAAA;AACzB;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { temporarilyNotSupport } from '../../utils/index.js';
|
|
2
2
|
|
|
3
3
|
// 视频解码器
|
|
4
|
-
const createVideoDecoder = temporarilyNotSupport('createVideoDecoder');
|
|
4
|
+
const createVideoDecoder = /* @__PURE__ */ temporarilyNotSupport('createVideoDecoder');
|
|
5
5
|
|
|
6
6
|
export { createVideoDecoder };
|
|
7
7
|
//# sourceMappingURL=video-decoder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video-decoder.js","sources":["../../../src/api/media/video-decoder.ts"],"sourcesContent":["import { temporarilyNotSupport } from '../../utils'\n\n// 视频解码器\nexport const createVideoDecoder = temporarilyNotSupport('createVideoDecoder')\n"],"names":[],"mappings":";;AAEA;
|
|
1
|
+
{"version":3,"file":"video-decoder.js","sources":["../../../src/api/media/video-decoder.ts"],"sourcesContent":["import { temporarilyNotSupport } from '../../utils'\n\n// 视频解码器\nexport const createVideoDecoder = /* @__PURE__ */ temporarilyNotSupport('createVideoDecoder')\n"],"names":[],"mappings":";;AAEA;AACa,MAAA,kBAAkB,mBAAmB,qBAAqB,CAAC,oBAAoB;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { temporarilyNotSupport } from '../../utils/index.js';
|
|
2
2
|
|
|
3
3
|
// 音视频合成
|
|
4
|
-
const createMediaContainer = temporarilyNotSupport('createMediaContainer');
|
|
4
|
+
const createMediaContainer = /* @__PURE__ */ temporarilyNotSupport('createMediaContainer');
|
|
5
5
|
|
|
6
6
|
export { createMediaContainer };
|
|
7
7
|
//# sourceMappingURL=video-processing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video-processing.js","sources":["../../../src/api/media/video-processing.ts"],"sourcesContent":["import { temporarilyNotSupport } from '../../utils'\n\n// 音视频合成\nexport const createMediaContainer = temporarilyNotSupport('createMediaContainer')\n"],"names":[],"mappings":";;AAEA;
|
|
1
|
+
{"version":3,"file":"video-processing.js","sources":["../../../src/api/media/video-processing.ts"],"sourcesContent":["import { temporarilyNotSupport } from '../../utils'\n\n// 音视频合成\nexport const createMediaContainer = /* @__PURE__ */ temporarilyNotSupport('createMediaContainer')\n"],"names":[],"mappings":";;AAEA;AACa,MAAA,oBAAoB,mBAAmB,qBAAqB,CAAC,sBAAsB;;;;"}
|
package/dist/api/media/voip.d.ts
CHANGED
|
@@ -6,10 +6,12 @@ declare const onVoIPChatStateChanged: (option?: {}, ...args: any[]) => Promise<P
|
|
|
6
6
|
declare const onVoIPChatSpeakersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
7
7
|
declare const onVoIPChatMembersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
8
8
|
declare const onVoIPChatInterrupted: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
9
|
+
declare const offVoIPChatSpeakersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
9
10
|
declare const offVoIPVideoMembersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
10
11
|
declare const offVoIPChatStateChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
11
12
|
declare const offVoIPChatMembersChanged: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
12
13
|
declare const offVoIPChatInterrupted: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
13
14
|
declare const joinVoIPChat: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
15
|
+
declare const join1v1Chat: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
14
16
|
declare const exitVoIPChat: (option?: {}, ...args: any[]) => Promise<Partial<TaroGeneral.CallbackResult> & Record<string, unknown> & TaroGeneral.CallbackResult>;
|
|
15
|
-
export { updateVoIPChatMuteConfig, subscribeVoIPVideoMembers, setEnable1v1Chat, onVoIPVideoMembersChanged, onVoIPChatStateChanged, onVoIPChatSpeakersChanged, onVoIPChatMembersChanged, onVoIPChatInterrupted, offVoIPVideoMembersChanged, offVoIPChatStateChanged, offVoIPChatMembersChanged, offVoIPChatInterrupted, joinVoIPChat, exitVoIPChat };
|
|
17
|
+
export { updateVoIPChatMuteConfig, subscribeVoIPVideoMembers, setEnable1v1Chat, onVoIPVideoMembersChanged, onVoIPChatStateChanged, onVoIPChatSpeakersChanged, onVoIPChatMembersChanged, onVoIPChatInterrupted, offVoIPChatSpeakersChanged, offVoIPVideoMembersChanged, offVoIPChatStateChanged, offVoIPChatMembersChanged, offVoIPChatInterrupted, joinVoIPChat, join1v1Chat, exitVoIPChat };
|