-
Notifications
You must be signed in to change notification settings - Fork 295
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #294 from open-easyrtc/multi-stream
Multiple video streams for the easyrtc adapter #269
- Loading branch information
Showing
9 changed files
with
245 additions
and
50 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
<html> | ||
<head> | ||
<meta charset="utf-8"> | ||
<title>Multi Streams Example — Networked-Aframe</title> | ||
<meta name="description" content="Dev Example — Networked-Aframe"> | ||
|
||
<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script> | ||
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.slim.js"></script> | ||
<script src="/easyrtc/easyrtc.js"></script> | ||
<script src="/dist/networked-aframe.js"></script> | ||
|
||
<script src="https://unpkg.com/aframe-randomizer-components@^3.0.1/dist/aframe-randomizer-components.min.js"></script> | ||
<!--<script src="https://unpkg.com/aframe-particle-system-component@1.0.5/dist/aframe-particle-system-component.min.js"></script>--> | ||
<script src="https://cdn.jsdelivr.net/gh/oneWaveAdrian/aframe-particle-system-component@aframe-1.2.0-upgrade/dist/aframe-particle-system-component.min.js"></script> | ||
<script src="/js/spawn-in-circle.component.js"></script> | ||
</head> | ||
<body> | ||
<a-scene networked-scene=" | ||
room: basic-multi-stream; | ||
debug: true; | ||
adapter: easyrtc; | ||
audio: false; | ||
video: true; | ||
"> | ||
<a-assets> | ||
|
||
<img id="grid" src="https://img.gs/bbdkhfbzkk/stretch/https://i.imgur.com/25P1geh.png" crossorigin="anonymous"> | ||
<img id="sky" src="https://i.imgur.com/WqlqEkq.jpg" crossorigin="anonymous" /> | ||
|
||
<!-- Templates --> | ||
|
||
<!-- Avatar --> | ||
<template id="avatar-template"> | ||
<a-entity class="avatar"> | ||
<a-plane color="#FFF" width="4" height="3" position="0 .6 0" material="side: front" networked-video-source></a-plane> | ||
<a-plane color="#FFF" width="2" height="1" position="0 .7 0" material="side: front" networked-video-source="streamName: screen"></a-plane> | ||
</a-entity> | ||
</template> | ||
|
||
<!-- /Templates --> | ||
</a-assets> | ||
|
||
<a-entity id="player" | ||
networked="template:#avatar-template;attachTemplateToLocal:false;" | ||
camera | ||
position="0 1.6 0" | ||
spawn-in-circle="radius:3" | ||
wasd-controls look-controls | ||
> | ||
<a-sphere class="head" | ||
visible="false" | ||
random-color | ||
></a-sphere> | ||
</a-entity> | ||
|
||
<a-entity position="0 0 0" | ||
geometry="primitive: plane; width: 10000; height: 10000;" rotation="-90 0 0" | ||
material="src: #grid; repeat: 10000 10000; transparent: true; metalness:0.6; roughness: 0.4; sphericalEnvMap: #sky;"></a-entity> | ||
|
||
<a-entity light="color: #ccccff; intensity: 1; type: ambient;" visible=""></a-entity> | ||
<a-entity light="color: #ffaaff; intensity: 1.5" position="5 5 5"></a-entity> | ||
|
||
<a-sky src="#sky" rotation="0 -90 0"></a-sky> | ||
<a-entity id="particles" particle-system="preset: snow"></a-entity> | ||
</a-scene> | ||
|
||
<!-- GitHub Corner. --> | ||
<a href="https://github.com/networked-aframe/networked-aframe" class="github-corner"> | ||
<svg width="80" height="80" viewBox="0 0 250 250" style="fill:#222; color:#fff; position: absolute; top: 0; border: 0; right: 0;"> | ||
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path> | ||
</svg> | ||
</a> | ||
<button id="screen-btn" type="button" class="camera-btn">Share screen</button> | ||
<style>.camera-btn{position:absolute;cursor:pointer;bottom:3%;left:3%;background:#fff;height:40px;width:130px;border-radius:30px}.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}} | ||
</style> | ||
|
||
<script> | ||
// Camera status | ||
let screenEnabled = false; | ||
// Camera button ele | ||
const screenBtnEle = document.getElementById('screen-btn'); | ||
|
||
// On mobile remove elements that are resource heavy | ||
const isMobile = AFRAME.utils.device.isMobile(); | ||
|
||
if (isMobile) { | ||
const particles = document.getElementById('particles'); | ||
particles.parentNode.removeChild(particles); | ||
} | ||
|
||
// Define custom schema for syncing avatar color, set by random-color | ||
NAF.schemas.add({ | ||
template: '#avatar-template', | ||
components: [ | ||
'position', | ||
'rotation' | ||
] | ||
}); | ||
|
||
// Called by Networked-Aframe when connected to server | ||
function onConnect () { | ||
console.log("onConnect", new Date()); | ||
|
||
// Handle screen button click (Off and On) | ||
screenBtnEle.addEventListener('click', function() { | ||
if (screenEnabled) { | ||
NAF.connection.adapter.removeLocalMediaStream("screen"); | ||
screenEnabled = false; | ||
screenBtnEle.textContent = 'Share screen'; | ||
} else { | ||
navigator.mediaDevices.getDisplayMedia().then((stream) => { | ||
NAF.connection.adapter.addLocalMediaStream(stream, "screen"); | ||
screenEnabled = true; | ||
screenBtnEle.textContent = 'Stop Screen'; | ||
}); | ||
} | ||
}); | ||
} | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters