我正在使用webRTC打開2個用戶之間的數據通道,網站的簡化版本是: 1按鈕用onclick =「myLive.initiateConnection()」創建調用。
1使用id =「呼叫者」爲SDP描述輸入到從第一用戶選項卡中複製粘貼到第二的用戶
1個按鈕與的onclick =接聽電話「myLive.join()」
1輸入id =「callee」,用於從第二個用戶複製粘貼到第一個用戶的SDP描述
1 onclick =「setCallee($('#callee')。val())」遠程描述重刑第一用戶
在webRTC調用中設置接收器
我把initiateConnection方法之前加入的方法,因爲如下所述,我認爲錯誤是由被稱爲gotCallerInfo加入:
join = function(){
connection = new peerConnection(servers);
connection.onicecandidate = function(evt){
if(evt.candidate){
connection.addIceCandidate(new RTCIceCandidate(event.candidate));
}
};
connection.ondatachannel = function(ev){
dataChannel = ev.channel;
dataChannel.onmessage = receiveMessage;
ev.channel.onopen = function(){
alert('connection established, callee');
};
};
gotCallerInfo($("#caller").val())
};
gotCallerInfo = function(data){
var newDesc = JSON.parse(data);
connection.setRemoteDescription(new RTCSessionDescription(newDesc), function(){
connection.createAnswer(function(desc){
connection.setLocalDescription(desc);
此代碼沒有按」通過webRTC連接2個用戶。通過調整此處的代碼並使用chrome進行測試,我發現我可以通過兩次單擊加入按鈕來實現我的webRTC調用...或者在等待1s()後第二次調用createAnswer,webRTC調用與chrome 。但與Firefox,它會觸發錯誤「createAnswer無法在狀態穩定中調用」。爲什麼在超時之後第二次調用createAnswer人爲地解決了chrome問題(不幸的是沒有使用firefox)?我想我按照錯誤的順序做了一些事情,但setRemoteDescription,createAnswer和setLocalDescription的順序是正確的。由第二個createAnswer創建的Desc2比由第一個創建的desc長,所以我懷疑setLocalDescription觸發了一些需要發送給調用者的ICE候選者的集合,在這種情況下,我怎樣才能得到desc是一個完整的描述第一次調用createAnswer?
//setTimeout(function(){
//connection.createAnswer(function(desc){
$("#callee").val(JSON.stringify(desc));
//}, errorCallback);
//}, 1000);
}, errorCallback);
}, errorCallback);
};
我把調用者使用的代碼放在錯誤源自錯誤本身之前的情況下。調用者通過單擊創建按鈕來運行initiateConnection方法。然後被叫複製粘貼從主叫標籤的說明,然後點擊加入,那麼調用者複製粘貼由被叫方的說明,然後單擊設置被叫描述
initiateConnection = function(){
connection = new peerConnection(servers);
connection.onicecandidate = function(evt){
if(evt.candidate){
connection.addIceCandidate(new RTCIceCandidate(event.candidate));
}
};
dataChannel = connection.createDataChannel("channel");
dataChannel.onopen = function(){
alert('connection established, caller');
};
dataChannel.onmessage = receiveMessage;
connection.createOffer(function(description){
connection.setLocalDescription(description);
$("#caller").val(JSON.stringify(description));
}, errorCallback);
};
setCallee = function(data){
connection.setRemoteDescription(new RTCSessionDescription(JSON.parse(data)));
};
receiveMessage = function(){};
errorCallback = function(){};
太多這裏剖析。你真的需要把它分解成[mcve]。不太清楚爲什麼你需要長時間輪詢 – charlietfl
好吧,我要編輯一個版本,其中服務器和ajax調用被複制粘貼從一個標籤描述到另一個 –