diff --git a/src/call/Call.js b/src/call/Call.js index 307c86f86d05bba4b08b1d8e5ad104d5a4fc08c7..5cbf80c8d9c1137aba6539fb891c0f5084d49f11 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; @@ -1431,6 +1416,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 +1449,10 @@ class Call { } if (!callParticipantData.mediaElement) { - let mediaElement = this._createMediaElement(callParticipantData.memberId); + let mediaElement = this._createMediaElement(callParticipantData.participantId); + if (this._speakerMuted) { + mediaElement.muted = true; + } callParticipantData.mediaElement = mediaElement; } if (stream && (!callParticipantData.mediaStream || !track)) { @@ -1482,7 +1472,6 @@ class Call { } }); callParticipantData.mediaStream.addTrack(track); - callParticipantData.reloadMedia(); this._notifyParticipantWithVideo(true, callParticipantData.participantId); if (stream) { @@ -1508,6 +1497,9 @@ class Call { }); callParticipantData.mediaStream.addTrack(track); } + setTimeout(() => { + callParticipantData.reloadMedia(); + }, 200); } _getMidFromSdp = (sdp, stream) => { @@ -1611,9 +1603,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; @@ -1621,8 +1611,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 fa4c5f6d598e0ab02dfbf1254db0dabb0527b0d1..a3a457e4fe1f886b49864a5a393415d8fa369983 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); } }