3

我正在使用 Angular 和 SIPjs 进行 WebRTC 实现。远程媒体工作正常,但我无法添加本地媒体,因为发送者的 track 属性返回 null 而不是应该正确存储的 MediaStreamTrack 对象。

我正在使用 SIPjs 0.13.6,问题至少发生在 Chrome、版本 73.0.3683.86(官方构建)(64 位)和 Firefox 65.0.2(64 位)中。SIP 服务器是 Docker 中的 Asterisk,

var localStream = new MediaStream();

pc.getSenders().forEach(function(sender) {
   localStream.addTrack(sender.track); //throws error because it says is null
});

我用以下结果进行了这些测试,问题是轨道应该在那里,但是当我尝试访问时,它是空的......


 console.log("peer connection array og sender objects:");
 console.log(pc.getSenders());

结果,它似乎是 getSenders() 方法返回的数组的第一个元素内的一个 mediaStreamTrack:

我不能发布图片,因为我需要更多的声誉才能做到这一点,所以我必须这样说:

[RTCRtpSender]
    0: RTCRtpSender
        dtmf: RTCDTMFSender {ontonechange: null, canInsertDTMF: false, toneBuffer: ""}
        track: MediaStreamTrack {kind: "audio", id: "26f1da43-56f3-48d8-882f- 
        03f9b4dad7d5", label: "Default - External Microphone (Conexant ISST 
        Audio)", enabled: true, muted: false, …}
    __proto__: RTCRtpSender
length: 1
__proto__: Array(0)

接下来,我访问该数组的第一个对象:

console.log("first element of the array sender objects");
console.log(pc.getSenders()[0]);

结果,如您所见,从这里开始(对我而言)奇怪的事情。该对象似乎有一个空轨道,但是当您显示该对象时,MediaStreamTrack 对象似乎在那里......


RTCRtpSender {track: null, dtmf: RTCDTMFSender}
    dtmf: RTCDTMFSender {ontonechange: null, canInsertDTMF: false, 
        toneBuffer: ""}
    track: MediaStreamTrack {kind: "audio", id: "26f1da43-56f3-48d8-882f- 
        03f9b4dad7d5", label: "Default - External Microphone (Conexant ISST 
        Audio)", enabled: true, muted: false, …}
__proto__: RTCRtpSender

我做的第三件事是尝试访问轨道的属性值:


console.log("the track of the sender above is");
console.log(pc.getSenders()[0].track);

它显示为空:

null

然后,当我尝试遍历 getSenders() 结果以获取每个发件人的跟踪并将其添加到 MediaStream 对象时,它会引发错误,如帖子的第一段代码所示

4

0 回答 0