91 lines
3.0 KiB
Plaintext
91 lines
3.0 KiB
Plaintext
import { AVCaptureSession, AVAssetExportPresetHighestQuality, AVCaptureDevice, AVMediaType, AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureDeviceInput, AVCaptureInput, AVCaptureVideoDataOutput, AVCaptureConnection, AVCaptureVideoPreviewLayer, AVLayerVideoGravity, AVCaptureVideoOrientation, AVCaptureMovieFileOutput, AVCaptureFileOutputRecordingDelegate, AVCaptureOutput, AVCaptureFileOutput, AVAsset, AVAssetExportSession, AVFileType } from 'AVFoundation';
|
|
import { PHPhotoLibrary, PHAuthorizationStatus } from 'Photos';
|
|
import { CMSampleBuffer, CMSampleBufferGetFormatDescription, CMFormatDescription, CMVideoFormatDescriptionGetDimensions, CMSampleBufferGetImageBuffer } from 'CoreMedia';
|
|
import { DispatchQueue } from "Dispatch"
|
|
import { UIView, UIImage, UISaveVideoAtPathToSavedPhotosAlbum, UIImageWriteToSavedPhotosAlbum, UIApplication, UIImageView, UILabel, UIViewController, UIFontDescriptor, UIFont, NSTextAlignment, UITapGestureRecognizer, UIAlertController, UIGraphicsImageRenderer, UIGraphicsRendererContext, UIBezierPath, CameraDevice, UIImagePickerController } from 'UIKit';
|
|
import { CGRect, CGFloat, CGPoint, CGAffineTransform, CGSize } from 'CoreFoundation';
|
|
|
|
import { NotificationCenter, NSNotification, Notification, FileManager, Data, URL, NSError } from 'Foundation';
|
|
import { Selector } from 'ObjectiveC';
|
|
import { Alignment } from 'ARKit';
|
|
import { CIImage, CIContext } from 'CoreImage';
|
|
import { CGPath } from 'CoreGraphics';
|
|
|
|
import { xCamreaUOpts } from '../interface.uts';
|
|
import { xCamrea } from './libs/camrea.uts';
|
|
|
|
const camera = new xCamrea();
|
|
export class xCamreaU {
|
|
$element : UniNativeViewElement;
|
|
targetView : UIView = new UIView();
|
|
config : xCamreaUOpts;
|
|
|
|
constructor(element : UniNativeViewElement, opts : xCamreaUOpts) {
|
|
this.config = opts;
|
|
this.$element = element;
|
|
this.$element.bindIOSView(this.targetView);
|
|
camera.setView(this.targetView)
|
|
}
|
|
getIsOpeningCameraing():boolean{
|
|
return camera.getIsOpeningCameraing()
|
|
}
|
|
setCameraDir(dir:string){
|
|
camera.setCameraDir(dir)
|
|
}
|
|
setFlash(flash:boolean){
|
|
camera.setFlash(flash)
|
|
}
|
|
openCamrea(){
|
|
camera.openCamrea()
|
|
}
|
|
|
|
takePhoto(call:(path:string)=>void){
|
|
camera.takePhoto((path:string)=>{
|
|
call(path)
|
|
},false)
|
|
}
|
|
start(call:(path:string)=>void) {
|
|
camera.startRecoderVideo(call)
|
|
}
|
|
pause(){
|
|
camera.pauseRecoderVideo()
|
|
}
|
|
|
|
stop(){
|
|
camera.stopRecoderVideo()
|
|
}
|
|
|
|
/** 关闭相机 */
|
|
close() {
|
|
camera.closeCamrea()
|
|
}
|
|
|
|
}
|
|
|
|
// 检查权限
|
|
export function checkPermissions():Promise<boolean> {
|
|
return new Promise((res, rej) => {
|
|
PHPhotoLibrary.requestAuthorization((isok : PHAuthorizationStatus) => {
|
|
// 拒绝了相册选取权限。
|
|
if (isok != PHAuthorizationStatus.authorized) {
|
|
rej(false)
|
|
return;
|
|
}
|
|
AVCaptureDevice.requestAccess(for = AVMediaType.video, completionHandler = (isok2 : boolean) => {
|
|
if (!isok2) {
|
|
rej(false)
|
|
return;
|
|
}
|
|
|
|
AVCaptureDevice.requestAccess(for = AVMediaType.audio, completionHandler = (isok3 : boolean) => {
|
|
if (!isok3) {
|
|
rej(false)
|
|
return;
|
|
}
|
|
res(true)
|
|
})
|
|
})
|
|
})
|
|
}
|
|
}
|