RTCPeerConnection不发送流

时间:2017-12-10 08:03:18

标签: javascript html5 webrtc

我正在尝试通过以下代码建立RTCPeerConnection并使用pusher进行握手

var pc = new RTCPeerConnection({
        "iceServers": [
            {url: 'stun:stun.l.google.com:19302'},
            {url: 'stun:stunserver.org'},
        ]
    }
);

pc.onicecandidate = event => {
    if (!event.candidate) return;
    console.log("icecandidate: ", event);
    presenceChannel.trigger("client-ice", {data: event.candidate});
};

pc.onaddstream = event => {
    console.warn("stream added");
    vidEl.srcObject = event.stream;
};

//for when pusher channel subscription is successful from the other end
presenceChannel.bind("client-subscribed", () => {
    console.warn(pc);
    pc.createOffer().then(offer => {
        return pc.setLocalDescription(new RTCSessionDescription(offer), () => {
            console.warn("offer created: ", offer);
            presenceChannel.trigger("client-offer", {data: offer});
        });
    }).catch(error => {
        console.warn("error on offer: ", error);
    });
});

presenceChannel.bind("client-answer", function (data) {
    pc.setRemoteDescription(new RTCSessionDescription(data.data), () => {
        console.warn("received an answer");
        pc.addStream(currentStream);
        setTimeout(() => {
            console.warn(pc);
        }, 5000);
    }, error => {
        console.warn("error in answer: ", error)
    });
});

presenceChannel.bind("client-ice", function (data) {
    pc.addIceCandidate(new RTCIceCandidate(data.data)).catch(error => {
        console.warn("ice error: ", error);
    });
});

//and the remote peer

presenceChannel.bind("pusher:subscription_succeeded", () => {
    if (currentStream === undefined) {
        presenceChannel.trigger("client-recipient-error");
        pusher.unsubscribe(channel);

        return false;
    }

    var pc = new RTCPeerConnection({
            "iceServers": [
                {url: 'stun:stun.l.google.com:19302'},
                {url: 'stun:stunserver.org'},
            ]
        }
    );

    pc.onicecandidate = event => {
        if (!event.candidate) return;
        console.log("icecandidate: ", event);
        presenceChannel.trigger("client-ice", {data: event.candidate});
    };

    pc.onaddstream = event => {
        console.warn("stream added");
        vidEl.srcObject = event.stream;
    };

    presenceChannel.trigger("client-subscribed", {});
    console.warn(pc);
    presenceChannel.bind("client-ice", function (data) {
        pc.addIceCandidate(new RTCIceCandidate(data.data)).catch(error => {
            console.warn("ice error: ", error);
        });
    });

    presenceChannel.bind("client-offer", signalData => {
        // console.warn("client-signal", signalData);
        console.warn("received an offer");

        pc.setRemoteDescription(new RTCSessionDescription(signalData.data), () => {
            return pc.createAnswer().then(answer => {
                pc.setLocalDescription(new RTCSessionDescription(answer), () => {
                    presenceChannel.trigger("client-answer", {data: answer});
                    console.warn("created answer");
                    pc.addStream(currentStream);
                    setTimeout(() => {
                        console.warn(pc);
                    }, 7000);
                });
            }).then(() => {

            }).catch(error => {
                console.warn("error on answer: ", error);
            });
        });
    });
});

没有任何错误,两端的rtcpeerconnection变量同时具有本地和远程描述,所以假设连接已经建立正确吗?或者这并不意味着连接已建立,(我也需要帮助以了解连接是否已建立以及如何知道),但是一切都运行,所有事件和函数都会执行({{除外) 1}}我知道它只是没有被触发的事件我并不担心这个问题除了onicecandidate事件,所以我猜测这是不是被触发并且正在添加一个流然后连接真正开启,浪费了很多时间在这,坦率地说它只是让我疯了,任何帮助我意味着任何帮助将受到高度赞赏因为它是我第一次处理onaddstream而且可能有我做错了什么或采取了错误的方法,如果是这样的话,请指出这一点并向我展示正确的做法。提前谢谢。

编辑:我使用的是Chrome并且还不支持addTrack,之前我发现错误,因为addTrack不是一个函数,所以又回到了addStream。

0 个答案:

没有答案