2

我正在使用 Chrome 23.0.1246.0 canary,最新版本。我想将通过 PeerConnection 从客户端接收的 MediaStream 通过 PeerConnection 发送到另一个客户端。我的意思是,ClientA 通过我们之间的 PeerConnection 将其本地媒体流发送给我,然后,我通过 ClientB 和我之间的 PeerConnection 将此媒体流发送给 ClientB。

这是我的代码,但它不起作用,当我第二次单击 AddVideo 按钮时,不会调用“gotRemoteStream”函数。我不知道原因。

任何人都可以帮助我吗?

<!DOCTYPE html>
<html>
<head>
<title>Video Link</title>
<style type="text/css">
    video { width: 200px;}
</style>
</head>
<body>
<input id="btnAddVideo" type="button" value="Add Video" onclick="AddVideo();" />
<div id="videos"></div>
<script type="text/ecmascript">
    var pcs = new Array();
    var pcr = new Array();
    var mediaStream = new Array();
    var msIndex = 0;
    navigator.webkitGetUserMedia({ audio: true, video: true }, gotStream, function () { alert('get MediaStream Error'); });
    function gotStream(stream) {
        mediaStream[0] = stream;
    }

    var pc1;
    var pc2;
    function AddVideo() {
        if (mediaStream[msIndex] == null) return;
        pc1 = new webkitPeerConnection00(null, iceCallback1);
        pc1.addStream(mediaStream[msIndex]);
        var offer = pc1.createOffer(null);
        pc1.setLocalDescription(256, offer);

        pc2 = new webkitPeerConnection00(null, iceCallback2);
        pc2.onaddstream = gotRemoteStream;
        pc2.setRemoteDescription(256, new SessionDescription(offer.toSdp()));
        var answer = pc2.createAnswer(offer.toSdp(), { has_audio: true, has_video: true });
        pc2.setLocalDescription(768, answer);

        pc1.setRemoteDescription(768, new SessionDescription(answer.toSdp()));
        pc2.startIce();
        pc1.startIce();

        pcs.push(pc1);
        pcr.push(pc2);
    }
    function iceCallback1(candidate, bMore) {
        pc2.processIceMessage(new IceCandidate(candidate.label, candidate.toSdp()));
    }
    function iceCallback2(candidate, bMore) {
        pc1.processIceMessage(new IceCandidate(candidate.label, candidate.toSdp()));
    }
    function gotRemoteStream(e) {
        var v = document.createElement('video');
        v.autoplay = 'autoplay';
        v.src = webkitURL.createObjectURL(e.stream);
        document.getElementById('videos').appendChild(v);
        mediaStream.push(e.stream);
        msIndex++;
    }
</script>
</body>
</html>
4

1 回答 1

0

是的你可以。使用PeerConnection的addStream函数,您可以添加任何您想要的MediaStream 。实际上,在将流添加到 PeerConnection 之后,您必须再次在客户端之间交换 SDP(本地和远程描述)。

您的代码不是最新的,因为自从您发布问题以来,api 已经有了很多改进。如果您在当前标准的帮助下更新它,我可以帮助您。:)

于 2013-08-26T12:01:05.070 回答