UNPKG

@privateid/ultra-web-sdk-alpha

Version:
171 lines 6.79 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; /* eslint-disable import/prefer-default-export */ /* eslint-disable lines-between-class-members */ import { CameraFaceMode } from '../camera.types'; import { printLogs, setDefaultCameraDeviceId } from '../../../global/shared.utils'; import { startVideo, enableMutationObserver, getDefaultDevice, getDevicesWithCapabilities, createBestResolutionStream, getVideoInputDevices, } from '../camera.utils'; export class BaseCameraService { constructor() { /** Current video element ID being used for camera stream */ this.videoElementId = null; /** Selected camera device ID */ this.currentDeviceId = null; /** Current camera facing mode (front/back) */ this.faceMode = CameraFaceMode.front; /** Active media stream from the camera */ this.mediaStream = null; /** List of available media devices (cameras) */ this.mediaDevices = null; /** Observer to monitor unauthorized video source changes */ this.videoMutationObserver = null; } prepareCameraResult(stream, devices, faceMode, videoElementId) { return __awaiter(this, void 0, void 0, function* () { const track = stream.getVideoTracks()[0]; const capabilities = track.getCapabilities ? track.getCapabilities() : null; const settings = track.getSettings(); printLogs('settings: ', settings); if (capabilities) { printLogs('capabilities: ', capabilities); } yield startVideo(videoElementId, stream); this.setMediaStream(stream); this.setMediaDevices(devices); return { // TODO: what does this status represents? Should it be `success`? status: true, stream, devices, faceMode, settings, capabilities, errorMessage: null, }; }); } closeCamera(element) { return __awaiter(this, void 0, void 0, function* () { try { const video = element || this.getVideoElementId(); const videoEl = document.getElementById(video); const streamFromElement = videoEl === null || videoEl === void 0 ? void 0 : videoEl.srcObject; if (streamFromElement) { streamFromElement.getTracks().forEach((track) => track.stop()); videoEl.srcObject = null; } this.closeMediaStream(); this.setVideoElementId(null); this.setCurrentDeviceId(null); this.setMediaDevices(null); this.closeVideoMutationObserver(); } catch (err) { printLogs(`Close Camera: `, err, 'ERROR'); } }); } switchCamera(selectedCamera, deviceId, canvasResolution) { return __awaiter(this, void 0, void 0, function* () { if (!this.getVideoElementId()) return null; this.closeMediaStream(); let devices = yield getVideoInputDevices(); devices = getDevicesWithCapabilities(devices); const deviceCapabilites = getDefaultDevice(devices, deviceId); if (selectedCamera) { this.setFaceMode(selectedCamera); } if (deviceId) { this.setCurrentDeviceId(deviceId); // TODO: Rename this function to something like: store/persist default camera id setDefaultCameraDeviceId(deviceId); } const stream = yield createBestResolutionStream(deviceCapabilites, canvasResolution); const element = document.getElementById(this.getVideoElementId()); element.srcObject = stream; this.setMediaStream(stream); const track = this.getMediaStreamTrack(); printLogs(`switch camera capabilities: `, track.capabilities); printLogs(`switch camera settings: `, track.settings); enableMutationObserver(element, stream); return track; }); } isActive() { return this.mediaStream !== null; } // Video Element ID setVideoElementId(videoElementId) { this.videoElementId = videoElementId; } getVideoElementId() { return this.videoElementId; } // Video Element DOM getVideoElementDOM() { if (!this.videoElementId) return null; return document.getElementById(this.videoElementId); } // Face Mode setFaceMode(faceMode) { this.faceMode = faceMode; } getFaceMode() { return this.faceMode; } // Media Stream setMediaStream(mediaStream) { this.mediaStream = mediaStream; } getMediaStream() { return this.mediaStream; } closeMediaStream() { if (this.mediaStream) { this.mediaStream.getTracks().forEach((track) => track.stop()); } } getMediaStreamTrack() { const track = this.mediaStream.getVideoTracks()[0]; const capabilities = (track === null || track === void 0 ? void 0 : track.getCapabilities) ? track.getCapabilities() : null; const settings = track.getSettings(); return { capabilities, settings, }; } // Media Devices setMediaDevices(devices) { this.mediaDevices = devices; } getMediaDevices() { return this.mediaDevices; } // Current Device setCurrentDeviceId(deviceId) { this.currentDeviceId = deviceId; } getCurrentDeviceId() { return this.currentDeviceId; } // Video Mutation Observer getVideoMutationObserver() { return this.videoMutationObserver; } closeVideoMutationObserver() { if (this.videoMutationObserver) { this.videoMutationObserver.disconnect(); this.videoMutationObserver = null; } } } //# sourceMappingURL=BaseCameraService.js.map