UNPKG

kwikid-camera

Version:
115 lines 14.5 kB
import { __awaiter } from "tslib"; import { isEmptyValue } from "kwikid-toolkit"; // TOOLKIT export function getDevicesList() { return __awaiter(this, void 0, void 0, function* () { const videoDevices = []; try { // Request permission to access media devices const temporaryStream = yield navigator.mediaDevices.getUserMedia({ audio: true, video: true }); // Enumerate devices if permission is granted yield navigator.mediaDevices.enumerateDevices().then((devices) => __awaiter(this, void 0, void 0, function* () { for (const device of devices) { if (device.kind === "videoinput") { const constraints = { video: { deviceId: { exact: device.deviceId } } }; yield navigator.mediaDevices .getUserMedia(constraints) .then((stream) => { const track = stream.getVideoTracks()[0]; const { facingMode } = track.getSettings(); videoDevices.push({ deviceId: device.deviceId, groupId: device.groupId, kind: device.kind, label: device.label, facingMode }); // You can now identify whether it's a front or back camera // Handle your logic accordingly stream.getTracks().forEach((track) => track.stop()); }) .catch((error) => { console.error("Error accessing camera:", error); }); } } // Stop the stream after enumeration temporaryStream.getTracks().forEach((track) => track.stop()); })); return videoDevices; } catch (error) { // Handle permission denied or other errors console.info("Error accessing video devices:", error); return videoDevices; // You might want to handle this differently based on your requirements } }); } // TOOLKIT export function getDevice(videoDevices, isFrontCamera) { return __awaiter(this, void 0, void 0, function* () { if (videoDevices.length === 0) { return { deviceId: null, facingMode: null }; } if (videoDevices.length === 1) { return videoDevices[0]; } if (videoDevices.length > 1) { const frontCameraDevices = videoDevices.filter((videoDevice) => { return videoDevice.facingMode === "user"; }); const backCameraDevices = videoDevices.filter((videoDevice) => { return videoDevice.facingMode === "environment"; }); if (isFrontCamera) { if (frontCameraDevices.length > 0) { return frontCameraDevices[0]; } return backCameraDevices[0]; } if (!isFrontCamera) { if (backCameraDevices.length > 0) { return backCameraDevices[0]; } return frontCameraDevices[0]; } } return { deviceId: null, facingMode: null }; }); } // TOOLKIT export function getBase64FromVideoFile(videoFile) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => { const base64String = reader.result; resolve(base64String); // Resolve the Promise with the base64 string }; reader.onerror = (error) => { reject(error); // Reject the Promise in case of an error }; reader.readAsDataURL( // This conversion is required due to browser differences and also video tag can't play certain type of formats. new File([videoFile], "video.webm", { type: "video/webm" })); }); } export function getCorrectVideoFormat(video) { if (isEmptyValue(video)) { return ""; } if (Array.isArray(video)) { return video.find((vid) => typeof vid === "string" && vid.length !== 0); } if (typeof video === "string") { return video; } return ""; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3dpa2lkLWNhbWVyYS1yZWNvcmQuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva3dpa2lkLWNhbWVyYS9zcmMvbGliL2NvbXBvbmVudHMva3dpa2lkLWNhbWVyYS1yZWNvcmQva3dpa2lkLWNhbWVyYS1yZWNvcmQuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsVUFBVTtBQUNWLE1BQU0sVUFBZ0IsY0FBYzs7UUFDbEMsTUFBTSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBRS9CLElBQUk7WUFDRiw2Q0FBNkM7WUFDN0MsTUFBTSxlQUFlLEdBQUcsTUFBTSxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztnQkFDaEUsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7WUFFSCw2Q0FBNkM7WUFDN0MsTUFBTSxTQUFTLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQU8sT0FBTyxFQUFFLEVBQUU7Z0JBQ3JFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO29CQUM1QixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO3dCQUNoQyxNQUFNLFdBQVcsR0FBRzs0QkFDbEIsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRTt5QkFDaEQsQ0FBQzt3QkFFRixNQUFNLFNBQVMsQ0FBQyxZQUFZOzZCQUN6QixZQUFZLENBQUMsV0FBVyxDQUFDOzZCQUN6QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTs0QkFDZixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3pDLE1BQU0s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QUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUVoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNuQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBZ0IsQ0FBQztZQUM3QyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7UUFDdEUsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztRQUMxRCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsYUFBYTtRQUNsQixnSEFBZ0g7UUFDaEgsSUFBSSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZLEVBQUU7WUFDbEMsSUFBSSxFQUFFLFlBQVk7U0FDbkIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBVTtJQUM5QyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN2QixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDekU7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eVZhbHVlIH0gZnJvbSBcImt3aWtpZC10b29sa2l0XCI7XG5cbi8vIFRPT0xLSVRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2VzTGlzdCgpOiBQcm9taXNlPGFueT4ge1xuICBjb25zdCB2aWRlb0RldmljZXM6IGFueVtdID0gW107XG5cbiAgdHJ5IHtcbiAgICAvLyBSZXF1ZXN0IHBlcm1pc3Npb24gdG8gYWNjZXNzIG1lZGlhIGRldmljZXNcbiAgICBjb25zdCB0ZW1wb3JhcnlTdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICBhdWRpbzogdHJ1ZSxcbiAgICAgIHZpZGVvOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvLyBFbnVtZXJhdGUgZGV2aWNlcyBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWRcbiAgICBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmVudW1lcmF0ZURldmljZXMoKS50aGVuKGFzeW5jIChkZXZpY2VzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGRldmljZSBvZiBkZXZpY2VzKSB7XG4gICAgICAgIGlmIChkZXZpY2Uua2luZCA9PT0gXCJ2aWRlb2lucHV0XCIpIHtcbiAgICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IHtcbiAgICAgICAgICAgIHZpZGVvOiB7IGRldmljZUlkOiB7IGV4YWN0OiBkZXZpY2UuZGV2aWNlSWQgfSB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXNcbiAgICAgICAgICAgIC5nZXRVc2VyTWVkaWEoY29uc3RyYWludHMpXG4gICAgICAgICAgICAudGhlbigoc3RyZWFtKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrID0gc3RyZWFtLmdldFZpZGVvVHJhY2tzKClbMF07XG4gICAgICAgICAgICAgIGNvbnN0IHsgZmFjaW5nTW9kZSB9ID0gdHJhY2suZ2V0U2V0dGluZ3MoKTtcblxuICAgICAgICAgICAgICB2aWRlb0RldmljZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZGV2aWNlSWQ6IGRldmljZS5kZXZpY2VJZCxcbiAgICAgICAgICAgICAgICBncm91cElkOiBkZXZpY2UuZ3JvdXBJZCxcbiAgICAgICAgICAgICAgICBraW5kOiBkZXZpY2Uua2luZCxcbiAgICAgICAgICAgICAgICBsYWJlbDogZGV2aWNlLmxhYmVsLFxuICAgICAgICAgICAgICAgIGZhY2luZ01vZGVcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgLy8gWW91IGNhbiBub3cgaWRlbnRpZnkgd2hldGhlciBpdCdzIGEgZnJvbnQgb3IgYmFjayBjYW1lcmFcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIHlvdXIgbG9naWMgYWNjb3JkaW5nbHlcblxuICAgICAgICAgICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCgodHJhY2spID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgYWNjZXNzaW5nIGNhbWVyYTpcIiwgZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RvcCB0aGUgc3RyZWFtIGFmdGVyIGVudW1lcmF0aW9uXG4gICAgICB0ZW1wb3JhcnlTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCgodHJhY2s6IGFueSkgPT4gdHJhY2suc3RvcCgpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB2aWRlb0RldmljZXM7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSGFuZGxlIHBlcm1pc3Npb24gZGVuaWVkIG9yIG90aGVyIGVycm9yc1xuICAgIGNvbnNvbGUuaW5mbyhcIkVycm9yIGFjY2Vzc2luZyB2aWRlbyBkZXZpY2VzOlwiLCBlcnJvcik7XG5cbiAgICByZXR1cm4gdmlkZW9EZXZpY2VzOyAvLyBZb3UgbWlnaHQgd2FudCB0byBoYW5kbGUgdGhpcyBkaWZmZXJlbnRseSBiYXNlZCBvbiB5b3VyIHJlcXVpcmVtZW50c1xuICB9XG59XG5cbi8vIFRPT0xLSVRcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREZXZpY2UoXG4gIHZpZGVvRGV2aWNlczogYW55LFxuICBpc0Zyb250Q2FtZXJhOiBib29sZWFuXG4pOiBQcm9taXNlPGFueT4ge1xuICBpZiAodmlkZW9EZXZpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IGRldmljZUlkOiBudWxsLCBmYWNpbmdNb2RlOiBudWxsIH07XG4gIH1cbiAgaWYgKHZpZGVvRGV2aWNlcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdmlkZW9EZXZpY2VzWzBdO1xuICB9XG4gIGlmICh2aWRlb0RldmljZXMubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGZyb250Q2FtZXJhRGV2aWNlcyA9IHZpZGVvRGV2aWNlcy5maWx0ZXIoKHZpZGVvRGV2aWNlOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB2aWRlb0RldmljZS5mYWNpbmdNb2RlID09PSBcInVzZXJcIjtcbiAgICB9KTtcbiAgICBjb25zdCBiYWNrQ2FtZXJhRGV2aWNlcyA9IHZpZGVvRGV2aWNlcy5maWx0ZXIoKHZpZGVvRGV2aWNlOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB2aWRlb0RldmljZS5mYWNpbmdNb2RlID09PSBcImVudmlyb25tZW50XCI7XG4gICAgfSk7XG4gICAgaWYgKGlzRnJvbnRDYW1lcmEpIHtcbiAgICAgIGlmIChmcm9udENhbWVyYURldmljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gZnJvbnRDYW1lcmFEZXZpY2VzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJhY2tDYW1lcmFEZXZpY2VzWzBdO1xuICAgIH1cbiAgICBpZiAoIWlzRnJvbnRDYW1lcmEpIHtcbiAgICAgIGlmIChiYWNrQ2FtZXJhRGV2aWNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrQ2FtZXJhRGV2aWNlc1swXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9udENhbWVyYURldmljZXNbMF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgZGV2aWNlSWQ6IG51bGwsIGZhY2luZ01vZGU6IG51bGwgfTtcbn1cblxuLy8gVE9PTEtJVFxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2U2NEZyb21WaWRlb0ZpbGUodmlkZW9GaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGJhc2U2NFN0cmluZyA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgcmVzb2x2ZShiYXNlNjRTdHJpbmcpOyAvLyBSZXNvbHZlIHRoZSBQcm9taXNlIHdpdGggdGhlIGJhc2U2NCBzdHJpbmdcbiAgICB9O1xuXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7IC8vIFJlamVjdCB0aGUgUHJvbWlzZSBpbiBjYXNlIG9mIGFuIGVycm9yXG4gICAgfTtcblxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKFxuICAgICAgLy8gVGhpcyBjb252ZXJzaW9uIGlzIHJlcXVpcmVkIGR1ZSB0byBicm93c2VyIGRpZmZlcmVuY2VzIGFuZCBhbHNvIHZpZGVvIHRhZyBjYW4ndCBwbGF5IGNlcnRhaW4gdHlwZSBvZiBmb3JtYXRzLlxuICAgICAgbmV3IEZpbGUoW3ZpZGVvRmlsZV0sIFwidmlkZW8ud2VibVwiLCB7XG4gICAgICAgIHR5cGU6IFwidmlkZW8vd2VibVwiXG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29ycmVjdFZpZGVvRm9ybWF0KHZpZGVvOiBhbnkpOiBzdHJpbmcge1xuICBpZiAoaXNFbXB0eVZhbHVlKHZpZGVvKSkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmlkZW8pKSB7XG4gICAgcmV0dXJuIHZpZGVvLmZpbmQoKHZpZCkgPT4gdHlwZW9mIHZpZCA9PT0gXCJzdHJpbmdcIiAmJiB2aWQubGVuZ3RoICE9PSAwKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmlkZW8gPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gdmlkZW87XG4gIH1cblxuICByZXR1cm4gXCJcIjtcbn1cbiJdfQ==