UNPKG

infobip-rtc

Version:

Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation

71 lines 3.6 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()); }); }; import _ from "lodash"; import { MediaDevice } from "./device/MediaDevice"; const AUDIO_INPUT = "audioinput"; const AUDIO_OUTPUT = "audiooutput"; const VIDEO_INPUT = "videoinput"; export class RTCMediaDevice { static getAudioInputDevices() { return RTCMediaDevice.requestPermission({ audio: true, video: false }) .then(() => RTCMediaDevice.getDevices(mediaDeviceInfo => mediaDeviceInfo.kind === AUDIO_INPUT)); } static getAudioOutputDevices() { return RTCMediaDevice.getDevices(mediaDeviceInfo => mediaDeviceInfo.kind === AUDIO_OUTPUT); } static getVideoInputDevices() { return RTCMediaDevice.requestPermission({ audio: false, video: true }) .then(() => RTCMediaDevice.getDevices(mediaDeviceInfo => mediaDeviceInfo.kind === VIDEO_INPUT)); } static getMediaStream(deviceId) { return RTCMediaDevice.getDevices(mediaDeviceInfo => mediaDeviceInfo.deviceId === deviceId) .then(devices => RTCMediaDevice.getMediaStreamForDevice(devices[0])); } static getAudioMediaStream(deviceId) { const constraints = { audio: { deviceId: deviceId !== null && deviceId !== void 0 ? deviceId : undefined }, video: false }; return navigator.mediaDevices.getUserMedia(constraints); } static getVideoMediaStream(deviceId, cameraOrientation) { const constraints = { audio: false, video: { deviceId: deviceId !== null && deviceId !== void 0 ? deviceId : undefined, facingMode: cameraOrientation } }; return navigator.mediaDevices.getUserMedia(constraints); } static closeMediaStream(mediaStream) { mediaStream.getTracks().forEach(track => track.stop()); } static getDevices(filterPredicate) { return navigator.mediaDevices.enumerateDevices() .then(devices => _.uniqBy(devices, 'deviceId')) .then(mediaDeviceInfos => mediaDeviceInfos.filter(filterPredicate).map(RTCMediaDevice.toMediaDevice)); } static getMediaStreamForDevice(mediaDevice) { if (mediaDevice.kind.endsWith("output")) { return Promise.reject("Cannot get media stream for output device."); } if (mediaDevice.kind.startsWith("video")) { return RTCMediaDevice.getVideoMediaStream(mediaDevice.deviceId); } else { return RTCMediaDevice.getAudioMediaStream(mediaDevice.deviceId); } } static toMediaDevice(mediaDeviceInfo) { return new MediaDevice(mediaDeviceInfo.deviceId, mediaDeviceInfo.groupId, mediaDeviceInfo.kind, mediaDeviceInfo.label); } static requestPermission(constraints) { return __awaiter(this, void 0, void 0, function* () { let stream = yield navigator.mediaDevices.getUserMedia(constraints); RTCMediaDevice.closeMediaStream(stream); }); } } //# sourceMappingURL=RTCMediaDevice.js.map