diff --git a/package.json b/package.json
index 67d217a3396c0fd7fece75cef330bf07a57a8357..5cf90f13101984884187392191c8a95c09a4ee9c 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
     "aframe-xr": "github:brianpeiris/aframe-xr#3162aed",
     "material-design-lite": "^1.3.0",
     "minijanus": "^0.4.0",
-    "naf-janus-adapter": "^0.3.0",
+    "naf-janus-adapter": "^0.4.0",
     "networked-aframe": "https://github.com/mozillareality/networked-aframe#mr-social-client/master",
     "nipplejs": "^0.6.7",
     "query-string": "^5.0.1",
diff --git a/src/components/networked-video-player.css b/src/components/networked-video-player.css
index e6859395801b79bddc37c85c53a92e6a1780c8ec..00dd3a89730b18ba210d2b981c0929399c3f1902 100644
--- a/src/components/networked-video-player.css
+++ b/src/components/networked-video-player.css
@@ -1,12 +1,11 @@
 :local(.video) {
-  height: 100px;
+  /* 1x1px so that Safari on iOS allows us to autoplay the video */
+  width: 1px; height: 1px; /* toggle to show debug video elements */
   background: black;
-  margin: 5px;
 }
 
 :local(.container) {
     position: absolute;
     bottom: 0;
-    display: flex;
-    visibility: hidden; /* toggle to show debug video elements */
+    width: 10px; height: 10px; /* toggle to show debug video elements */
 }
diff --git a/src/components/networked-video-player.js b/src/components/networked-video-player.js
index 6e0218a9f0ace62a506be85d56036b17c00bfdb6..03cfba4f6d7a835ac825804724a4109d16690cdb 100644
--- a/src/components/networked-video-player.js
+++ b/src/components/networked-video-player.js
@@ -2,9 +2,7 @@ import styles from "./networked-video-player.css";
 
 const nafConnected = function() {
   return new Promise(resolve => {
-    NAF.clientId
-      ? resolve()
-      : document.body.addEventListener("connected", resolve);
+    NAF.clientId ? resolve() : document.body.addEventListener("connected", resolve);
   });
 };
 
@@ -21,21 +19,23 @@ AFRAME.registerComponent("networked-video-player", {
 
     await nafConnected();
 
-    const networkedEl = NAF.utils.getNetworkedEntity(this.el);
+    const networkedEl = await NAF.utils.getNetworkedEntity(this.el);
     if (!networkedEl) {
-      throw new Error(
-        "Video player must be added on a node, or a child of a node, with the `networked` component."
-      );
+      throw new Error("Video player must be added on a node, or a child of a node, with the `networked` component.");
     }
 
     const ownerId = networkedEl.components.networked.data.owner;
-    const stream = await NAF.connection.adapter.getMediaStream(ownerId);
+    const stream = await NAF.connection.adapter.getMediaStream(ownerId, "video");
     if (!stream) {
       return;
     }
 
     const v = document.createElement("video");
     v.id = `nvp-video-${ownerId}`;
+    // muted and autoplay so that more restrictive browsers (e.g. Safari on iOS) will actually play the video.
+    v.muted = true;
+    v.autoplay = true;
+    v.playsInline = true;
     v.classList.add(styles.video);
     v.srcObject = new MediaStream(stream.getVideoTracks()); // We only want the video track so make a new MediaStream
     container.appendChild(v);
diff --git a/src/room.html b/src/room.html
index dd04fb42080c710b3f438b609a59b7b1cd4efcbb..7ace5d827d993a9b518361c0b7b0b59ae6b9299f 100644
--- a/src/room.html
+++ b/src/room.html
@@ -7,9 +7,9 @@
 
     <meta http-equiv="origin-trial" data-feature="WebVR (For Chrome M62+)" data-expires="<%= ORIGIN_TRIAL_EXPIRES %>" content="<%= ORIGIN_TRIAL_TOKEN %>">
     <% if(NODE_ENV === "production") { %>
-        <script src="https://cdn.rawgit.com/brianpeiris/aframe/bba200440e3279753df85a1f52ba4c77a3b16e47/dist/aframe-master.min.js"></script>
+        <script src="https://cdn.rawgit.com/brianpeiris/aframe/845825ae694449524c185c44a314d361eead4680/dist/aframe-master.min.js"></script>
     <% } else { %>
-        <script src="https://cdn.rawgit.com/brianpeiris/aframe/bba200440e3279753df85a1f52ba4c77a3b16e47/dist/aframe-master.js"></script>
+        <script src="https://cdn.rawgit.com/brianpeiris/aframe/845825ae694449524c185c44a314d361eead4680/dist/aframe-master.js"></script>
     <% } %>
 </head>
 
@@ -49,10 +49,10 @@
                 <a-entity class="video" geometry="primitive: plane;" material="side: double" networked-video-player></a-entity>
             </template>
 
-            <template id="remote-avatar-template">                
+            <template id="remote-avatar-template">
                 <a-entity ik-root>
                     <a-entity class="camera"></a-entity>
-                    
+
                     <a-entity class="left-controller"></a-entity>
 
                     <a-entity class="right-controller"></a-entity>
@@ -69,7 +69,7 @@
                                 ></a-entity>
                              </a-entity>
                         </template>
-                        
+
                         <template data-selector=".Head">
                             <a-entity
                                 networked-audio-source
@@ -109,7 +109,7 @@
                 personal-space-bubble
                 look-controls
             ></a-entity>
-            
+
             <a-entity
                 id="player-left-controller"
                 class="left-controller"
diff --git a/src/room.js b/src/room.js
index df0ec4e9c5818e836fe86d9a2a689a16daa9d8b4..bd0ebb4577e1a6520060a5aeb363d380ccd78ea3 100644
--- a/src/room.js
+++ b/src/room.js
@@ -91,7 +91,7 @@ async function shareMedia(audio, video) {
     entity = document.createElement("a-entity");
     entity.id = id;
     entity.setAttribute("offset-relative-to", {
-      target: "#head",
+      target: "#player-camera",
       offset: "0 0 -2",
       on: "action_share_screen"
     });
diff --git a/webpack.config.js b/webpack.config.js
index 9fa17dd4bd2e5510e2ec8545fda2a9a244ce9f09..5b6321412a38416e4d75e2e96c90ed7bb6b5d619 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -52,7 +52,7 @@ function createHTTPSConfig() {
     fs.writeFileSync(path.join(__dirname, "certs", "key.pem"), pems.private);
 
     return {
-      key: pems.public,
+      key: pems.private,
       cert: pems.cert
     };
   }
@@ -89,6 +89,8 @@ const config = {
   devServer: {
     open: true,
     https: createHTTPSConfig(),
+    host: "0.0.0.0",
+    useLocalIp: true,
     port: 8080,
     before: function(app) {
       // networked-aframe makes HEAD requests to the server for time syncing. Respond with an empty body.
diff --git a/yarn.lock b/yarn.lock
index c21a28ee4ba2374af1614edbd3519e39dd77ca6c..7f6e2a8126096af5b5c2c56777487e3b1d3442c0 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4394,9 +4394,9 @@ mute-stream@0.0.7:
   version "0.0.7"
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
 
-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"
+naf-janus-adapter@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/naf-janus-adapter/-/naf-janus-adapter-0.4.0.tgz#22f14212a14d9e3d30c8d9441978704ff58392f4"
   dependencies:
     debug "^3.1.0"
     minijanus "^0.4.0"