Do not start streaming by default

This commit is contained in:
Pierre HUBERT 2020-04-13 08:41:23 +02:00
parent 8263aacdf3
commit dbf30acd19

View File

@ -109,6 +109,16 @@ class CallWindow extends CustomEvents {
// Display the list of buttons // Display the list of buttons
const buttonsList = [ const buttonsList = [
// Audio button
{
icon: "fa-microphone",
label: "mic",
selected: false,
onclick: () => {
this.toggleStream(false)
}
},
// Hang up button // Hang up button
{ {
icon: "fa-phone", icon: "fa-phone",
@ -119,6 +129,17 @@ class CallWindow extends CustomEvents {
} }
}, },
// Video button
{
icon: "fa-video-camera",
label: "camera",
selected: false,
onclick: () => {
this.toggleStream(true)
}
},
//Full screen button //Full screen button
{ {
icon: "fa-expand", icon: "fa-expand",
@ -129,7 +150,7 @@ class CallWindow extends CustomEvents {
setButtonSelected(btn, IsFullScreen()); setButtonSelected(btn, IsFullScreen());
}, 1000); }, 1000);
} }
} },
] ]
//Add buttons //Add buttons
@ -140,6 +161,7 @@ class CallWindow extends CustomEvents {
type: "div", type: "div",
innerHTML: "<i class='fa " + button.icon + "'></i>" innerHTML: "<i class='fa " + button.icon + "'></i>"
}); });
buttonEl.setAttribute("data-label", button.label)
//Add button optionnal class //Add button optionnal class
if(button.class) if(button.class)
@ -155,6 +177,25 @@ class CallWindow extends CustomEvents {
}); });
/**
* Refresh buttons state
*/
this.refreshButtonsState = () => {
// Microphone button
setButtonSelected(
bottomArea.querySelector("[data-label=\"mic\"]"),
this.mainStream && this.mainStream.getAudioTracks()[0].enabled
)
// Video button
setButtonSelected(
bottomArea.querySelector("[data-label=\"camera\"]"),
this.mainStream && this.mainStream.getVideoTracks().length > 0 &&
this.mainStream.getVideoTracks()[0].enabled
)
}
@ -183,9 +224,6 @@ class CallWindow extends CustomEvents {
if(user.userID != userID() && user.ready) if(user.userID != userID() && user.ready)
await this.PeerReady(user.userID) await this.PeerReady(user.userID)
// Start to stream audio & video
await this.startStreaming();
} catch(e) { } catch(e) {
console.error(e) console.error(e)
@ -379,6 +417,49 @@ class CallWindow extends CustomEvents {
}; };
} }
/**
* Toggle stream state
*
* @param {boolean} isVideo
*/
async toggleStream(isVideo) {
if(isVideo && !this.conv.can_have_video_call) {
notify("Video calls can not be perfomed on this conversations!", "danger")
return;
}
const hasAudio = (this.mainPeer && !this.mainPeer.destroyed) === true;
const hasVideo = (this.mainPeer && !this.mainPeer.destroyed && this.mainStream && this.mainStream.getVideoTracks().length > 0) === true;
// Check if current stream is not enough
if(hasAudio && isVideo && !hasVideo)
this.mainPeer.destroy()
// Check if we have to start stream or just to mute them
if(!hasAudio || (isVideo && !hasVideo)) {
await this.startStreaming(isVideo)
}
// Toggle mute
else {
// Video
if(isVideo) {
this.mainStream.getVideoTracks()[0].enabled = !this.mainStream.getVideoTracks()[0].enabled
}
// Audio
else {
this.mainStream.getAudioTracks()[0].enabled = !this.mainStream.getAudioTracks()[0].enabled
}
}
this.refreshButtonsState()
}
/** /**
* Add audio / video stream to the user * Add audio / video stream to the user
* *
@ -423,14 +504,17 @@ class CallWindow extends CustomEvents {
/** /**
* Start to send this client audio & video * Start to send this client audio & video
*
* @param {boolean} includeVideo
*/ */
async startStreaming() { async startStreaming(includeVideo) {
// First, query user media // First, query user media
const stream = await navigator.mediaDevices.getUserMedia({ const stream = await navigator.mediaDevices.getUserMedia({
video: this.conv.can_have_video_call, video: this.conv.can_have_video_call && includeVideo,
audio: true audio: true
}) })
this.mainStream = stream;
// Check if the window was closed in the mean time // Check if the window was closed in the mean time
if(!this.isOpen) if(!this.isOpen)