Sip.js: Свойство «peerConnection» не существует для типа «SessionDescriptionHandler»

Созданный на 28 мая 2020  ·  5Комментарии  ·  Источник: onsip/SIP.js

Привет,
У меня возникла следующая проблема при попытке перейти с sipjs 0.15.11 на sjipjs 0.16.1. Я что-то упустил здесь?

Опишите ошибку
Свойство «peerConnection» не существует для типа «SessionDescriptionHandler»

Журналы

error TS2339: Property 'peerConnection' does not exist on type 'SessionDescriptionHandler'.

Воспроизвести
Шаги для воспроизведения поведения:

  1. Создайте пользовательский агент и обработайте входящий вызов
  2. Попробуйте прикрепить носитель , как указано здесь придают СМИ
    Используя этот код
// 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();
}

Ожидаемое поведение
Свойство «peerConnection» должно существовать для типа «SessionDescriptionHandler».

Наблюдаемое поведение
Компиляция выдает ошибку:
Свойство «peerConnection» не существует для типа «SessionDescriptionHandler»

Информация об окружающей среде

  • SipJS 0.16.1
Typescript

Самый полезный комментарий

Я сталкиваюсь с той же проблемой, и я импортирую SessionDescriptionHandler из '_sip.js/lib/platform/web_', чтобы исправить это, пока он работает хорошо.

Все 5 Комментарий

Чтобы быть более точным, peerConnection существует на файловой платформе/web/session-description-handler/session-description-handler.ts.

  public peerConnection!: RTCPeerConnection;

Но не на api/session-description-handler.ts

Поэтому он не является частью файла определения?

Я сталкиваюсь с той же проблемой, и я импортирую SessionDescriptionHandler из '_sip.js/lib/platform/web_', чтобы исправить это, пока он работает хорошо.

Все в _'sip.js/lib/platform/web'_ экспортируется в пространство имен Web , поэтому вы также можете использовать import { Web } from "sip.js" а затем ссылаться как Web.SessionDescriptionHandler .

Тип peerConnection не будет существовать в интерфейсе SessionDescriptionHandler . Идея состоит в том, что вы можете написать SDH для среды, отличной от SIP.js и, следовательно, не имеющей однорангового соединения. Импортируйте и используйте типы из Web.SessionDescriptionHandler если вы знаете, что используете веб-реализацию. Это сделано намеренно.

Если у кого-то тоже должна быть эта проблема. Вот как это сработало для меня:

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();
}

Улучшения и замечания принимаются с удовольствием.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги