我可以将PeerConnection中的MediaStream发送给另一个吗?

时间:2012-08-28 04:07:48

标签: webrtc

我使用的是最新版本的Chrome 23.0.1246.0 canary。 我想通过PeerConnection将从客户端通过PeerConnection发现的MediaStream发送到另一个客户端。 我的意思是,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>

1 个答案:

答案 0 :(得分:0)

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

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