diff --git a/package.json b/package.json index 9c69de0390612455f6240bf4faf7cb1dd20b9658..dcb2e98c7758e6cff3739230338e57555dcf130f 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "extract-text-webpack-plugin": "^3.0.2", "material-design-lite": "^1.3.0", "minijanus": "^0.4.0", - "naf-janus-adapter": "^0.1.10", + "naf-janus-adapter": "^0.3.0", "networked-aframe": "https://github.com/netpro2k/networked-aframe#bugfix/chrome/audio", "nipplejs": "^0.6.7", "query-string": "^5.0.1", diff --git a/src/lobby.js b/src/lobby.js index 474b64e985f7f1be13f3248c4a6ec0e6da5f6f58..f6e77536f32b81e8438be802f4c076b2e38acf29 100644 --- a/src/lobby.js +++ b/src/lobby.js @@ -62,8 +62,7 @@ class Lobby extends React.Component { } onWebsocketMessage(event) { - var message = JSON.parse(event.data); - this.session.receive(message); + this.session.receive(JSON.parse(event.data)); } render() { diff --git a/src/room.js b/src/room.js index 7332e61ea42b323d64b075bab6c30e105f51fd73..27391be4592b216a4a2aea2f72f799d528b39848 100644 --- a/src/room.js +++ b/src/room.js @@ -58,12 +58,19 @@ AFRAME.registerInputMappings(config); registerNetworkSchemas(); registerTelemetry(); -function shareScreen() { - const track = NAF.connection.adapter.localMediaStream.getVideoTracks()[0]; +async function shareMedia(audio, video) { + const constraints = { + audio: !!audio, + video: video ? { mediaSource: "screen", height: 720, frameRate: 30 } : false + }; + const mediaStream = await navigator.mediaDevices.getUserMedia(constraints); + NAF.connection.adapter.setLocalMediaStream(mediaStream); const id = `${NAF.clientId}-screen`; let entity = document.getElementById(id); - if (!entity) { + if (entity) { + entity.setAttribute("visible", !!video); + } else if (video) { const sceneEl = document.querySelector("a-scene"); entity = document.createElement("a-entity"); entity.id = id; @@ -75,12 +82,10 @@ function shareScreen() { entity.setAttribute("networked", { template: "#video-template" }); sceneEl.appendChild(entity); } - - track.enabled = !track.enabled; - entity.setAttribute("visible", track.enabled); } window.App = { + async onSceneLoad() { const qs = queryString.parse(location.search); const scene = document.querySelector("a-scene"); @@ -119,31 +124,20 @@ window.App = { const myNametag = document.querySelector("#player-rig .nametag"); myNametag.setAttribute("text", "value", username); - scene.addEventListener("action_share_screen", shareScreen); - - const mediaStream = await navigator.mediaDevices.getUserMedia({ - audio: true, - video: - qs.screen === "true" - ? { mediaSource: "screen", height: 720, frameRate: 30 } - : false + var sharingScreen = false; + scene.addEventListener("action_share_screen", () => { + sharingScreen = !sharingScreen; + shareMedia(true, sharingScreen); }); - // Don't send video by deafult - const videoTracks = mediaStream.getVideoTracks(); - if (videoTracks.length) { - videoTracks[0].enabled = false; - } - if (qs.offline) { App.onConnect(); } else { - scene.components["networked-scene"].connect(); + document.body.addEventListener("connected", App.onConnect); - // @TODO ideally the adapter should exist before connect, but it currently doesnt so we have to do this after calling connect. This might be a race condition in other adapters. - NAF.connection.adapter.setLocalMediaStream(mediaStream); + scene.components["networked-scene"].connect(); - document.body.addEventListener("connected", App.onConnect); + await shareMedia(true, sharingScreen); } }, diff --git a/yarn.lock b/yarn.lock index 98bed6882c3b58ebdde1d86e4180ca0dc712f68e..4b4c59f2f3e1251ece4f3490874f5ffa99b85f4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3686,10 +3686,6 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minijanus@^0.1.6: - version "0.1.7" - resolved "https://registry.yarnpkg.com/minijanus/-/minijanus-0.1.7.tgz#a4aba659e0fc46127450aa440b32de82c6cc46b9" - minijanus@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/minijanus/-/minijanus-0.4.0.tgz#4d08529da795886b1aab6714ee7c9ff122c8c802" @@ -3794,12 +3790,12 @@ mv@^2.1.1: ncp "~2.0.0" rimraf "~2.4.0" -naf-janus-adapter@^0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/naf-janus-adapter/-/naf-janus-adapter-0.1.10.tgz#322d5eeccefc5078da7e4355537d739bbb167794" +naf-janus-adapter@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/naf-janus-adapter/-/naf-janus-adapter-0.3.0.tgz#fee55fe0f4724238da5f87fbb0e7f75cd522905e" dependencies: debug "^3.1.0" - minijanus "^0.1.6" + minijanus "^0.4.0" nan@^2.3.0: version "2.8.0"