|
|
@@ -72,6 +72,33 @@ const getOrCreateRpc = (username) => { |
|
|
|
} |
|
|
|
return State.rpcs[username] |
|
|
|
} |
|
|
|
const getSelectedMedia = async () => { |
|
|
|
const stream = new MediaStream() |
|
|
|
const addTrack = stream.addTrack.bind(stream) |
|
|
|
|
|
|
|
const muted = document.querySelector('#mute-check').checked |
|
|
|
if(!muted) { |
|
|
|
const audio = Media.audioDefaults |
|
|
|
await navigator.mediaDevices.getUserMedia({audio}) |
|
|
|
.then(s => s.getAudioTracks().forEach(addTrack)) |
|
|
|
.catch(e => console.error(e)) |
|
|
|
} |
|
|
|
|
|
|
|
const source = document.querySelector('#media-source').value |
|
|
|
if(source === 'camera') { |
|
|
|
const video = {width: {ideal: 320}, facingMode: 'user', frameRate: 26} |
|
|
|
await navigator.mediaDevices.getUserMedia({video}) |
|
|
|
.then(s => s.getVideoTracks().forEach(addTrack)) |
|
|
|
.catch(e => console.error(e)) |
|
|
|
} |
|
|
|
if(source === 'screen' && navigator.mediaDevices.getDisplayMedia) { |
|
|
|
await navigator.mediaDevices.getDisplayMedia() |
|
|
|
.then(s => s.getVideoTracks().forEach(addTrack)) |
|
|
|
.catch(e => console.error(e)) |
|
|
|
} |
|
|
|
|
|
|
|
return stream |
|
|
|
} |
|
|
|
const onPeerInfo = async ({detail: message}) => { |
|
|
|
const rpc = getOrCreateRpc(message.source) |
|
|
|
if(rpc && message.value.type === 'request') { |
|
|
@@ -258,35 +285,8 @@ const Media = { |
|
|
|
noiseSuppresion: true, |
|
|
|
echoCancellation: true, |
|
|
|
}, |
|
|
|
getSelectedMedia: async () => { |
|
|
|
const stream = new MediaStream() |
|
|
|
const addTrack = stream.addTrack.bind(stream) |
|
|
|
|
|
|
|
const muted = document.querySelector('#mute-check').checked |
|
|
|
if(!muted) { |
|
|
|
const audio = Media.audioDefaults |
|
|
|
await navigator.mediaDevices.getUserMedia({audio}) |
|
|
|
.then(s => s.getAudioTracks().forEach(addTrack)) |
|
|
|
.catch(e => console.error(e)) |
|
|
|
} |
|
|
|
|
|
|
|
const source = document.querySelector('#media-source').value |
|
|
|
if(source === 'camera') { |
|
|
|
const video = {width: {ideal: 320}, facingMode: 'user', frameRate: 26} |
|
|
|
await navigator.mediaDevices.getUserMedia({video}) |
|
|
|
.then(s => s.getVideoTracks().forEach(addTrack)) |
|
|
|
.catch(e => console.error(e)) |
|
|
|
} |
|
|
|
if(source === 'screen' && navigator.mediaDevices.getDisplayMedia) { |
|
|
|
await navigator.mediaDevices.getDisplayMedia() |
|
|
|
.then(s => s.getVideoTracks().forEach(addTrack)) |
|
|
|
.catch(e => console.error(e)) |
|
|
|
} |
|
|
|
|
|
|
|
return stream |
|
|
|
}, |
|
|
|
turnOn: async () => { |
|
|
|
const media = await Media.getSelectedMedia() |
|
|
|
const media = await getSelectedMedia() |
|
|
|
State.media[State.username] = media |
|
|
|
wire({kind: 'peerInfo', value: {type: 'request'}}) |
|
|
|
m.redraw() |