@privateid/ultra-web-sdk-alpha
Version:
CryptoNets WebAssembly SDK
171 lines • 6.79 kB
JavaScript
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