我使用的是最新版本的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>
答案 0 :(得分:0)
是的,你可以。使用 PeerConnection 的 addStream 功能,您可以添加所需的任何 MediaStream 。实际上,在将流添加到PeerConnection之后,您必须再次在客户端之间交换SDP(本地和远程描述)。
您的代码不是最新的,因为自从您发布了问题以来,api已经有了很多改进。如果您在当前standard的帮助下更新它,我可以帮助您。 :)