首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未捕获TypeError:无法读取null的属性“”getTracks“”

未捕获TypeError:无法读取null的属性“”getTracks“”
EN

Stack Overflow用户
提问于 2020-07-02 23:54:02
回答 1查看 2.6K关注 0票数 0

我一直在尝试将webRTC广播源改为多对一

我认为一对多(广播)和多对一在这里有一点不同图像描述1:https://i.stack.imgur.com/zAzbt.png

他们有peerConnections,一切都很好。

呼叫者将MediaStream发送给所有被呼叫者。

所以我想

让我们从呼叫者到被呼叫者获取信令,并将MediaStream从被呼叫者传递到呼叫者。

所以我把这段代码放到被调用方

callee.js

代码语言:javascript
复制
socket.on('offer', (id, description) => {
  peerConnection = new RTCPeerConnection(config);
  navigator.mediaDevices
    .getUserMedia(constraints)
    .then((stream) => {
      video.srcObject = stream;
    })
    .catch((error) => console.error(error));

  let stream = video.srcObject;
  stream
    .getTracks()
    .forEach((track) => peerConnection.addTrack(track, stream));

  peerConnection
    .setRemoteDescription(description)
    .then(() => peerConnection.createAnswer())
    .then((sdp) => peerConnection.setLocalDescription(sdp))
    .then(() => {
      socket.emit('answer', id, peerConnection.localDescription);
    });

  peerConnection.onicecandidate = (event) => {
    if (event.candidate) {
      socket.emit('candidate', id, event.candidate);
    }
  };
});

caller.js

代码语言:javascript
复制
socket.on('answer', (id, description) => {
  peerConnections[id].setRemoteDescription(description);
  peerConnections.ontrack = (event) => {
    video.srcObject = event.streams[0];
  };
});

我从callee.js中得到了“未捕获TypeError:无法读取null的属性'getTracks‘”这个错误

你能给我一些建议吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-07-03 00:21:47

由于流是由Promise获取的,因此getTracks()将在getUserMedia()之前执行。因此,修改它,使其在promise之后执行。

exp:未测试

代码语言:javascript
复制
socket.on("offer", (id, description) => {
    peerConnection = new RTCPeerConnection(config);
    peerConnection.onicecandidate = event => {
        if (event.candidate) {
            socket.emit("candidate", id, event.candidate);
        }
    };
    navigator.mediaDevices
        .getUserMedia(constraints)
        .then(stream => {
            video.srcObject = stream;
            stream.getTracks().forEach(track => peerConnection.addTrack(track, stream));
        })
        .then(peerConnection.setRemoteDescription(description))
        .then(() => peerConnection.createAnswer())
        .then(sdp => peerConnection.setLocalDescription(sdp))
        .then(() => {
            socket.emit("answer", id, peerConnection.localDescription);
        })
        .catch(error => console.error(error));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62700376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档