Привет,
У меня возникла следующая проблема при попытке перейти с sipjs 0.15.11 на sjipjs 0.16.1. Я что-то упустил здесь?
Опишите ошибку
Свойство «peerConnection» не существует для типа «SessionDescriptionHandler»
Журналы
error TS2339: Property 'peerConnection' does not exist on type 'SessionDescriptionHandler'.
Воспроизвести
Шаги для воспроизведения поведения:
// 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»
Информация об окружающей среде
Чтобы быть более точным, 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();
}
Улучшения и замечания принимаются с удовольствием.
Самый полезный комментарий
Я сталкиваюсь с той же проблемой, и я импортирую SessionDescriptionHandler из '_sip.js/lib/platform/web_', чтобы исправить это, пока он работает хорошо.