const video = document.querySelector('video');
let client = {};
var stream;
navigator.mediaDevices.getUserMedia({ video: true, audio: true }, function (stream) {
stream = stream;
}, function () { })
.then(stream => {
connection.invoke('NewVideoClient');
video.srcObject = stream
video.play();
function InitPeer(type) {
var peer = new SimplePeer({
initiator: (type == 'init') ? true : false,
stream: stream,
trickle: false
});
peer.on('stream', function (stream) {
CreateVideo(stream);
});
peer.on('connect', () => {
console.log('CONNECT');
alert('CONNECT');
});
//peer.on('close', function () {
// document.getElementById('peerVideo').remove();
// peer.destroy();
//});
return peer;
}
// for peer type init
function CreatePeer() {
alert("Enter in to CreatePeer");
client.gotAnswer = false;
let peer = InitPeer('init');
// let data = null;
peer.on('signal', function (data) {
if (!client.gotAnswer) {
connection.invoke('SendOffer', data);
alert(JSON.stringify(data));
}
});
client.peer = peer;
}
//peer not init to pass the answer
function CreateAnswer(offer) {
let peer = InitPeer('notInit');
let data = null;
peer.on('signal', (offer) => {
alert("Enter in to CreateAnswer");
connection.invoke('SendAnswer', offer);
});
peer.signal(offer);
}
//this fuction will run when answer send from server
function SignalAnswer(answer) {
alert("Enter in to Signaling");
client.gotAnswer = true;
let peer = client.peer;
peer.signal(answer);
};
//this function will create video
function CreateVideo(stream) {
alert("video play");
let video = document.createElement('video');
video.id = 'peerVideo';
video.style.width = '400px';
video.style.height = '400px';
video.srcObject = stream;
video.class = 'embed-responsive-item';
document.querySelector("#peerDiv").appendChild(video);
video.play();
}
function SessionActive() {
document.write("User is in another call.Please come back");
}
//Hub will call this function to create the offer
connection.on("CreateOffer", function () {
alert("Enter in to CreateOffer");
CreatePeer();
});
//Hub will call this method to create the answer
connection.on("CreateAnswer", function (offer) {
alert("Enter in to CreateAnswer");
CreateAnswer(offer);
});
//Hub will call this fucntion to send the answer ot the caller
connection.on("SignalAnswer", function (answer) {
alert("Enter in to Signaling");
SignalAnswer(answer);
})
//Hub will call this fuction to this connect the video
connection.on("RemovePeer", function () {
document.getElementById('peerVideo').remove();
if (client.peer) {
client.peer.destroy();
}
});
})
.catch(err => document.write(err));
Я написал 3 метода в своем приложении для видеочата, поскольку я новичок в javascript, возникает небольшая путаница. В методе "SignalAnswer" он вызывает "peer.signal (answer)", и это вызывает функцию сигнала внутри "CreatePeer". Внутри метода «CreateAnswer» также есть созданная сигнальная функция, но она не вызывается. он будет вызван peer.signal (offer) в том же методе. Я предполагаю, потому что peer получит два разных объекта в два разных времени. Таким образом, в соответствии с назначенным объектом эта функция будет вызываться. Может ли кто-нибудь объяснить это. как эти функции работают в javascripts ПРИМЕЧАНИЕ. Соединение используется для вызова хаба SingnalR.