你好,
尝试从 sipjs 0.15.11 迁移到 sjipjs 0.16.1 时遇到以下问题。 我在这里错过了什么吗?
描述错误
“SessionDescriptionHandler”类型上不存在属性“peerConnection”
日志
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”类型上
观察到的行为
编译抛出错误:
“SessionDescriptionHandler”类型上不存在属性“peerConnection”
环境信息
更准确地说,peerConnection 确实存在于文件platform/web/session-description-handler/session-description-handler.ts
public peerConnection!: RTCPeerConnection;
但不在api/session-description-handler.ts
这就是为什么它不是定义文件的一部分吗?
我遇到了同样的问题,我从“_sip.js / lib目录/平台/ web_”导入SessionDescriptionHandler修复它,它工作得很好至今。
_'sip.js/lib/platform/web'_ 中的所有内容都在Web
命名空间中导出,因此您也可以import { Web } from "sip.js"
然后引用为Web.SessionDescriptionHandler
。
peerConnection
将不存在于SessionDescriptionHandler
接口上。 这个想法是您可以为非 SIP.js 的环境编写 SDH,因此没有对等连接。 如果您知道您正在使用 Web 实现,请从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();
}
我们很乐意接受改进和评论。
最有用的评论
我遇到了同样的问题,我从“_sip.js / lib目录/平台/ web_”导入SessionDescriptionHandler修复它,它工作得很好至今。