Sip.js: A propriedade 'peerConnection' não existe no tipo 'SessionDescriptionHandler'

Criado em 28 mai. 2020  ·  5Comentários  ·  Fonte: onsip/SIP.js

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:

  1. Criar um agente de usuário e lidar com chamadas recebidas
  2. Tente anexar uma mídia como mencionado aqui attach-media
    Usando este código
// 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

  • SipJS 0.16.1
Typescript

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.

Todos 5 comentários

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.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

DenisButCheR picture DenisButCheR  ·  7Comentários

slavikbialik picture slavikbialik  ·  7Comentários

josephfrazier picture josephfrazier  ·  26Comentários

Pjata picture Pjata  ·  11Comentários

seanbright picture seanbright  ·  3Comentários