0
我遇到了一個奇怪的問題,WebRTC的提供生成過程的抽象。看起來好像即將到來的冰候選人從未到達空候選人。在使用幾乎相同的代碼之前,我已經成功地生成了優惠,但無論出於何種原因,我的抽象版本只能達到12個候選人,而我原來的20個常規版本相比。這很奇怪,看起來代碼幾乎相同,但抽象的代碼即使在同一瀏覽器上也不起作用。如何抽象WebRTC提供?
原工作代碼:
var localConn = new webkitRTCPeerConnection({'iceServers':[{...}]});
var remoteConn = new webkitRTCPeerConnection({'iceServers':[{...}]});
function initMedia(localView, callback){
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
var constraints = {audio:true,video:true};
navigator.getUserMedia(constraints, successStream, errorStream);
//onSuccess and Error functions
function successStream(stream){
window.stream = stream;
if(window.URL){
$('#'+localView).attr('src',window.URL.createObjectURL(stream));
} else {
$('#'+localView).attr('src',stream);
}
localConn.addStream(stream);
remoteConn.addStream(stream);
console.log('local Stream: '+ stream.id);
callback(); //-> goes on to create new offer
}
function errorStream(error){
console.log('navigator.getUserMedia error: ', error);
}
}
//function that generates offer and sends it out to a callback
function newOffer(callback){
console.log('creating new offer');
localConn.createOffer(function (sessionDescription){
localConn.setLocalDescription(sessionDescription);
}, function(error){
console.log('Error setting local description: '+error);
});
createOffer();
//gather ICE with a callback to handle/send generated offer
function createOffer(){
localConn.onicecandidate = function(iceEvent){
console.log('gathering local ice'); //ice events fired (20 total)
//upon gathering all local ice
if(iceEvent.candidate === null){
console.log('local ice gathered'); //success
var offer = {'type': localConn.localDescription.type,
'sdp': localConn.localDescription.sdp};
offer = JSON.stringify(offer);
console.log('offer created');
callback(offer);
}
}
}
}
新版本的抽象函數(沒有得到空冰候選人)
//general rtc vars
var localConn = new webkitRTCPeerConnection({'iceServers':[{'url':'stun:stun.1.google.com:19302'}]});
var remoteConn = new webkitRTCPeerConnection({'iceServers':[{'url':'stun:stun.1.google.com:19302'}]});
//var mediaStream;
var channel;
//creates a stream from webcam
//@params function streamHandle(stream)
function initStream(streamHandle){
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
var constraints = {audio:true,video:true};
navigator.getUserMedia(constraints, successStream, errorStream);
//onSuccess and Error functions
function successStream(stream){
window.stream = stream;
console.log('TreRTC: Local Stream-'+ stream.id);
//mediaStream = stream;
localConn.addStream(stream); //not sure if these need to be added before
remoteConn.addStream(stream); //or if they can be added in the creatOffer(stream) function
streamHandle(stream); //gets inserted into createOffer function
}
function errorStream(error){
console.log('navigator.getUserMedia error: ', error);
}
}
//creates an offer to be sent
//@params Stream stream (from getusermedia)
//@return string offer
function createOffer(stream){
console.log('TreRTC: Creating Offer');
//localConn.addStream(stream); //tried both ways from top and from internal
//remoteConn.addStream(stream);
localConn.createOffer(function (sessionDescription){
localConn.setLocalDescription(sessionDescription);
}, function(error){
console.log('Error setting local description: '+error);
});
localConn.onicecandidate = function(iceEvt){
console.log('TreRTC: ICE in'); //ice events firing (12 total)
if(iceEvt.candidate === null){
console.log('TreRTC: ICE gathered'); //never reaches to this point...
var offer = {'type': localConn.localDescription.type,
'sdp': localConn.localDescription.sdp};
offer = JSON.stringify(offer);
console.log('TreRTC: Offer initialized');
return offer; //returns offer as a string
} //could also specify a callback
}
}
請問你有什麼依據例如該代碼?它使用的是非常舊的構造,如傳統的回調API [破壞的createObjectURL模式](http://stackoverflow.com/questions/40203036/how-stop-exit-video-in-webrtc-navigator-user-media-javascript/40210033#40210033),並且只能在Chrome瀏覽器啓動時使用,因爲webkit前綴(我試圖追蹤舊的示例以更新它們)。 – jib
stun:stun.1.google.com:19305不是一個stun服務器。你可能想用stun.l.google.com:19305進行測試 –