use-simple-camera
Version:
Production-ready React Hooks for Camera, Video Recording, QR/Barcode Scanning, Motion Detection, and Audio Analysis. Zero dependencies, fully typed, and easy to use.
70 lines (68 loc) • 2.6 kB
TypeScript
import { CameraError, CameraPreset, FilterType, UseCameraConfig } from '../types';
export declare const useSimpleCamera: (config?: UseCameraConfig) => {
stream: MediaStream | null;
error: CameraError | null;
permissionGranted: boolean;
videoDevices: MediaDeviceInfo[];
audioDevices: MediaDeviceInfo[];
activePreset: CameraPreset | null;
startCamera: (constraintsOrPreset?: MediaStreamConstraints | {
preset: CameraPreset;
deviceId?: string;
}) => Promise<void>;
stopCamera: () => void;
acquirePermissions: () => Promise<void>;
startScreenShare: () => Promise<void>;
toggleVideo: (enabled: boolean) => void;
toggleAudio: (enabled: boolean) => void;
toggleFacingMode: () => Promise<void>;
togglePiP: (videoElement: HTMLVideoElement) => Promise<void>;
captureImage: (options?: {
mirror?: boolean;
format?: string;
quality?: number;
filter?: FilterType;
}) => Promise<string>;
controls: import('../types').CameraControls;
recorder: {
isRecording: boolean;
isPaused: boolean;
recordedBlob: Blob | null;
startRecording: (options?: import('../types').VideoRecorderOptions & {
onComplete?: (blob: Blob) => void;
mode?: "video-only" | "audio-only" | "both";
}) => void;
stopRecording: () => void;
pauseRecording: () => void;
resumeRecording: () => void;
takeSnapshot: () => Promise<Blob | null>;
clearRecordings: () => void;
};
audioLevel: {
volume: number;
};
motionDetection: {
motionDetected: boolean;
};
barcodeScanner: {
isSupported: boolean;
isScanning: boolean;
};
orientation: {
orientation: import('./useOrientation').OrientationType;
angle: number;
};
storage: {
saveToLocal: (blob: Blob, filename: string, options?: {
retentionMs?: number;
}) => Promise<void>;
getFromLocal: (filename: string) => Promise<Blob | null>;
deleteFromLocal: (filename: string) => Promise<void>;
downloadFromLocal: (filename: string) => Promise<void>;
uploadToRemote: (blob: Blob, options: import('./useStorage').UploadOptions) => Promise<void>;
isUploading: boolean;
};
setMotionCallback: import('react').Dispatch<import('react').SetStateAction<(() => void) | undefined>>;
setBarcodeCallback: import('react').Dispatch<import('react').SetStateAction<((code: string) => void) | undefined>>;
isCameraActive: boolean;
};