рдореИрдВ рд╣рдмреНрдмрд░ рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдВ рджреЗрддрд╛ рд╣реВрдВред рдЗрд╕ рд╡рд░реНрд╖, рдореЗрд░реЗ рдкрд╛рд╕ рд╢рд┐рдХреНрд╖рдХ рдХреЗ рдФрд░ рдЫрд╛рддреНрд░ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕реАрдзреЗ рд╡реАрдбрд┐рдпреЛ рд╕рдВрдЪрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЛрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреЛрд░реНрдЯрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╕рдВрдЪрд╛рд░ рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдерд╛ред рдРрд╕реЗ рд╢реБрд░реБрдЖрддреА рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ред рдПрдХ рдЫреЛрдЯреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ 2 рддрд░реАрдХреЗ рд╣реИрдВ: рдлреНрд▓реИрд╢ рдФрд░
рд╡реЗрдмрдЖрд░рдЯреАрд╕реА ред WebRTC рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реАрдбрд┐рдпреЛ рд╕рдВрдЪрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВ
PeerJS рдореЗрдВ рдЖрдпрд╛, рдЬреЛ WebRTC рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбрд╛рдпрд▓рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, https рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдкреГрд╖реНрда рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЪреВрдВрдХрд┐ рдкреЗрдЬ рдХреИрдорд░рд╛ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛, рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд┐рдирд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдмрд╕ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛)
рд╢реБрд░реВ рд▓реЗрдЖрдЙрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Peer</title> <script src="https://unpkg.com/peerjs@1.0.0/dist/peerjs.min.js"></script> </head> <body> <p><h3> ID: </h3><span id=myid ></span></p> <input id=otherPeerId type=text placeholder="otherPeerId" > <button onclick="callToNode(document.getElementById('otherPeerId').value)"></button> <br> <video id=myVideo muted="muted" width="400px" height="auto" ></video> <div id=callinfo ></div> <video id=remVideo width="400px" height="auto" ></video> </body>
рд╣реЗрдб рд╕реЗрдХреНрд╢рди рдореЗрдВ, рд╣рдо PeerJS рдХреЛ рд░рд┐рдореЛрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред
рдЗрдирдкреБрдЯ рдЖрдИрдбреА = otherPeerId - рдЬрд┐рд╕реЗ рд╣рдо рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рдЙрд╕рдХреА рджрд╛рд╡рдд рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЖрдк рдЗрд╕реЗ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╛ рдлрд╝реЛрди рдирдВрдмрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ)ред
рджреЛ рд╡реАрдбрд┐рдпреЛ рдЯреИрдЧ рдХреНрд░рдорд╢рдГ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡реАрдбрд┐рдпреЛ рдФрд░ рд╡рд╛рд░реНрддрд╛рдХрд╛рд░ рдХреЗ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред
рдЕрдм WebRTC рддрдХрдиреАрдХ рдФрд░ рдХреЙрд▓ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ред WebRTC, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рд╕рд░реНрд╡рд░ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ 2 рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдвреВрдВрдврдиреЗ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ WebRTC рдХреЛ рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН рдПрдХ рд╕рд░реНрд╡рд░ рдЬреЛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рджреВрд╕рд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрд╡рдпрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреАрдпрд░рдЬреЗрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд╛рд░реНрддрд╛рдХрд╛рд░ рдХреЛ PeerID рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, PeerJS рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЕрджреНрд╡рд┐рддреАрдп рд╕реВрдЪрдХрд╛рдВрдХред рдПрдХ рдХрд╛рдо рдХреЗ рдорд╕реМрджреЗ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛:
- рдкреЗрдЬ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдкреАрдпрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдЗрд╕рдХрд╛ рд╕рд╣рдХрд░реНрдореА mysql рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ
- рдЬрдм рдХреЙрд▓ рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЯрд░рд▓реЙрдХрд░ рдХрд╛ рд╕рд╣рдХрд░реНрдореА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рд╡рд░реНрддрдорд╛рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрдиреНрдпрдкрд┐рдпрд░рдЖрдИрдЖрд░рдбреА рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд╛рд░реНрддрд╛рдХрд╛рд░ рдХреЗ рд╕рд╣рдХрд░реНрдореА рдХреЛ рджрд░реНрдЬ рдХрд░реЗрдВрдЧреЗ
рддреЛ, рдЪрд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред1. рдореБрдЦреНрдп рдкреАрдпрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
var peer = new Peer();
2. рджрд╛рд╡рдд рдХреЗ рдЙрджреНрдШрд╛рдЯрди рдкрд░, рд╣рдо рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╕рд╣рдХрд░реНрдореА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рднрд╛рдЧреАрджрд╛рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рд╡рд╣ рд╣рдорд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХреЗ
peer.on('open', function(peerID) { document.getElementById('myid').innerHTML=peerID; });
3. рдХреЙрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЙрд▓ рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рдЯрдХрд╛рддреЗ рд╣реИрдВ
var peercall; peer.on('call', function(call) {
рдПрдХ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдПрдХ
рдХреЙрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо
peercall рдЧреНрд▓реЛрдмрд▓ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА рд╕реВрдЪрдирд╛ рдореЗрдВ рдПрдХ рдЗрдирдХрдорд┐рдВрдЧ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ 2 рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ: рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ
4. рд╣рдо
рдПрдХреНрд╕реЗрдкреНрдЯ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ
function callanswer() { navigator.mediaDevices.getUserMedia ({ audio: true, video: true }).then(function(mediaStream) { var video = document.getElementById('myVideo'); peercall.answer(mediaStream);
navigator.mediaDevices.getUserMedia - рдХреИрдорд░рд╛ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рджрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдбреЗрдЯрд╛ рдореЗрдВ
{рдСрдбрд┐рдпреЛ: рдЯреНрд░реВ, рд╡реАрдбрд┐рдпреЛ: рдЯреНрд░реВ}, рдЖрдк рддрджрдиреБрд╕рд╛рд░ рдХреЗрд╡рд▓ рдХреИрдорд░реЗ рдпрд╛ рдХреЗрд╡рд▓ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЧреЗ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВ рдЬреБрдбрд╝ рдЧрдИрдВред
рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдЖрдиреБрднрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛: рд╕рд╛рдереА рдХрд╛ рд╡реАрдбрд┐рдпреЛ рдЪрд▓рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред
5.
рдХреЙрд▓ рдмрдЯрди рджреНрд╡рд╛рд░рд╛ рдбрд╛рдпрд▓ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп
function callToNode(peerId) {
рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ, рд╣рдо рдЖрдкрдХреЗ рдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдкреАрдпрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЛ рдХреЙрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдореЗрдВ рд▓реМрдЯрд╛рдПрдЧрд╛, рдЙрд╕реЗ Peercall рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред рд╣рдо рд╕реНрдЯреНрд░реАрдо рдЗрд╡реЗрдВрдЯ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреНрдпрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡реАрдбрд┐рдпреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛
рд╡рд╣ рд╕рдм рд╣реИ, рд▓реЗрдХрд┐рди ...
рдпрджрд┐ рджреЛрдиреЛрдВ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреАрдЫреЗ рд╣реИрдВ, рддреЛ рдирд╛рде рдХреЙрд▓ рд╕реЗ рдирд╣реАрдВ рдЧреБрдЬрд░реЗрдЧрд╛ред (рдХреНрдпреЛрдВ? рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВ
habr.com/en/company/yandex/blog/419951 )
рдЗрд╕ рдмрд╛рдзрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╣рдХрд░реНрдореА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп TURN рд╕рд░реНрд╡рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ рдХрд╛ рдкреНрд░рд╢реНрди рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛ред рд╣рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЙрдард╛рдирд╛ рдерд╛: Ubuntu 16.04 рдкрд░ VPSред рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрдирд╛ред
apt install coturn
)
рддрдм рджрд╛рд╡рдд рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
var callOptions={'iceServers': [ {url: 'stun:95.xxx.xx.x9:3479', username: "user", credential: "xxxxxxxxxx"}, { url: "turn:95.xxx.xx.x9:3478", username: "user", credential: "xxxxxxxx"}] }; peer= new Peer({config: callOptions});
рдЕрдВрдд рдореЗрдВ, рдкреВрд░рд╛ рдХреЛрдб:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Peer</title> <script src="https://unpkg.com/peerjs@1.0.0/dist/peerjs.min.js"></script> </head> <body> <p><h3> ID: </h3><span id=myid ></span></p> <input id=otherPeerId type=text placeholder="otherPeerId" > <button onclick="callToNode(document.getElementById('otherPeerId').value)"></button> <br> <video id=myVideo muted="muted" width="400px" height="auto" ></video> <div id=callinfo ></div> <video id=remVideo width="400px" height="auto" ></video> <script> var callOptions={'iceServers': [ {url: 'stun:95.xxx.xx.x9:3479', username: "user", credential: "xxxxxxxxxx"}, { url: "turn:95.xxx.xx.x9:3478", username: "user", credential: "xxxxxxxx"}] }; peer= new Peer({config: callOptions}); peer.on('open', function(peerID) { document.getElementById('myid').innerHTML=peerID; }); var peercall; peer.on('call', function(call) { </script> </body>
Chrome, Opera, Firefox рдореЗрдВ Windows7 рдФрд░ Ubuntu 18.04 рдХреЗ рддрд╣рдд рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Chrome Android рдФрд░ MacOS рдкрд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ iPhone рдФрд░ iPad рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред