UNPKG

@ashetm/ng-mediastream

Version:

``@ashetm/ng-mediastream`` is a library that simplify manipulation of API ``MediaStream``.

101 lines 13.8 kB
import { Injectable, Injector } from '@angular/core'; import { MediastreamCameraMicrophoneService } from './mediastream-camera-microphone.service'; import { MediastreamCameraService } from './mediastream-camera.service'; import { MediastreamMicrophoneService } from './mediastream-microphone.service'; import { AMediastream } from './mediastream.class'; import { MEDIASTREAM_TOKEN_CAMERA_CONSTRAINTS, MEDIASTREAM_TOKEN_MICROPHONE_CONSTRAINTS } from './mediastream.token'; import * as i0 from "@angular/core"; export class MediastreamService extends AMediastream { constructor(_injector) { super(); this._injector = _injector; } async getCameraDevices() { return (await this.getDevices()).filter((device) => device.kind === 'videoinput'); } async getDevices() { return await this.MEDIA_DEVICES.enumerateDevices(); } async getMicrophoneDevices() { return (await this.getDevices()).filter((device) => device.kind === 'audioinput'); } async hasCameraDevices() { return (await this.getCameraDevices()).length !== 0; } async hasMicrophoneDevices() { return (await this.getMicrophoneDevices()).length !== 0; } async requestCamera(constraints) { const cameraConstraints = constraints || true; const injector = Injector.create({ providers: [ { provide: MediastreamCameraService, useClass: MediastreamCameraService }, { provide: MEDIASTREAM_TOKEN_CAMERA_CONSTRAINTS, useValue: cameraConstraints } ], parent: this._injector }); return await this.MEDIA_DEVICES.getUserMedia({ audio: false, video: cameraConstraints }).then(() => injector.get(MediastreamCameraService)); } async requestCameraAndMicrophone(constraints) { const cameraConstraints = constraints?.video || true; const microphoneConstraints = constraints?.audio || true; const injector = Injector.create({ providers: [ { provide: MediastreamCameraService, useClass: MediastreamCameraService }, { provide: MediastreamCameraMicrophoneService, useClass: MediastreamCameraMicrophoneService }, { provide: MediastreamMicrophoneService, useClass: MediastreamMicrophoneService }, { provide: MEDIASTREAM_TOKEN_CAMERA_CONSTRAINTS, useValue: cameraConstraints }, { provide: MEDIASTREAM_TOKEN_MICROPHONE_CONSTRAINTS, useValue: microphoneConstraints } ], parent: this._injector }); return await this.MEDIA_DEVICES.getUserMedia({ audio: microphoneConstraints, video: cameraConstraints }).then(() => injector.get(MediastreamCameraMicrophoneService)); } async requestMicrophone(constraints) { const microphoneConstraints = constraints || true; const injector = Injector.create({ providers: [ { provide: MediastreamMicrophoneService, useClass: MediastreamMicrophoneService }, { provide: MEDIASTREAM_TOKEN_MICROPHONE_CONSTRAINTS, useValue: microphoneConstraints } ], parent: this._injector }); return await this.MEDIA_DEVICES.getUserMedia({ audio: microphoneConstraints, video: false }).then(() => injector.get(MediastreamMicrophoneService)); } static { this.ɵfac = function MediastreamService_Factory(t) { return new (t || MediastreamService)(i0.ɵɵinject(i0.Injector)); }; } static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MediastreamService, factory: MediastreamService.ɵfac }); } } (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MediastreamService, [{ type: Injectable }], function () { return [{ type: i0.Injector }]; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWFzdHJlYW0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhc3RyZWFtL3NyYy9saWIvbWVkaWFzdHJlYW0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM3RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUNMLG9DQUFvQyxFQUNwQyx3Q0FBd0MsRUFDekMsTUFBTSxxQkFBcUIsQ0FBQzs7QUFJN0IsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFlBQVk7SUFFbEQsWUFBNkIsU0FBbUI7UUFDOUMsS0FBSyxFQUFFLENBQUM7UUFEbUIsY0FBUyxHQUFULFNBQVMsQ0FBVTtJQUVoRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQjtRQUNwQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUF1QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNkLE9BQU8sTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0I7UUFDeEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFF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QUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQzNDLEtBQUssRUFBRSxxQkFBcUI7WUFDNUIsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7bUZBekdVLGtCQUFrQjt1RUFBbEIsa0JBQWtCLFdBQWxCLGtCQUFrQjs7dUZBQWxCLGtCQUFrQjtjQUQ5QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWVkaWFzdHJlYW1DYW1lcmFNaWNyb3Bob25lU2VydmljZSB9IGZyb20gJy4vbWVkaWFzdHJlYW0tY2FtZXJhLW1pY3JvcGhvbmUuc2VydmljZSc7XG5pbXBvcnQgeyBNZWRpYXN0cmVhbUNhbWVyYVNlcnZpY2UgfSBmcm9tICcuL21lZGlhc3RyZWFtLWNhbWVyYS5zZXJ2aWNlJztcbmltcG9ydCB7IE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2UgfSBmcm9tICcuL21lZGlhc3RyZWFtLW1pY3JvcGhvbmUuc2VydmljZSc7XG5pbXBvcnQgeyBBTWVkaWFzdHJlYW0gfSBmcm9tICcuL21lZGlhc3RyZWFtLmNsYXNzJztcbmltcG9ydCB7XG4gIE1FRElBU1RSRUFNX1RPS0VOX0NBTUVSQV9DT05TVFJBSU5UUyxcbiAgTUVESUFTVFJFQU1fVE9LRU5fTUlDUk9QSE9ORV9DT05TVFJBSU5UU1xufSBmcm9tICcuL21lZGlhc3RyZWFtLnRva2VuJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWVkaWFzdHJlYW1TZXJ2aWNlIGV4dGVuZHMgQU1lZGlhc3RyZWFtIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2FtZXJhRGV2aWNlcygpOiBQcm9taXNlPE1lZGlhRGV2aWNlSW5mb1tdPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldERldmljZXMoKSkuZmlsdGVyKChkZXZpY2U6IE1lZGlhRGV2aWNlSW5mbykgPT4gZGV2aWNlLmtpbmQgPT09ICd2aWRlb2lucHV0Jyk7XG4gIH1cblxuICBhc3luYyBnZXREZXZpY2VzKCk6IFByb21pc2U8TWVkaWFEZXZpY2VJbmZvW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5NRURJQV9ERVZJQ0VTLmVudW1lcmF0ZURldmljZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1pY3JvcGhvbmVEZXZpY2VzKCk6IFByb21pc2U8TWVkaWFEZXZpY2VJbmZvW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0RGV2aWNlcygpKS5maWx0ZXIoKGRldmljZTogTWVkaWFEZXZpY2VJbmZvKSA9PiBkZXZpY2Uua2luZCA9PT0gJ2F1ZGlvaW5wdXQnKTtcbiAgfVxuXG4gIGFzeW5jIGhhc0NhbWVyYURldmljZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldENhbWVyYURldmljZXMoKSkubGVuZ3RoICE9PSAwO1xuICB9XG5cbiAgYXN5bmMgaGFzTWljcm9waG9uZURldmljZXMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmdldE1pY3JvcGhvbmVEZXZpY2VzKCkpLmxlbmd0aCAhPT0gMDtcbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3RDYW1lcmEoXG4gICAgY29uc3RyYWludHM/OiBNZWRpYVRyYWNrQ29uc3RyYWludHNcbiAgKTogUHJvbWlzZTxNZWRpYXN0cmVhbUNhbWVyYVNlcnZpY2U+IHtcbiAgICBjb25zdCBjYW1lcmFDb25zdHJhaW50czogYm9vbGVhbiB8IE1lZGlhVHJhY2tDb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzIHx8IHRydWU7XG4gICAgY29uc3QgaW5qZWN0b3I6IEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTWVkaWFzdHJlYW1DYW1lcmFTZXJ2aWNlLFxuICAgICAgICAgIHVzZUNsYXNzOiBNZWRpYXN0cmVhbUNhbWVyYVNlcnZpY2VcbiAgICAgICAgfSwge1xuICAgICAgICAgIHByb3ZpZGU6IE1FRElBU1RSRUFNX1RPS0VOX0NBTUVSQV9DT05TVFJBSU5UUyxcbiAgICAgICAgICB1c2VWYWx1ZTogY2FtZXJhQ29uc3RyYWludHNcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLk1FRElBX0RFVklDRVMuZ2V0VXNlck1lZGlhKHtcbiAgICAgIGF1ZGlvOiBmYWxzZSxcbiAgICAgIHZpZGVvOiBjYW1lcmFDb25zdHJhaW50c1xuICAgIH0pLnRoZW4oKCkgPT4gaW5qZWN0b3IuZ2V0KE1lZGlhc3RyZWFtQ2FtZXJhU2VydmljZSkpO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdENhbWVyYUFuZE1pY3JvcGhvbmUoY29uc3RyYWludHM/OiBQYXJ0aWFsPFxuICAgIFJlY29yZDwnYXVkaW8nIHwgJ3ZpZGVvJywgTWVkaWFUcmFja0NvbnN0cmFpbnRzPlxuICA+KTogUHJvbWlzZTxNZWRpYXN0cmVhbUNhbWVyYU1pY3JvcGhvbmVTZXJ2aWNlPiB7XG4gICAgY29uc3QgY2FtZXJhQ29uc3RyYWludHM6IGJvb2xlYW4gfCBNZWRpYVRyYWNrQ29uc3RyYWludHNcbiAgICAgID0gY29uc3RyYWludHM/LnZpZGVvIHx8IHRydWU7XG4gICAgY29uc3QgbWljcm9waG9uZUNvbnN0cmFpbnRzOiBib29sZWFuIHwgTWVkaWFUcmFja0NvbnN0cmFpbnRzXG4gICAgICA9IGNvbnN0cmFpbnRzPy5hdWRpbyB8fCB0cnVlO1xuICAgIGNvbnN0IGluamVjdG9yOiBJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE1lZGlhc3RyZWFtQ2FtZXJhU2VydmljZSxcbiAgICAgICAgICB1c2VDbGFzczogTWVkaWFzdHJlYW1DYW1lcmFTZXJ2aWNlXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBwcm92aWRlOiBNZWRpYXN0cmVhbUNhbWVyYU1pY3JvcGhvbmVTZXJ2aWNlLFxuICAgICAgICAgIHVzZUNsYXNzOiBNZWRpYXN0cmVhbUNhbWVyYU1pY3JvcGhvbmVTZXJ2aWNlXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBwcm92aWRlOiBNZWRpYXN0cmVhbU1pY3JvcGhvbmVTZXJ2aWNlLFxuICAgICAgICAgIHVzZUNsYXNzOiBNZWRpYXN0cmVhbU1pY3JvcGhvbmVTZXJ2aWNlXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBwcm92aWRlOiBNRURJQVNUUkVBTV9UT0tFTl9DQU1FUkFfQ09OU1RSQUlOVFMsXG4gICAgICAgICAgdXNlVmFsdWU6IGNhbWVyYUNvbnN0cmFpbnRzXG4gICAgICAgIH0sIHtcbiAgICAgICAgICBwcm92aWRlOiBNRURJQVNUUkVBTV9UT0tFTl9NSUNST1BIT05FX0NPTlNUUkFJTlRTLFxuICAgICAgICAgIHVzZVZhbHVlOiBtaWNyb3Bob25lQ29uc3RyYWludHNcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLk1FRElBX0RFVklDRVMuZ2V0VXNlck1lZGlhKHtcbiAgICAgIGF1ZGlvOiBtaWNyb3Bob25lQ29uc3RyYWludHMsXG4gICAgICB2aWRlbzogY2FtZXJhQ29uc3RyYWludHNcbiAgICB9KS50aGVuKCgpID0+IGluamVjdG9yLmdldChNZWRpYXN0cmVhbUNhbWVyYU1pY3JvcGhvbmVTZXJ2aWNlKSk7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0TWljcm9waG9uZShcbiAgICBjb25zdHJhaW50cz86IE1lZGlhVHJhY2tDb25zdHJhaW50c1xuICApOiBQcm9taXNlPE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2U+IHtcbiAgICBjb25zdCBtaWNyb3Bob25lQ29uc3RyYWludHM6IGJvb2xlYW4gfCBNZWRpYVRyYWNrQ29uc3RyYWludHMgPSBjb25zdHJhaW50cyB8fCB0cnVlO1xuICAgIGNvbnN0IGluamVjdG9yOiBJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2UsXG4gICAgICAgICAgdXNlQ2xhc3M6IE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2VcbiAgICAgICAgfSwge1xuICAgICAgICAgIHByb3ZpZGU6IE1FRElBU1RSRUFNX1RPS0VOX01JQ1JPUEhPTkVfQ09OU1RSQUlOVFMsXG4gICAgICAgICAgdXNlVmFsdWU6IG1pY3JvcGhvbmVDb25zdHJhaW50c1xuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvclxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuTUVESUFfREVWSUNFUy5nZXRVc2VyTWVkaWEoe1xuICAgICAgYXVkaW86IG1pY3JvcGhvbmVDb25zdHJhaW50cyxcbiAgICAgIHZpZGVvOiBmYWxzZVxuICAgIH0pLnRoZW4oKCkgPT4gaW5qZWN0b3IuZ2V0KE1lZGlhc3RyZWFtTWljcm9waG9uZVNlcnZpY2UpKTtcbiAgfVxuXG59XG4iXX0=