Skip to content
This repository was archived by the owner on Sep 13, 2023. It is now read-only.

Commit 7245340

Browse files
committed
Use user device parameters for meet tracks
1 parent c5aed63 commit 7245340

File tree

1 file changed

+56
-9
lines changed

1 file changed

+56
-9
lines changed

core/modules/meet/client/meet-low-level.js

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,25 @@ const updateTrack = (type, tracks) => {
285285
else if (type === 'video') user?.profile?.shareVideo ? track.unmute() : track.mute()
286286
}
287287

288-
const onLocalTracks = (template, tracks) => {
288+
const replaceLocalTrack = (template, newTrack) => {
289+
const localTracks = template.localTracks.get()
290+
291+
if (localTracks) {
292+
template.localTracks.set(
293+
localTracks.map((track) => {
294+
if (track.getType() === newTrack.getType()) {
295+
// Replace old tracks by the new one
296+
template.room.replaceTrack(track, newTrack)
297+
return newTrack
298+
}
299+
return track
300+
})
301+
)
302+
attachLocalTracks([newTrack])
303+
}
304+
}
305+
306+
const attachLocalTracks = (tracks) => {
289307
tracks.forEach((track) => {
290308
if (track.getType() === 'video') {
291309
let videoNode = document.querySelector('#video-stream-me')
@@ -295,25 +313,30 @@ const onLocalTracks = (template, tracks) => {
295313
// tracks[i].attach(audioNode)
296314
}
297315
})
298-
299-
template.localTracks.set(tracks)
300316
}
301317

302318
const connect = async (template) => {
303319
console.log('Connection started')
304320

305321
if (!template.connection.get()) {
306322
const options = getOptions(template.roomName)
323+
const user = Meteor.user({ fields: { 'profile.audioRecorder': 1, 'profile.videoRecorder': 1 } })
307324

308325
meetJs.init(options)
309326
meetJs.setLogLevel(meetJs.logLevels.ERROR)
310327

311-
await meetJs.createLocalTracks({ devices: ['audio', 'video'] }).then((tracks) => {
312-
updateTrack('video', tracks)
313-
updateTrack('audio', tracks)
314-
315-
onLocalTracks(template, tracks)
316-
})
328+
await meetJs
329+
.createLocalTracks({
330+
devices: ['audio', 'video'],
331+
cameraDeviceId: user?.profile?.videoRecorder,
332+
micDeviceId: user?.profile?.audioRecorder,
333+
})
334+
.then((tracks) => {
335+
updateTrack('video', tracks)
336+
updateTrack('audio', tracks)
337+
attachLocalTracks(tracks)
338+
template.localTracks.set(tracks)
339+
})
317340

318341
template.connection.set(new meetJs.JitsiConnection(null, null, options))
319342

@@ -375,6 +398,30 @@ Template.meetLowLevel.onCreated(function () {
375398
if (user) this.avatarURL.set(generateRandomAvatarURLForUser(user))
376399
})
377400

401+
this.autorun(() => {
402+
const user = Meteor.user({ fields: { 'profile.videoRecorder': 1 } })
403+
404+
if (!user) return
405+
meetJs
406+
.createLocalTracks({
407+
devices: ['video'],
408+
cameraDeviceId: user?.profile?.videoRecorder,
409+
})
410+
.then((tracks) => replaceLocalTrack(this, tracks[0]))
411+
})
412+
413+
this.autorun(() => {
414+
const user = Meteor.user({ fields: { 'profile.audioRecorder': 1 } })
415+
416+
if (!user) return
417+
meetJs
418+
.createLocalTracks({
419+
devices: ['audio'],
420+
micDeviceId: user?.profile?.audioRecorder,
421+
})
422+
.then((tracks) => replaceLocalTrack(this, tracks[0]))
423+
})
424+
378425
window.addEventListener(eventTypes.onUsersComeCloser, (e) => {
379426
const { users } = e.detail
380427

0 commit comments

Comments
 (0)