Hola,
Recibí el siguiente problema al intentar migrar de sipjs 0.15.11 a sjipjs 0.16.1. ¿Me estoy perdiendo de algo?
Describa el error
La propiedad 'peerConnection' no existe en el tipo 'SessionDescriptionHandler'
Registros
error TS2339: Property 'peerConnection' does not exist on type 'SessionDescriptionHandler'.
Reproducir
Pasos para reproducir el comportamiento:
// Assumes you have a media element on the DOM
const mediaElement = document.getElementById('mediaElement');
const remoteStream = new MediaStream();
function setupRemoteMedia(session: Session) {
session.sessionDescriptionHandler.peerConnection.getReceivers().forEach((receiver) => {
if (receiver.track) {
remoteStream.addTrack(receiver.track);
}
});
mediaElement.srcObject = remoteStream;
mediaElement.play();
}
Comportamiento esperado
La propiedad 'peerConnection' debe existir en el tipo 'SessionDescriptionHandler'
Comportamiento observado
La compilación arroja el error:
La propiedad 'peerConnection' no existe en el tipo 'SessionDescriptionHandler'
Información del entorno
Para ser más precisos, peerConnection existe en el archivo plataforma/web/session-description-handler/session-description-handler.ts
public peerConnection!: RTCPeerConnection;
Pero no en api/session-description-handler.ts
¿Es por eso que no es parte del archivo de definición?
Me encontré con el mismo problema e importé SessionDescriptionHandler desde '_sip.js/lib/platform/web_' para solucionarlo, funciona bien hasta ahora.
Todo en _'sip.js/lib/platform/web'_ se exporta en el espacio Web
nombres import { Web } from "sip.js"
y luego hacer referencia como Web.SessionDescriptionHandler
.
El tipo peerConnection
no existirá en la interfaz SessionDescriptionHandler
. La idea es que podría escribir un SDH para un entorno que no sea SIP.js y, por lo tanto, no tenga conexión entre pares. Importe y use tipos de Web.SessionDescriptionHandler
si sabe que está usando la implementación web. Esto es intencional.
Si alguien también debe tener este problema. Así es como funcionó para mí:
import '{ SessionDescriptionHandler } from 'sip.js/lib/platform/web'
case SessionState.Established:
let sessionDescriptionHandler: SessionDescriptionHandler = inviter.sessionDescriptionHandler as SessionDescriptionHandler;
setupRemoteMedia(sessionDescriptionHandler);
break;
function setupRemoteMedia(session: SessionDescriptionHandler) {
let receiversList: any = session.peerConnection.getReceivers();
receiversList.forEach((receiver: RTCRtpReceiver) => {
if (receiver.track) {
remoteStream.addTrack(receiver.track);
}
});
mediaElement.srcObject = remoteStream;
mediaElement.play();
}
Se aceptan con gusto mejoras y comentarios.
Comentario más útil
Me encontré con el mismo problema e importé SessionDescriptionHandler desde '_sip.js/lib/platform/web_' para solucionarlo, funciona bien hasta ahora.