private onNewRTCSession (event: IncomingRTCSessionEvent | OutgoingRTCSessionEvent) {
this._sessionStartTime = new Date();
this._currentRTCSession = event.session;
if (this._candidateReadyTimeOut) {
event.session.on('icecandidate', (event) => {
DialerDebug(event.candidate.candidate);
if (this._candidateReadyTimeoutId != null) {
clearTimeout(this._candidateReadyTimeoutId);
}
this._candidateReadyTimeoutId = setTimeout(() => {
event.ready();
}, this._candidateReadyTimeOut);
});
}
if (event.session.direction === 'incoming') {
event.session.on('peerconnection', (event) => {
event.peerconnection.ontrack = (ev) => {
this._remoteAudio.srcObject = ev.streams[0];
};
});
}
event.session.on('connecting', () => {
this._state = DialerState.CONNECTING;
this.startRenderSessionStopwatch();
event.session.connection.ontrack = (te) => {
this._remoteAudio.srcObject = te.streams[0];
};
});
// Срабатывает при получении или генерации ответа класса 1XX SIP (> 100) на запрос INVITE
event.session.on('progress', () => {
this._state = DialerState.PROGRESS;
});
// Срабатывает, когда вызов принят (2XX получено / отправлено).
event.session.on('accepted', () => {
this._state = DialerState.ACCEPTED;
});
// Срабатывает, когда установленный вызов завершается.
event.session.on('ended', () => {
this._sessionEndTime = new Date();
this.stopRenderSessionStopwatch();
this._state = DialerState.IDLE;
});
// Запускается, когда сеанс не может быть установлен.
event.session.on('failed', () => {
this._sessionEndTime = new Date();
this.stopRenderSessionStopwatch();
this._state = DialerState.IDLE;
});
}
const userMedia = await navigator.mediaDevices.getUserMedia({audio : true, video : false});
const audioTrack = userMedia.getAudioTracks()[0];
session.connection.addTrack(audioTrack);
как сделать чтоб освободить память?