diff --git a/conference.js b/conference.js index dd1c64890..59128fd93 100644 --- a/conference.js +++ b/conference.js @@ -741,6 +741,39 @@ export default { return this._room && this._room.getConnectionState(); }, + /** + * Obtains current P2P ICE connection state. + * @return {string|null} ICE connection state or null if there's no + * P2P connection + */ + getP2PConnectionState () { + return this._room + && this._room.getP2PConnectionState(); + }, + /** + * Starts P2P (for tests only) + * @private + */ + _startP2P () { + try { + this._room && this._room.startP2PSession(); + } catch (error) { + logger.error("Start P2P failed", error); + throw error; + } + }, + /** + * Stops P2P (for tests only) + * @private + */ + _stopP2P () { + try { + this._room && this._room.stopP2PSession(); + } catch (error) { + logger.error("Stop P2P failed", error); + throw error; + } + }, /** * Checks whether or not our connection is currently in interrupted and * reconnect attempts are in progress. diff --git a/config.js b/config.js index 9549698fe..7e5d47fe7 100644 --- a/config.js +++ b/config.js @@ -20,6 +20,13 @@ var config = { // eslint-disable-line no-unused-vars //focusUserJid: 'focus@auth.jitsi-meet.example.com', // The real JID of focus participant - can be overridden here //defaultSipNumber: '', // Default SIP number + // The STUN servers that will be used in the peer to peer connections + p2pStunServers: [ + { urls: "stun:stun.l.google.com:19302" }, + { urls: "stun:stun1.l.google.com:19302" }, + { urls: "stun:stun2.l.google.com:19302" } + ], + // The ID of the jidesha extension for Chrome. desktopSharingChromeExtId: null, // Whether desktop sharing should be disabled on Chrome. @@ -80,5 +87,14 @@ var config = { // eslint-disable-line no-unused-vars // disables or enables RTX (RFC 4588) (defaults to false). disableRtx: false, // Sets the preferred resolution (height) for local video. Defaults to 360. - resolution: 720 + resolution: 720, + // Enables peer to peer mode. When enabled system will try to establish + // direct connection given that there are exactly 2 participants in + // the room. If that succeeds the conference will stop sending data through + // the JVB and use the peer to peer connection instead. When 3rd participant + // joins the conference will be moved back to the JVB connection. + //enableP2P: true + // How long we're going to wait, before going back to P2P after + // the 3rd participant has left the conference (to filter out page reload) + //backToP2PDelay: 5 }; diff --git a/lang/main.json b/lang/main.json index a24ff39ea..2de9bb7f2 100644 --- a/lang/main.json +++ b/lang/main.json @@ -193,7 +193,8 @@ "transport": "Transport:", "transport_plural": "Transports:", "bandwidth": "Estimated bandwidth:", - "na": "Come back here for connection information once the conference starts" + "na": "Come back here for connection information once the conference starts", + "direct": " (direct)" }, "notify": { "disconnected": "disconnected", diff --git a/modules/UI/videolayout/ConnectionIndicator.js b/modules/UI/videolayout/ConnectionIndicator.js index 0366258b3..df67be380 100644 --- a/modules/UI/videolayout/ConnectionIndicator.js +++ b/modules/UI/videolayout/ConnectionIndicator.js @@ -198,6 +198,9 @@ ConnectionIndicator.prototype.generateText = function () { } } + // All of the transports should be either P2P or JVB + const isP2P = this.transport.length ? this.transport[0].p2p : false; + var local_address_key = "connectionindicator.localaddress"; var remote_address_key = "connectionindicator.remoteaddress"; var localTransport = @@ -243,8 +246,13 @@ ConnectionIndicator.prototype.generateText = function () { JSON.stringify({count: data.transportType.length}) + "'>" + "