2012-08-28 72 views
2

我使用的是最新版本的Chrome 23.0.1246.0 canary。 我想通過PeerConnection將通過PeerConnection從客戶端獲得的MediaStream發送到另一個客戶端。 我的意思是,ClientA通過我們之間的PeerConnection向我發送本地媒體流,然後通過ClientB和我之間的PeerConnection將此媒體流發送到ClientB。我可以從PeerConnection發送MediaStream到另一個嗎?

這是我的代碼,但它不起作用,當我第二次單擊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

是的,你可以。使用功能addStreamPeerConnection您可以添加任何您想要的MediaStream。事實上,在將流添加到PeerConnection後,您必須再次在客戶端之間交換SDP(本地和遠程描述)。

你的代碼並不是最新的,因爲你發佈了你的問題,所以對api有很多改進。如果您在當前的standard幫助下更新它,我可以幫助你。 :)

相關問題