#javascript #google-chrome #browser #webrtc #mozilla
#JavaScript #Google-Chrome #браузер #webrtc #Mozilla
Вопрос:
Я написал простое приложение для видеовызовов с webRTC Technology
помощью . Это работает нормально first 3 minutes
, и после этого я сталкиваюсь с некоторой "ICE candidate failing"
ошибкой.
Вот что происходит :
Шаги :
настройте одноранговое соединение
- При загрузке окна разрешить веб-камеру с помощью getUserMedia (доступ к веб-камере и микрофону)
- создайте одноранговое соединение RTC с добавлением удаленного потока и icecandidateAdded
начать одноранговое соединение
- создайте предложение, отправьте запрос предложения
- addIceCandidate
- создать ответ, отправить ответный ответ
Это мой код :
function hasUserMedia() {
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
return !!navigator.getUserMedia;
};
function hasRTCPeerConnection(){
window.RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
window.RTCSessionDescription = window.RTCSessionDescription || window.webkitRTCSessionDescription || window.mozRTCSessionDescription;
window.RTCIceCandidate = window.RTCIceCandidate || window.webkitRTCIceCandidate || window.mozRTCIceCandidate;
return !!window.RTCPeerConnection;
};
//when window loading
function startConnection() {
if (hasUserMedia()){
navigator.getUserMedia({ video: true, audio: true }, function(my_stream) {
stream = my_stream;
client_Video.src = window.URL.createObjectURL(stream);
if(hasRTCPeerConnection()){
console.log("RTC peer connection is ready");
//set up peer connection
setup_Peer_Connection(stream);
}
}
}
function setup_Peer_Connection(stream){
var configuration = {"iceServers": [{ "url": "stun:stun.1.google.com:19302" }]};
my_Connection = new RTCPeerConnection(configuration,{optional:[]});
my_Connection.addStream(stream);
my_Connection.onaddstream = remoteStreamAdded;
my_Connection.onicecandidate = icecandidateAdded;
}
function remoteStreamAdded(ev){
m_PeerVideo.src = window.URL.createObjectURL(ev.stream);
}
function icecandidateAdded(ev) {
if (ev.candidate) {
send({type: "candidate",candidate: ev.candidate});
}
};
и для начала однорангового соединения :
var mediaConstraints = {
optional: [],
mandatory: {
OfferToReceiveAudio: true,
OfferToReceiveVideo: true
}
};
function calluser(){
//start video call with user
Start_Peer_Connection();
}
function Start_Peer_Connection(){
my_Connection.createOffer(function (offer) {
console.log("offer started");
send({type: "offer",offer: offer});
my_Connection.setLocalDescription(offer, success2, failure_offer);
}, failure_Start_Peer_Connection,mediaConstraints);
}
//getting message from server
connection.onmessage = function (message) {
console.log("Got message", message.data);
var data = JSON.parse(message.data);
switch(data.type) {
case "offer":
Client_Offer(data.offer, data.name);
break;
case "answer":
Client_Answer(data.answer);
break;
case "candidate":
Client_Candidate(data.candidate);
break;
case "leave":
Client_Leave();
break;
default:
break;
}
};
function Client_Offer(offer, name) {
my_Connection.setRemoteDescription(new RTCSessionDescription(offer));
my_Connection.createAnswer(function (answer) {
my_Connection.setLocalDescription(answer);
send({type: "answer",answer: answer});
},failure_Client_Offer);
}
}
function Client_Answer(answer) {
my_Connection.setRemoteDescription(new RTCSessionDescription(answer));
}
function Client_Candidate(candidate) {
my_Connection.addIceCandidate(new RTCIceCandidate(candidate));
}
Я использую браузер Mozilla Firefox. я не знаю, почему это не работает через 3 минуты. Соединение в порядке. Но почему ice-кандидат выходит из строя через некоторое время? Отсутствует какой-либо код? Есть предложения?
Комментарии:
1. Можете ли вы воспроизвести это с помощью Chrome? Возникает ли проблема в других приложениях WebRTC?
2. та же проблема все еще в Chrome