From d9ec0bdf74129202d624499656dca7c724a4e62b Mon Sep 17 00:00:00 2001 From: Yordan Neshkolov Date: Thu, 7 May 2020 15:44:11 +0300 Subject: [PATCH 1/3] logs added --- src/call/Call.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/call/Call.js b/src/call/Call.js index 307c86f..1bf7653 100644 --- a/src/call/Call.js +++ b/src/call/Call.js @@ -1431,6 +1431,8 @@ class Call { const track = event.track; let stream = event.streams[0]; + console.log("[SDK] [temp] *** Track event - track", stream ? stream.id : null, track.id, track.kind, + track.enabled, track.readyState, track.muted); let callParticipantData = this.isConference ? this._getCallParticipantData(stream ? stream.id : '') : null; let mid = event.transceiver && event.transceiver.mid; @@ -1462,7 +1464,7 @@ class Call { } if (!callParticipantData.mediaElement) { - let mediaElement = this._createMediaElement(callParticipantData.memberId); + let mediaElement = this._createMediaElement(callParticipantData.participantId); callParticipantData.mediaElement = mediaElement; } if (stream && (!callParticipantData.mediaStream || !track)) { -- GitLab From b2ce091ed4a9e12d715233662367613d5cc940bd Mon Sep 17 00:00:00 2001 From: Yordan Neshkolov Date: Fri, 8 May 2020 15:12:08 +0300 Subject: [PATCH 2/3] NY-10163 [WEB]: Participant can not hear the audio of other participants after rejoining the call: Removed Audio context approach --- src/call/Call.js | 42 +++++++++++------------------ src/call/CallParticipantData.js | 48 ++------------------------------- 2 files changed, 17 insertions(+), 73 deletions(-) diff --git a/src/call/Call.js b/src/call/Call.js index 1bf7653..44b3504 100644 --- a/src/call/Call.js +++ b/src/call/Call.js @@ -52,10 +52,6 @@ class Call { }; this._mediaStream = null; - // create audio context as well - const AudioContext = window.AudioContext || window.webkitAudioContext; - this._audioCtx = new AudioContext(); - this._offerOptions = { offerToReceiveAudio: 1, offerToReceiveVideo: 1, @@ -625,7 +621,9 @@ class Call { // mute all audio/video elements Object.values(this._callParticipantsData).forEach(callParticipantData => { - callParticipantData.mute = muted; + if (callParticipantData.mediaElement) { + callParticipantData.mediaElement.muted = muted; + } }); this._speakerMuted = muted; @@ -661,12 +659,6 @@ class Call { registerSignaling = () => { console.log("[SDK] registerSignaling"); - if (!this._audioCtx) { - // create audio context as well - const AudioContext = window.AudioContext || window.webkitAudioContext; - this._audioCtx = new AudioContext(); - } - if (this._state !== CallState.CALL_STATE_CONNECTING) { console.warn("[SDK] registerSignaling IGNORED", this._state); return; @@ -970,13 +962,14 @@ class Call { this.callState = CallStates.CALL_STATE_ESTABLISHING; if (!this._callParticipantData) { - this._callParticipantData = new CallParticipantData(this._participantId, null, stream.id); + this._callParticipantData = new CallParticipantData(this._participantId, stream.id); } else { this._callParticipantData.streamId = stream.id; this._callParticipantData.participantId = this._participantId; } if (!this._callParticipantData.mediaElement) { const mediaElement = this._createMediaElement(this._participantId); + mediaElement.muted = true; this._callParticipantData.mediaElement = mediaElement; if (this._localElementContainer) { @@ -1005,13 +998,10 @@ class Call { } if (callParticipantData.mediaStream !== mediaStream) { callParticipantData.mediaStream = mediaStream; - if (this._speakerMuted) { - callParticipantData.mute = true; - } } if (setActiveSpeaker && mediaStream && mediaStream.getAudioTracks().length > 0) { - callParticipantData.hark = hark(mediaStream, { audioContext: this._audioCtx }); + callParticipantData.hark = hark(mediaStream, {}); callParticipantData.hark.on('speaking', () => { this._notifyParticipantSpeaking(callParticipantData.participantId, true); }); @@ -1092,8 +1082,7 @@ class Call { if (streamId) { if (!this._callParticipantsData[partId]) { if (!callParticipantStreamMapping[partId]) { - this._callParticipantsData[partId] = new CallParticipantData(partId, this._audioCtx, streamId, mediaType); - this._callParticipantsData[partId].mute = this._speakerMuted; + this._callParticipantsData[partId] = new CallParticipantData(partId, streamId, mediaType); const member = this.findParticipant(partId); if (member) { this._callParticipantsData[partId].mediaContainer = member.mediaContainer; @@ -1377,10 +1366,6 @@ class Call { this._remoteScreenSharer = null; } - if (this._audioCtx && this._audioCtx.state !== 'closed') { - this._audioCtx.close(); - this._audioCtx = null; - } if (this._mediaStream) { this._mediaStream.getTracks().forEach(track => this._stopMediaStreamTrack(track)); this._mediaStream = null; @@ -1465,6 +1450,9 @@ class Call { if (!callParticipantData.mediaElement) { let mediaElement = this._createMediaElement(callParticipantData.participantId); + if (this._speakerMuted) { + mediaElement.muted = true; + } callParticipantData.mediaElement = mediaElement; } if (stream && (!callParticipantData.mediaStream || !track)) { @@ -1510,6 +1498,9 @@ class Call { }); callParticipantData.mediaStream.addTrack(track); } + setTimeout(() => { + callParticipantData.reloadMedia(); + }, 100); } _getMidFromSdp = (sdp, stream) => { @@ -1613,9 +1604,7 @@ class Call { if (this._audioControls) { mediaElement.setAttribute('controls', ""); } - mediaElement.setAttribute('autoplay', true); - mediaElement.setAttribute('muted', true); - mediaElement.muted = true; + mediaElement.setAttribute('autoplay', ""); mediaElement.onpause = () => { mediaElement.play(); }; return mediaElement; @@ -1623,8 +1612,7 @@ class Call { _checkCallParticipantData = (participantId, skipCreate) => { if (!this._callParticipantsData[participantId] && !skipCreate) { - this._callParticipantsData[participantId] = new CallParticipantData(participantId, this._audioCtx); - this._callParticipantsData[participantId].mute = this._speakerMuted; + this._callParticipantsData[participantId] = new CallParticipantData(participantId); const member = this.findParticipant(participantId); if (member) { this._callParticipantsData[participantId].mediaContainer = member.mediaContainer; diff --git a/src/call/CallParticipantData.js b/src/call/CallParticipantData.js index fa4c5f6..a3a457e 100644 --- a/src/call/CallParticipantData.js +++ b/src/call/CallParticipantData.js @@ -1,14 +1,13 @@ import { MediaContentType } from "../libs/protobuf/definitions_pb" export default class CallParticipantData { - constructor(participantId, audioContext, streamId, mediaType = MediaContentType.AUDIO) { + constructor(participantId, streamId, mediaType = MediaContentType.AUDIO) { this._participantId = participantId; this._streamMapping = {}; if (streamId) { this._streamMapping[mediaType] = streamId; } - this.setAudioContext(audioContext); this._hark = null; this._mediaStream = null; this._mediaElement = null; @@ -22,25 +21,6 @@ export default class CallParticipantData { this._midScreenShare = null; } - setAudioContext = (audioContext) => { - if (this._audioContext) { - if (this._sourceNode) { - this._sourceNode.disconnect(); - this._sourceNode = null; - } - if (this._gainNode) { - this._gainNode.disconnect(); - this._gainNode = null; - } - } - - this._audioContext = audioContext; - if (audioContext) { - this._gainNode = this._audioContext.createGain(); - this._gainNode.connect(this._audioContext.destination); - } - } - get participantId() { return this._participantId; } @@ -89,20 +69,12 @@ export default class CallParticipantData { } set mediaStream(value) { - if (this._sourceNode) { - this._sourceNode.disconnect(); - this._sourceNode = null; - } - if (this._audioContext && value) { - this._sourceNode = this._audioContext.createMediaStreamSource(value); - this._sourceNode.connect(this._gainNode); - } - this._mediaStream = value; if (this._mediaElement) { this.mediaElement.srcObject = null; this.mediaElement.srcObject = this._mediaStream; + this.mediaElement.load(); } } @@ -201,20 +173,6 @@ export default class CallParticipantData { this._midScreenShare = midScreenShare; } - set mute(mute) { - if (this._gainNode) { - // this._gainNode.gain.setValueAtTime(mute ? 0 : 1, this._audioContext.currentTime); - this._gainNode.gain.value = mute ? 0 : 1; - } - } - - get mute() { - if (this._gainNode) { - return this._gainNode.gain.value === 0; - } - return false; - } - cleanUp() { if (this._hark) { this._hark.stop(); @@ -248,7 +206,5 @@ export default class CallParticipantData { this._screenShareVideoElement = null; } - - this.setAudioContext(null); } } -- GitLab From 1ed8310f18b569788f666b6bc66c44b68dde745d Mon Sep 17 00:00:00 2001 From: Yordan Neshkolov Date: Sat, 9 May 2020 21:52:54 +0300 Subject: [PATCH 3/3] NY-9977 No audio between certain participants in conference --- src/call/Call.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/call/Call.js b/src/call/Call.js index 44b3504..5cbf80c 100644 --- a/src/call/Call.js +++ b/src/call/Call.js @@ -1472,7 +1472,6 @@ class Call { } }); callParticipantData.mediaStream.addTrack(track); - callParticipantData.reloadMedia(); this._notifyParticipantWithVideo(true, callParticipantData.participantId); if (stream) { @@ -1500,7 +1499,7 @@ class Call { } setTimeout(() => { callParticipantData.reloadMedia(); - }, 100); + }, 200); } _getMidFromSdp = (sdp, stream) => { -- GitLab