我正在使用 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 对象时,它会引发错误,如帖子的第一段代码所示