diff --git a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/MediaController.js b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/MediaController.js index 0afaa40792c9e00ada54985e22fd72d1313e7152..9e0a86651ab23c88e3aa4b83ea9e4d9cc43cdef8 100644 --- a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/MediaController.js +++ b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/MediaController.js @@ -84,7 +84,7 @@ module.exports = class MediaController { } } - publishnsubscribe (userId, sourceId, sdp, params) { + publishnsubscribe (userId, sourceId, sdp, params = {}) { return new Promise(async (resolve, reject) => { Logger.info("[mcs-controller] PublishAndSubscribe from user", userId, "to source", sourceId); Logger.debug("[mcs-controler] PublishAndSubscribe descriptor is", params.descriptor); @@ -121,7 +121,7 @@ module.exports = class MediaController { }); } - publish (userId, roomId, type, params) { + publish (userId, roomId, type, params = {}) { return new Promise(async (resolve, reject) => { Logger.info("[mcs-controller] Publish from user", userId, "to room", roomId); Logger.debug("[mcs-controler] Publish descriptor is", params.descriptor); @@ -136,11 +136,11 @@ module.exports = class MediaController { switch (type) { case "RtpEndpoint": case "WebRtcEndpoint": - session = user.addSdp(params.descriptor, type); + session = user.addSdp(params.descriptor, type, params.adapter, params.name); answer = await user.startSession(session.id); break; case "URI": - session = user.addUri(params.descriptor, type); + session = user.addUri(params.descriptor, type, params.adapter, params.name); answer = await user.startSession(session.id); break; @@ -169,7 +169,7 @@ module.exports = class MediaController { }); } - subscribe (userId, sourceId, type, params) { + subscribe (userId, sourceId, type, params = {}) { return new Promise(async (resolve, reject) => { Logger.info("[mcs-controller] Subscribe from user", userId, "to source", sourceId); Logger.debug("[mcs-controler] Subscribe descriptor is", params.descriptor); @@ -190,7 +190,7 @@ module.exports = class MediaController { switch (type) { case "RtpEndpoint": case "WebRtcEndpoint": - session = user.addSdp(params.descriptor, type); + session = user.addSdp(params.descriptor, type, params.adapter, params.name); answer = await user.startSession(session.id); await sourceSession.connect(session._mediaElement); @@ -198,10 +198,9 @@ module.exports = class MediaController { Logger.info("[mcs-controller] Updated", sourceSession.id, "subscribers list to", sourceSession.subscribedSessions); break; case "URI": - session = user.addUri(params.descriptor, type); + session = user.addUri(params.descriptor, type, params.adapter, params.name); answer = await user.startSession(session.id); await sourceSession.connect(session._mediaElement); - break; default: return reject(new Error("[mcs-controller] Invalid media type")); diff --git a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/MediaSession.js b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/MediaSession.js index 84e5c819f188546fe237248cefd97d4aa7f56edf..e448d1b30fceabd73dedb05bc2024d06341cb0a9 100644 --- a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/MediaSession.js +++ b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/MediaSession.js @@ -7,14 +7,15 @@ const C = require('../constants/Constants'); const rid = require('readable-id'); -const MediaServer = require('../media/media-server'); +const Kurento = require('../adapters/kurento'); +const Freeswitch = require('../adapters/freeswitch/freeswitch'); const config = require('config'); const kurentoUrl = config.get('kurentoUrl'); const Logger = require('../../../utils/Logger'); const isError = require('../utils/util').isError; module.exports = class MediaSession { - constructor(emitter, room, type, options = {}) { + constructor(emitter, room, type = 'WebRtcEndpoint', adapter = C.STRING.KURENTO, name = C.STRING.DEFAULT_NAME, options = {}) { this.id = rid(); this.room = room; this.emitter = emitter; @@ -23,7 +24,9 @@ module.exports = class MediaSession { this._MediaServer = new MediaServer(kurentoUrl); this._mediaElement; this.subscribedSessions = []; - this._options = options; + this._adapter = adapter; + this._MediaServer = MediaSession.getAdapter(adapter); + this._name = name;this._options = options; this.eventQueue = []; } @@ -46,6 +49,7 @@ module.exports = class MediaSession { this.emitter.emit(C.EVENT.MEDIA_STATE.MEDIA_EVENT+this.id, event); } }); + this._MediaServer.trackMediaState(this._mediaElement, this._type); this._MediaServer.on(C.ERROR.MEDIA_SERVER_OFFLINE, () => { @@ -126,6 +130,23 @@ module.exports = class MediaSession { } } + static getAdapter (adapter) { + let obj = null; + + Logger.info("[SdpSession] Session is using the", adapter, "adapter"); + + switch (adapter) { + case C.STRING.KURENTO: + obj = new Kurento(kurentoUrl); + break; + case C.STRING.FREESWITCH: + obj = new Freeswitch(); + break; + default: Logger.warn("[SdpSession] Invalid adapter", this.adapter); } + + return obj; + } + _handleError (error) { Logger.error("[mcs-media-session] SFU MediaSession received an error", error); // Checking if the error needs to be wrapped into a JS Error instance diff --git a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/SdpSession.js b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/SdpSession.js index b97e535aa026d42678cb2f364dc5a28a6d7e0b39..77fc06644457d831f5689be84355fda588c8fc6e 100644 --- a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/SdpSession.js +++ b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/SdpSession.js @@ -8,7 +8,6 @@ const C = require('../constants/Constants'); const SdpWrapper = require('../utils/SdpWrapper'); const rid = require('readable-id'); -const MediaServer = require('../media/media-server'); const MediaSession = require('./MediaSession'); const config = require('config'); const kurentoUrl = config.get('kurentoUrl'); @@ -31,8 +30,7 @@ module.exports = class SdpSession extends MediaSession { async process () { try { - const answer = await this._MediaServer.processOffer(this._mediaElement, this._sdp.getPlainSdp()); - + const answer = await this._MediaServer.processOffer(this._mediaElement, this._sdp.getPlainSdp(), {name: this._name}); if (this._type === 'WebRtcEndpoint') { this._MediaServer.gatherCandidates(this._mediaElement); }