2017-09-14 250 views
1

我想要做的是讓P1連接到P2,P2獲取網絡攝像頭並將其傳輸到P2。在所有相同的頁面上練習webrtc。爲什麼WebRTC本地流不顯示任何內容?

onaddstream我確實得到一個流,它有正確的ID和錯誤,但是當我將它分配給視頻元素什麼也沒有發生。

但是,我確實從p2獲得有效的流,這是請求流的那個人。如果我將視頻設置爲與此流相同,則會顯示網絡攝像頭視頻。

這是你沒有信號ICE候選人代碼

v = $0 

pc1 = new RTCPeerConnection(); 
pc2 = new RTCPeerConnection(); 

pc1.onaddstream = (s) => { 
    v.src = URL.createObjectURL(s.stream); 
    window.s1 = s.stream; 
}; 

pc1.createOffer({offerToReceiveVideo: 1}) 
.then((offer) => { 
    pc1.setLocalDescription(offer); 
    pc2.setRemoteDescription(offer) 
}) 
.then(() => navigator.mediaDevices.getUserMedia({ video: true })) 
.then((stream) => { 
    pc2.addStream(stream); 
    window.s2 = stream; 
}) 
.then(() => pc2.createAnswer()) 
.then((answer) => { 
    pc2.setLocalDescription(answer); 
    pc1.setRemoteDescription(answer); 
}) 
.catch((err)=>console.log(err)); 

回答

1

。添加:

pc1.onicecandidate = e => pc2.addIceCandidate(e.candidate); 
pc2.onicecandidate = e => pc1.addIceCandidate(e.candidate); 

...它會工作。

側面提示:檢查出你的友好的Web控制檯廢棄警告:

⚠onaddstream已經過時!改用peerConnection.ontrack。

⚠URL.createObjectURL(MediaStream)已棄用,將盡快刪除。

例如,像this。規格幾乎完成evolving

+0

說明chrome本身還不支持ontrack,你的例子使用shim調用adapter.js –

+0

你能看看這個問題嗎https://stackoverflow.com/questions/46208620/is-my-understanding-of-webrtc-協議正確 –

+0

你也可以解釋爲什麼在磋商需要事件之後做一切事情,爲什麼你的createOffer不需要{offerTORecieveVideo:true}是不是需要,是因爲一個創建要約是發送流的人 –

相關問題