diff --git a/openvidu-browser/src/OpenVidu/LocalRecorder.ts b/openvidu-browser/src/OpenVidu/LocalRecorder.ts index fa18b95e..98a0bd8e 100644 --- a/openvidu-browser/src/OpenVidu/LocalRecorder.ts +++ b/openvidu-browser/src/OpenVidu/LocalRecorder.ts @@ -33,7 +33,7 @@ const logger: OpenViduLogger = OpenViduLogger.getInstance(); /** * @hidden */ -const platform: PlatformUtils = PlatformUtils.getInstance(); +let platform: PlatformUtils; /** @@ -59,6 +59,7 @@ export class LocalRecorder { * @hidden */ constructor(private stream: Stream) { + platform = PlatformUtils.getInstance(); this.connectionId = (!!this.stream.connection) ? this.stream.connection.connectionId : 'default-connection'; this.id = this.stream.streamId + '_' + this.connectionId + '_localrecord'; this.state = LocalRecorderState.READY; diff --git a/openvidu-browser/src/OpenVidu/OpenVidu.ts b/openvidu-browser/src/OpenVidu/OpenVidu.ts index 9e98fecb..ba7c018d 100644 --- a/openvidu-browser/src/OpenVidu/OpenVidu.ts +++ b/openvidu-browser/src/OpenVidu/OpenVidu.ts @@ -57,7 +57,7 @@ const logger: OpenViduLogger = OpenViduLogger.getInstance(); /** * @hidden */ -const platform: PlatformUtils = PlatformUtils.getInstance(); +let platform: PlatformUtils; /** * Entrypoint of OpenVidu Browser library. @@ -117,6 +117,7 @@ export class OpenVidu { ee = new EventEmitter() constructor() { + platform = PlatformUtils.getInstance(); this.libraryVersion = packageJson.version; logger.info("'OpenVidu' initialized"); logger.info("openvidu-browser version: " + this.libraryVersion); diff --git a/openvidu-browser/src/OpenVidu/Publisher.ts b/openvidu-browser/src/OpenVidu/Publisher.ts index 26b45193..136fd354 100644 --- a/openvidu-browser/src/OpenVidu/Publisher.ts +++ b/openvidu-browser/src/OpenVidu/Publisher.ts @@ -38,7 +38,7 @@ const logger: OpenViduLogger = OpenViduLogger.getInstance(); /** * @hidden */ -const platform: PlatformUtils = PlatformUtils.getInstance(); +let platform: PlatformUtils; /** * Packs local media streams. Participants can publish it to a session. Initialized with [[OpenVidu.initPublisher]] method @@ -96,6 +96,7 @@ export class Publisher extends StreamManager { */ constructor(targEl: string | HTMLElement, properties: PublisherProperties, openvidu: OpenVidu) { super(new Stream((!!openvidu.session) ? openvidu.session : new Session(openvidu), { publisherProperties: properties, mediaConstraints: {} }), targEl); + platform = PlatformUtils.getInstance(); this.properties = properties; this.openvidu = openvidu; diff --git a/openvidu-browser/src/OpenVidu/Session.ts b/openvidu-browser/src/OpenVidu/Session.ts index c401e53b..29a05304 100644 --- a/openvidu-browser/src/OpenVidu/Session.ts +++ b/openvidu-browser/src/OpenVidu/Session.ts @@ -53,7 +53,7 @@ const logger: OpenViduLogger = OpenViduLogger.getInstance(); /** * @hidden */ -const platform: PlatformUtils = PlatformUtils.getInstance(); +let platform: PlatformUtils; /** * Represents a video call. It can also be seen as a videoconference room where multiple users can connect. @@ -149,6 +149,7 @@ export class Session extends EventDispatcher { */ constructor(openvidu: OpenVidu) { super(); + platform = PlatformUtils.getInstance(); this.openvidu = openvidu; } @@ -1202,7 +1203,7 @@ export class Session extends EventDispatcher { } else { setTimeout(obtainAndSendVideo, intervalSeconds * 1000); } - } else if (platform.isFirefoxBrowser() || platform.isFirefoxMobileBrowser() || platform.isIonicIos()) { + } else if (platform.isFirefoxBrowser() || platform.isFirefoxMobileBrowser() || platform.isIonicIos() || platform.isReactNative()) { // Basic version for Firefox and Ionic iOS. They do not support stats this.openvidu.sendRequest('videoData', { height: streamManager.stream.videoDimensions.height, diff --git a/openvidu-browser/src/OpenVidu/Stream.ts b/openvidu-browser/src/OpenVidu/Stream.ts index b8ebb05d..35e02898 100644 --- a/openvidu-browser/src/OpenVidu/Stream.ts +++ b/openvidu-browser/src/OpenVidu/Stream.ts @@ -45,7 +45,7 @@ const logger: OpenViduLogger = OpenViduLogger.getInstance(); /** * @hidden */ -const platform: PlatformUtils = PlatformUtils.getInstance(); +let platform: PlatformUtils; /** * Represents each one of the media streams available in OpenVidu Server for certain session. @@ -215,7 +215,7 @@ export class Stream extends EventDispatcher { constructor(session: Session, options: InboundStreamOptions | OutboundStreamOptions | {}) { super(); - + platform = PlatformUtils.getInstance(); this.session = session; if (options.hasOwnProperty('id')) { diff --git a/openvidu-browser/src/OpenVidu/StreamManager.ts b/openvidu-browser/src/OpenVidu/StreamManager.ts index 1318b07f..a2d3e03f 100644 --- a/openvidu-browser/src/OpenVidu/StreamManager.ts +++ b/openvidu-browser/src/OpenVidu/StreamManager.ts @@ -33,7 +33,7 @@ const logger: OpenViduLogger = OpenViduLogger.getInstance(); /** * @hidden */ -const platform: PlatformUtils = PlatformUtils.getInstance(); +let platform: PlatformUtils; /** * Interface in charge of displaying the media streams in the HTML DOM. This wraps any [[Publisher]] and [[Subscriber]] object. @@ -106,7 +106,7 @@ export class StreamManager extends EventDispatcher { */ constructor(stream: Stream, targetElement?: HTMLElement | string) { super(); - + platform = PlatformUtils.getInstance(); this.stream = stream; this.stream.streamManager = this; this.remote = !this.stream.isLocal(); diff --git a/openvidu-browser/src/OpenViduInternal/Utils/Platform.ts b/openvidu-browser/src/OpenViduInternal/Utils/Platform.ts index a591b38e..ee43e2c1 100644 --- a/openvidu-browser/src/OpenViduInternal/Utils/Platform.ts +++ b/openvidu-browser/src/OpenViduInternal/Utils/Platform.ts @@ -1,12 +1,12 @@ import platform = require("platform"); export class PlatformUtils { - private static instance: PlatformUtils; - private constructor() {} + protected static instance: PlatformUtils; + constructor() {} static getInstance(): PlatformUtils { - if (!PlatformUtils.instance) { - PlatformUtils.instance = new PlatformUtils(); + if (!this.instance) { + this.instance = new PlatformUtils(); } return PlatformUtils.instance; } @@ -141,6 +141,13 @@ export class PlatformUtils { return platform.os!!.family === "iOS" || platform.os!!.family === "Android"; } + /** + * @hidden + */ + public isReactNative(): boolean { + return false; + } + /** * @hidden */ diff --git a/openvidu-browser/src/OpenViduInternal/WebRtcPeer/WebRtcPeer.ts b/openvidu-browser/src/OpenViduInternal/WebRtcPeer/WebRtcPeer.ts index cefdb392..6c701f3a 100644 --- a/openvidu-browser/src/OpenViduInternal/WebRtcPeer/WebRtcPeer.ts +++ b/openvidu-browser/src/OpenViduInternal/WebRtcPeer/WebRtcPeer.ts @@ -27,7 +27,7 @@ const logger: OpenViduLogger = OpenViduLogger.getInstance(); /** * @hidden */ -const platform: PlatformUtils = PlatformUtils.getInstance(); +let platform: PlatformUtils; export interface WebRtcPeerConfiguration { @@ -55,6 +55,7 @@ export class WebRtcPeer { private candidategatheringdone = false; constructor(protected configuration: WebRtcPeerConfiguration) { + platform = PlatformUtils.getInstance(); this.configuration.iceServers = (!!this.configuration.iceServers && this.configuration.iceServers.length > 0) ? this.configuration.iceServers : freeice(); this.pc = new RTCPeerConnection({ iceServers: this.configuration.iceServers }); diff --git a/openvidu-browser/src/OpenViduInternal/WebRtcStats/WebRtcStats.ts b/openvidu-browser/src/OpenViduInternal/WebRtcStats/WebRtcStats.ts index 5007192e..3c1327b7 100644 --- a/openvidu-browser/src/OpenViduInternal/WebRtcStats/WebRtcStats.ts +++ b/openvidu-browser/src/OpenViduInternal/WebRtcStats/WebRtcStats.ts @@ -27,7 +27,7 @@ const logger: OpenViduLogger = OpenViduLogger.getInstance(); /** * @hidden */ -const platform: PlatformUtils = PlatformUtils.getInstance(); +let platform: PlatformUtils; export class WebRtcStats { @@ -63,7 +63,9 @@ export class WebRtcStats { } }; - constructor(private stream: Stream) { } + constructor(private stream: Stream) { + platform = PlatformUtils.getInstance(); + } public isEnabled(): boolean { return this.webRtcStatsEnabled;