Sip.js: “SessionDescriptionHandler”类型上不存在属性“peerConnection”

创建于 2020-05-28  ·  5评论  ·  资料来源: onsip/SIP.js

你好,
尝试从 sipjs 0.15.11 迁移到 sjipjs 0.16.1 时遇到以下问题。 我在这里错过了什么吗?

描述错误
“SessionDescriptionHandler”类型上不存在属性“peerConnection”

日志

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

重现
重现行为的步骤:

  1. 创建用户代理并处理来电
  2. 尝试附加此处提到的媒体 attach-media
    使用此代码
// 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”

环境信息

  • SIPJS 0.16.1
Typescript

最有用的评论

我遇到了同样的问题,我从“_sip.js / lib目录/平台/ web_”导入SessionDescriptionHandler修复它,它工作得很好至今。

所有5条评论

更准确地说,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();
}

我们很乐意接受改进和评论。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Juli0GT picture Juli0GT  ·  5评论

Pjata picture Pjata  ·  11评论

diegoteixeir4 picture diegoteixeir4  ·  5评论

josephfrazier picture josephfrazier  ·  26评论

tm1000 picture tm1000  ·  12评论