Olá,
Eu tenho o seguinte problema ao tentar migrar do sipjs 0.15.11 para o sjipjs 0.16.1. Estou faltando alguma coisa aqui?
Descreva o erro
A propriedade 'peerConnection' não existe no tipo 'SessionDescriptionHandler'
Histórico
error TS2339: Property 'peerConnection' does not exist on type 'SessionDescriptionHandler'.
Reproduzir
Etapas para reproduzir o comportamento:
// 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();
}
Comportamento esperado
A propriedade 'peerConnection' deve existir no tipo 'SessionDescriptionHandler'
Comportamento observado
A compilação lança o erro:
A propriedade 'peerConnection' não existe no tipo 'SessionDescriptionHandler'
Informações ambientais
Para ser mais preciso, peerConnection existe no arquivo platform/web/session-description-handler/session-description-handler.ts
public peerConnection!: RTCPeerConnection;
Mas não em api/session-description-handler.ts
É por isso que não faz parte do arquivo de definição?
Eu encontro o mesmo problema e importo o SessionDescriptionHandler de '_sip.js/lib/platform/web_' para corrigi-lo, funciona bem até agora.
Tudo em _'sip.js/lib/platform/web'_ é exportado no namespace Web
, então você também pode import { Web } from "sip.js"
e então referenciar como Web.SessionDescriptionHandler
.
O tipo peerConnection
não existirá na Interface SessionDescriptionHandler
. A ideia é que você possa escrever um SDH para um ambiente que não seja SIP.js e, portanto, não tenha conexão de peer. Importe e use tipos de Web.SessionDescriptionHandler
se você souber que está usando a implementação da web. Isso é intencional.
Se alguém também deve ter esse problema. Foi assim que funcionou para mim:
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();
}
Melhorias e observações são aceitas com prazer.
Comentários muito úteis
Eu encontro o mesmo problema e importo o SessionDescriptionHandler de '_sip.js/lib/platform/web_' para corrigi-lo, funciona bem até agora.