Peerjs: рдиреЛрдб.рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреАрдпрд░рдЬ рдХреНрд▓рд╛рдЗрдВрдЯ рдЪрд▓рд╛рдПрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдирд╡ре░ 2013  ┬╖  65рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: peers/peerjs

рдХреНрдпрд╛ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдиреЛрдб.рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдкреАрдЕрд░.рдЬреЗрдПрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдПрдХ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдиреЛрдб.рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЛрдиреЛрдВ рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ (рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ) рдкреАрдпрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдХреЛрдИ рд╡реАрдбрд┐рдпреЛ/рдСрдбрд┐рдпреЛ рдирд╣реАрдВред WebRTC рдПрдХ рдХреЗрдВрджреНрд░реАрдп рдХреНрд▓рд╛рдЗрдВрдЯ/рд╕рд░реНрд╡рд░ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд░реВрдЯрд┐рдВрдЧ рдФрд░ рд╕рдВрдЪрд╛рд░ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ WebRTC рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИред

рдпрд╣ рдкреНрд░рд╢реНрди рднреА рджреЗрдЦреЗрдВ: http://stackoverflow.com/questions/18872712/node-js-webrtc-client

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЕрд╡рд▓реЛрдХрди
рдирдорд╕реНрддреЗ, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЕрдкрдиреА рдереАрд╕рд┐рд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдХреБрдЫ рдХрджрдо рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрдИ рдЪреАрдЬреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рд╕рд╛рдзрд╛рд░рдг рд╕рд╣рдХрд░реНрдореА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред рдбреЗрдЯрд╛рдЪреИрдирд▓ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ (рдиреЛрдбрдЬреЗрд╕ рдкреАрдпрд░рдЬреНрд╕ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА) - рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 2 (рдПрдЖрд░рдПрдо, рд░рд╛рд╕реНрдкрд┐рдпрди рдЬреЗрд╕реА, рд▓реЗрдХрд┐рди рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП) рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рддреИрдирд╛рдд рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд╕рд░реНрд╡рд░ (рдкреАрдпрд░рд╕рд░реНрд╡рд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд┐рдирд╛ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдмрдирд╛ рдкрд╛рддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдореБрджрд╛рдп рдХреЛ рд╡рд╛рдкрд╕ рджреЗ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдХрд░реЗрдВ (рдирд╣реАрдВ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рддреЗрдВ:
рд╕реЗрд▓реЗрдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИ
-xvfb рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдареАрдХ рд╣реИ рдЗрд╕рдиреЗ рдХрд┐рдпрд╛
-рдЖрдкрдХреЛ рдкреАрдпрд░рдЬ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
- рдХрдо рд╕реЗ рдХрдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд░ - рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ wrtc рд╡реИрд╕реЗ рднреА рд╣рд╛рде рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ

рд╕рдм рдХреБрдЫ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
рдЦрд┐рдбрд╝рдХреА = рд╡реИрд╢реНрд╡рд┐рдХ
window.BlobBuilder = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмреНрд▓реЙрдмрдмрд┐рд▓реНрдбрд░")
рд╕реНрдерд╛рди = {рдкреНрд░реЛрдЯреЛрдХреЙрд▓: 'http'}

рдмрд╛рдЗрдирд░реАрдкреИрдХ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмрд╛рдЗрдирд░реА-рдкреИрдХ")
XMLHttpRequest = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("xmlhttprequest")ред XMLHttpRequest;
var wrtc = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-webrtc') ()
// рд╡рд░ рдкреАрд░ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдкреАрд░рдЬ')

RTCPeerConnection = wrtc.RTCPeerConnection;
RTCSessionDescription = wrtc.RTCSessionDescription;
RTCIceCandidate = wrtc.RTCIceCandidate;

рд╡реЗрдмрд╕рд╛рдХреЗрдЯ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдбрдмреНрд▓реНрдпреВрдПрд╕')
рдЖрд╡рд╢реНрдпрдХрддрд╛ ('/ рд╣реЛрдо/рдкреАрдЖрдИ/рдиреЛрдб_рдореЙрдбреНрдпреВрд▓/рдкреАрдпрд░рдЬ/lib/exports.js');

рд╡рд░ рдкреАрдпрд░ = рдирдпрд╛ рдкреАрдпрд░ (
...
})

var conn=peer.connect('id')
conn.serialization = 'рдХреЛрдИ рдирд╣реАрдВ'
conn.send ('рдиреЛрдбрдЬ рд╕реЗ рдирдорд╕реНрддреЗ!')

рдпрд╣реА рд╣реИ, рд╕рд╛рджрд░, рдЬреЗрдкреА

рд╕рднреА 65 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ @helloIAmPau рджреНрд╡рд╛рд░рд╛ WebRTC: https://github.com/helloIAmPau/node-rtc/ рдХрд╛ рдПрдХ рдиреЛрдб.рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣рд▓ рдорд┐рд▓реАред рд╢рд╛рдпрдж рдмрд▓реЛрдВ рдХреЛ рдмрдВрдбрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рд╣реЗ рдЬреЛрд╕,

рдореИрдВ рдЗрд╕ рдкрд░ рдирдЬрд░ рд░рдЦреВрдВрдЧрд╛ред рдЬрдм рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп webrtc рдиреЛрдб рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реЛрддрд╛ рд╣реИ рддреЛ
рдкреАрдпрд░рдЬ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдмреБрдз, 6 рдирд╡рдВрдмрд░, 2013 рдХреЛ рд╕реБрдмрд╣ 6:46 рдмрдЬреЗ, рдЬреЛрд╕ рдбреА рдЬреЛрдВрдЧ рд╕реВрдЪрдирд╛рдПрдВ @github.comрд▓рд┐рдЦрд╛:

рдореБрдЭреЗ @helloIAmPau рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкрд╣рд▓ рдорд┐рд▓реА https://github.com/helloIAmPau to
WebRTC рдХрд╛ рдПрдХ рдиреЛрдб.рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдПрдБ:
https://github.com/helloIAmPau/node-rtc/ред рд╢рд╛рдпрдж рдмрдВрдбрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ
рддрд╛рдХрддреЛрдВ?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHub рдкрд░ рджреЗрдЦреЗрдВhttps://github.com/peers/peerjs/issues/103#issuecomment -27878686
.

510-691-3951
http://ericzhang.com

https://github.com/modeswitch/node-webrtc рднреА рджреЗрдЦреЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдиреЛрдб-рдЖрд░рдЯреАрд╕реА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж рдПрд░рд┐рдХ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рдПрдХ рдПрдорд╕реАрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдиреЛрдб.рдЬреЗрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рднреА рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рдПрдХ рд╕реНрдЯрд╛рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рд╕рдореВрд╣ (рдХреЙрдиреНрдлреНрд░реЗрдВрд╕ рдХреЙрд▓) рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ/рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЬрд╕реНрдЯрд┐рди рдЙрдмреЗрд░рддреА рджреНрд╡рд╛рд░рд╛ WebRTC рдкрд░ рдкрд┐рдЫрд▓реЗ Google I/O рдкрд░ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (23 рд╕реЗ :19)ред Node.js рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдПрдХ рдмрдврд╝рд┐рдпрд╛ рдлрд┐рдЯ рд╣реЛ рд╕рдХреЗред

@ericz рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИ? Node.js рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛрдЧрд╛ред

рдЕрд░реЗ рдЬреЛрд╕рджреЗрдЬреЛрдВрдЧ,

рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдПрдХреНрд╢рди рдЖрдЗрдЯрдо рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рдо рдлреАрдЪрд░ рдкрд░ рдирдЬрд░ рд░рдЦ рд╕рдХреЗрдВ :)

рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рджред рдмреЗрдЭрд┐рдЭрдХ рд╢реАрд░реНрд╖рдХ рдХреЛ "рдиреЛрдб.рдЬреЗрдПрд╕ рд╕рдкреЛрд░реНрдЯ" рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрдЪрд┐рдд рд▓реЗрдмрд▓ рджреЗрдВ...

: +1: рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреАред

:+1: рдЗрд╕рдХреЗ рд▓рд┐рдП рднреА рдЕрдкрд╡реЛрдЯрд┐рдВрдЧред

:+1: рдмрд╣реБрдд рдЬрд░реВрд░реА

+1

рдореИрдВ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдФрд░ рдкреАрдпрд░рдЬ рдХреЛ рдиреЛрдб.рдЬреЗрдПрд╕ рдкрд░ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛

рдЦрд┐рдбрд╝рдХреА = {};
window.BlobBuilder = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмреНрд▓реЙрдмрдмрд┐рд▓реНрдбрд░");
рд╕реНрдерд╛рди = {};
рд╕реНрдерд╛рди.рдкреНрд░реЛрдЯреЛрдХреЙрд▓ = "http";

рдмрд╛рдЗрдирд░реАрдкреИрдХ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмрд╛рдЗрдирд░реА-рдкреИрдХ");
XMLHttpRequest = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("xmlhttprequest")ред XMLHttpRequest;

var wrtc = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("wrtc");
RTCPeerConnection = wrtc.RTCPeerConnection;
RTCSessionDescription = wrtc.RTCSessionDescription;
RTCIceCandidate = wrtc.RTCIceCandidate;

рд╡реЗрдмрд╕рд╛рдХреЗрдЯ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдбрдмреНрд▓реНрдпреВрдПрд╕');
рд╡рд░ рдкреАрдпрд░ рдХреНрд▓рд╛рдЗрдВрдЯ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("./peer.js");

рдореИрдВ рдкреАрдпрд░рдЬ рдХреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдлреЙрд▓реЛ рдПрд░рд░ рдорд┐рд▓рддрд╛ рд╣реИ

[рддреНрд░реБрдЯрд┐: рдХрдиреЗрдХреНрд╢рди рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ open рдШрдЯрдирд╛ рд╕реБрдирдиреА рдЪрд╛рд╣рд┐рдПред]

рдпрд╣рд╛рдБ рдкреВрд░рд╛ рд╕рд╛рд░ рд╣реИ

https://gist.github.com/piyushranjan/1204bc579b7c1f5a3e84

рдФрд░ рдпреЗ npm рд╕рдВрдХреБрд▓ рд╕рдВрд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП

npm рдмреНрд▓реЙрдмрдмрд┐рд▓реНрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm рдмрд╛рдЗрдирд░реА-рдкреИрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm ws . рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm xmlhttprequest рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm wrtc . рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдЖрд╣, рдпрд╣ рд╡рд╛рдХрдИ рдХрдорд╛рд▓ рд╣реИ! рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗ :)ред

рдорд┐рд╢реЗрд▓

рдордВрдЧрд▓рд╡рд╛рд░, 6 рдордИ, 2014 рдХреЛ рд╕реБрдмрд╣ 7:37 рдмрдЬреЗ, рдкреАрдпреВрд╖ рд░рдВрдЬрди рдиреЗ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рд▓рд┐рдЦрд╛:

рдореИрдВ рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдордЬрд╝рд╛рдХ рдЙрдбрд╝рд╛рдиреЗ рдФрд░ рдкреАрдпрд░рдЬ рдХреЛ рдиреЛрдб.рдЬреЗрдПрд╕ рдкрд░ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛

рдЦрд┐рдбрд╝рдХреА = {};
window.BlobBuilder = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмреНрд▓реЙрдмрдмрд┐рд▓реНрдбрд░");
рд╕реНрдерд╛рди = {};
рд╕реНрдерд╛рди.рдкреНрд░реЛрдЯреЛрдХреЙрд▓ = "http";

рдмрд╛рдЗрдирд░реАрдкреИрдХ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмрд╛рдЗрдирд░реА-рдкреИрдХ");
XMLHttpRequest = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("xmlhttprequest")ред XMLHttpRequest;

var wrtc = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("wrtc");
RTCPeerConnection = wrtc.RTCPeerConnection;
RTCSessionDescription = wrtc.RTCSessionDescription;
RTCIceCandidate = wrtc.RTCIceCandidate;

рд╡реЗрдмрд╕рд╛рдХреЗрдЯ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдбрдмреНрд▓реНрдпреВрдПрд╕');
рд╡рд░ рдкреАрдпрд░ рдХреНрд▓рд╛рдЗрдВрдЯ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("./peer.js");

рдореИрдВ рдкреАрдпрд░рдЬ рдХреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдлреЙрд▓реЛ рдПрд░рд░ рдорд┐рд▓рддрд╛ рд╣реИ

[рддреНрд░реБрдЯрд┐: рдХрдиреЗрдХреНрд╢рди рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдЦреБрд▓реА рдШрдЯрдирд╛ рд╕реБрдирдиреА рдЪрд╛рд╣рд┐рдП
рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред]

рдпрд╣рд╛рдБ рдкреВрд░рд╛ рд╕рд╛рд░ рд╣реИ

https://gist.github.com/piyushranjan/1204bc579b7c1f5a3e84

рдФрд░ рдпреЗ npm рд╕рдВрдХреБрд▓ рд╕рдВрд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП

npm рдмреНрд▓реЙрдмрдмрд┐рд▓реНрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm рдмрд╛рдЗрдирд░реА-рдкреИрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm ws . рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm xmlhttprequest рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm wrtc . рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHub рдкрд░ рджреЗрдЦреЗрдВhttps://github.com/peers/peerjs/issues/103#issuecomment -42292282
.

@ рдорд┐рд╢реЗрд▓ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдИ рднрд╛рдЧреНрдп? рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢ рдХрднреА рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред

:+1: рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП

:+1: рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП

:+1:

:+1::+1::+1:

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХреА рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИ? рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдпрд╣ рд╕рдорд░реНрдерд┐рдд рдерд╛?

рдкреАрдпрд░рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдореБрдЭреЗ рд╡рд┐рдВрдбреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрдХ рдЙрдЪрд┐рдд рдЖрдкрддреНрддрд┐ рд╣реИред
https://www.npmjs.org/package/peerjs#readme

рддреЛ рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ: рдХреНрдпрд╛ рдХреБрдЫ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдпрд╣ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛! ;)

рдпрд╣ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╣реИ :)ред

рдорд┐рд╢реЗрд▓

рдЧреБрд░реБ, 23 рдЕрдХреНрдЯреВрдмрд░ 2014 рдХреЛ рдкреВрд░реНрд╡рд╛рд╣реНрди 11:37 рдмрдЬреЗ, рд▓рд┐рдХреНрд╕рд┐рд╕рд┐рдорд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдкреАрдпрд░рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВ
рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдЦрд┐рдбрд╝рдХреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдПрдХ рдЙрдЪрд┐рдд рдЖрдкрддреНрддрд┐ рд╣реИред
https://www.npmjs.org/package/peerjs#readme

рддреЛ рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ: рдХреНрдпрд╛ рдХреБрдЫ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рд╣реЛрдирд╛ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реЛрдЧрд╛
рдпрд╣! ;)

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/peers/peerjs/issues/103#issuecomment -60287567ред

рддреЛ рдЗрд╕реЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдиреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреАрдпрд░рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рд╣реЛрдирд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рдЕрдЧрд░ рдкреАрдпрд░рдЬ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмреЛрд╡рд░ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреА рдмрд╛рдд рд╣реИред

рдорд┐рд╢реЗрд▓

рдЧреБрд░реБ, 23 рдЕрдХреНрдЯреВрдмрд░ 2014 рдХреЛ рдкреВрд░реНрд╡рд╛рд╣реНрди 11:51 рдмрдЬреЗ, рдПрд▓рди рдЪреБрд╕реБрдИ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рд╕рд┐рд░реНрдл рдиреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ
рдкреАрдпрд░рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓, рдЕрдЧрд░ рдкреАрд░реНрдЬ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдмреНрд░рд╛рдЙрдЬрд╝рд░?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/peers/peerjs/issues/103#issuecomment -60289790ред

@AChusuei рдореБрдЭреЗ рдПрдирдкреАрдПрдо, рдпрд╛ рдЖрдЗрд╕реЛрдореЛрд░реНрдлрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░рдЦрдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИред рдореЗрд░реЗ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ JS рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреЗрд╡рд▓ npm рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрд╕рдВрдж рд╣реИ, рди рдХрд┐ npm рд╕реЗ рдЖрдзреЗ Iibraries рдФрд░ рджреВрд╕рд░реЗ рдЖрдзреЗ рдХреЛ рдмреЛрд╡рд░ рд╕реЗ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред

@michelle рдореБрдЭреЗ рд╡рд╛рдХрдИ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреАрдпрд░рдЬ рдХреЛ рдиреЛрдб.рдЬреЗрдПрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдорд┐рд▓реЗрдЧрд╛ !!

@josdejong , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЕрднреА рднреА рдиреЛрдб рджреБрдирд┐рдпрд╛ рдореЗрдВ рдирдпрд╛ рд╣реВрдБ, рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдБ!

:+1:

рдЬрдм рддрдХ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛, рддрдм рддрдХ рд╣реЗрдбрд▓реЗрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ:

  • phantom.js -> рдЪрд╛рд▓ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрднреА webrtc рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
  • xvfb рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░реЛрдо рдмреВрдЯ рдХрд░рдирд╛, рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рджреЗрдЦреЗрдВ: https://blog.andyet.com/2014/09/29/testing-webrtc-applications

рдореИрдВ рджреВрд╕рд░реЗ рдХреЛ рдПрдХ рдХреЛрд╢рд┐рд╢ рджреВрдВрдЧрд╛ред

:+1:

рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП +2^56!

:+1:

:+1:

:+1:

+1

@piyushranjan рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИрдХ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдХреБрдЫ рднреА рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИрдВ)ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдордХрд╛рдЬ рдЧреИрд░ "рд╕рдВрдХрд▓рд┐рдд"/рд╕рдорд╡рд░реНрддреА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд░реЗрдВ:

window = global;
location = {protocol: 'http'};

XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

var wrtc = require("wrtc");
RTCPeerConnection = wrtc.RTCPeerConnection;
RTCSessionDescription = wrtc.RTCSessionDescription;
RTCIceCandidate = wrtc.RTCIceCandidate;

WebSocket = require('ws');

require('./peerjs/lib/exports.js');

var peer = new Peer({
  // snip...
});

рдиреАрдЪреЗ рдХреЗ рдкрд╛рд╕ require рд▓рд╛рдЗрди рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ global / window рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рд╕рдВрднрд╛рд▓рддреА рд╣реИред

рдЕрднреА рднреА рдПрдХ рдмреБрд░рд╛ рд╣реИрдХ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдиреЛрдЯ: рд╡рд╣реА рдЪреЗрддрд╛рд╡рдиреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рдЖрдкрдХреЛ рдЕрднреА рднреА рдкрд╣рд▓реЗ рдХреБрдЫ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

npm install BlobBuilder binary-pack ws xmlhttprequest wrtc

@lewi рд╕реАрдЬрди рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ?

рдореИрдВ рдЕрдм рддрдХ рдЗрд╕рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдбреЗрдЯрд╛ рдЪреИрдирд▓ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рдпрд╣реА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ:

  1. рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди

sudo apt-get install libnss3-dev libexpat1-dev npm install peerjs BlobBuilder binary-pack ws xmlhttprequest wrtc

  1. рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреАрдпрд░ рдХреЛ рдЖрдИрдбреА 'peer1' рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдПрдХ html рдлрд╝рд╛рдЗрд▓ рдкреАрд░1.рдПрдЪрдЯреАрдПрдордПрд▓ рдмрдирд╛рдПрдВ:

``` рдПрдЪрдЯреАрдПрдордПрд▓



рд╕рд╣рдХрд░реНрдореА1



```
  1. рдПрдХ рдиреЛрдб.рдЬреЗрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ рдкреАрд░3.рдЬреЗрдПрд╕ :

``` рдЬреЗрдПрд╕
рдЦрд┐рдбрд╝рдХреА = рд╡реИрд╢реНрд╡рд┐рдХ;
window.BlobBuilder = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмреНрд▓реЙрдмрдмрд┐рд▓реНрдбрд░");
рд╕реНрдерд╛рди = {рдкреНрд░реЛрдЯреЛрдХреЙрд▓: 'http'};

рдмрд╛рдЗрдирд░реАрдкреИрдХ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмрд╛рдЗрдирд░реА-рдкреИрдХ");
XMLHttpRequest = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("xmlhttprequest")ред XMLHttpRequest;

var wrtc = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("wrtc");
RTCPeerConnection = wrtc.RTCPeerConnection;
RTCSessionDescription = wrtc.RTCSessionDescription;
RTCIceCandidate = wrtc.RTCIceCandidate;

рд╡реЗрдмрд╕рд╛рдХреЗрдЯ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдбрдмреНрд▓реНрдпреВрдПрд╕');

рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдкреАрдпрд░рдЬ/рд▓рд┐рдм/рдПрдХреНрд╕рдкреЛрд░реНрдЯреНрд╕.рдЬреЗрдПрд╕');

рд╡рд░ рдкреАрдпрд░ = рдирдпрд╛ рдкреАрдпрд░ ('рдкреАрдпрд░ 3', {рдХреБрдВрдЬреА: 'lwjd5qra8257b9', рдбрд┐рдмрдЧ: рд╕рдЪ});

рдкреАрдпрд░.рдСрди ('рдУрдкрди', рдлрдВрдХреНрд╢рди () {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдкреАрдпрд░ рдУрдкрди');
рд╡рд░ рдХреЙрди = рдкреАрдпрд░.рдХрдиреЗрдХреНрдЯ ('рдкреАрдпрд░ 1');

 conn.on('data', function(data) {
   console.log('Received', data);
 });

 conn.on('error', function (err) {
   console.log('Error', err);
 });

 conn.on('open', function () {
   console.log('connection open');
   conn.send('Hello from ' + peer.id + '!');
 });

});
```

  1. рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреАрд░1.рдПрдЪрдЯреАрдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ
  2. рдиреЛрдб.рдЬреЗрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ

рдбреАрдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреАрдпрд░ 3 рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреАрдпрд░ 1 рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдбреЗрдЯрд╛ рдЪреИрдирд▓ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдкреАрдпрд░ 1 "рдкреАрдпрд░ 3 рд╕реЗ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди" рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рджреВрд░ рдирд╣реАрдВ рдЧрдпрд╛ - рдлреНрд░реЗрдВрдХрд╕реНрдЯреАрди рдХреЛ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдорд╛рдлрд╝ рдХрд░рдирд╛ :(

:+1:

:+1:

рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?

@josdejong рдореБрджреНрджрд╛ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡/рдЙрддреНрддрд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ STUN рдбреЗрдЯрд╛ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдиреЛрдб рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдмрдирд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреАрдпрд░рдЬ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ред

https://github.com/cjb/serverless-webrtc

+1

+1

рдХреЛрдИ рдЗрдирд╛рдо рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ?

рдЪреВрдВрдХрд┐ рдпрд╣ рджреЛ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЦреБрд▓рд╛ рд╣реИ: рдХреНрдпрд╛ рдХреЛрдИ (рдЕрдиреНрдп) рдЬреНрдЮрд╛рдд рдкреИрдХреЗрдЬ рд╣реИ рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдиреЛрдб рдореЗрдВ рдкреА2рдкреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди https://github.com/feross/simple-peer рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдб.рдЬреЗрдПрд╕ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдпрд╣реА рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ? https://github.com/socketio/socket.io-p2p

рд░реАрдбрдореА рд╕реЗ:

"рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдШрдЯрдирд╛рдУрдВ (рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ-рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

Socket.IO рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдлреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ WebRTC PeerConnection рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред"

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдпрд╣ Node. рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред

рд╣рдореНрдоред рдХреНрдпрд╛ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдПрдВрдЧреЗ? рдореИрдВ рдЕрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рддрдм рдПрдХ рджреВрд╕рд░реЗ рдФрд░/рдпрд╛ рдиреЛрдб рд╕рд░реНрд╡рд░ рдХреА рдорд╢реАрди рд╕реЗ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдерд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреЛрдб рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛ рддрдм рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ webRTC рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ

рддреЛ, рдЖрдк рдЗрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ _not_ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдРрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ _other_ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЖрдк рдиреЛрдб рдРрдкреНрд╕ рд╣реЛрдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдпрджрд┐ рд╡реЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреА рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╕реЗрдЯ рдЕрдк рдХрд░рддреЗ рд╣реИрдВ)ред
рдпрд╣ рдереНрд░реЗрдб рдПрдХ рдиреЛрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдкреАрдпрд░ (рдХреНрд▓рд╛рдЗрдВрдЯ) рдХреЗ рд░реВрдк рдореЗрдВ рдкреАрдпрд░рдЬ (рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдФрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред

рдПрдХ рджреВрд╕рд░реЗ рдФрд░/рдпрд╛ рдиреЛрдб рд╕рд░реНрд╡рд░ рдХреА рдорд╢реАрди рд╕реЗ webRTC рдХрдиреЗрдХреНрд╢рди

рдЗрд╕рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдБ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдирд╣реАрдВ, рд╕рдорд╕реНрдпрд╛ NodeJS рдХреЛ WebRTC рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реА рд╣реИред рдЕрд░реНрдерд╛рддред рдПрдХ NodeJS рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдЬреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рд╣реЛред

рдУрд╣, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рд╕рд┐рдВрдкрд▓рдкреАрдпрд░ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреА рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд webrtc рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╢реАрдиреЛрдВ рдкрд░ 'wrtc' рдореЙрдбреНрдпреВрд▓ рдЗрд╕реЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЕрднреА _not_, рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ (рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ!)

рдЙрдирдХреЗ readme.md рд╕реЗ рд╕реНрдирд┐рдкреЗрдЯ:

рдиреЛрдб рдореЗрдВ

рдиреЛрдб рдореЗрдВ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ opts.wrtc рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ:

var SimplePeer = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рд╕рд░рд▓-рд╕рд╣рдХрд░реНрдореА')
var wrtc = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('wrtc')

рд╡рд░ рдкреАрдпрд░1 = рдирдпрд╛ рд╕рд░рд▓ рдкреАрдпрд░ ({рдЖрд░рдВрднрдХрд░реНрддрд╛: рд╕рдЪ, wrtc: wrtc})
рд╡рд░ рдкреАрдпрд░ 2 = рдирдпрд╛ рд╕рд░рд▓ рдкреАрдпрд░ ({wrtc: wrtc})

+1 рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреА

рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-webrtc, рдпрд╛ webrtc-рдореВрд▓ рджреЗрдЦреЗрдВред рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдиреЛрдб.рдЬреЗрдПрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд▓рд┐рдП рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)

рдЕрд╡рд▓реЛрдХрди
рдирдорд╕реНрддреЗ, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЕрдкрдиреА рдереАрд╕рд┐рд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдХреБрдЫ рдХрджрдо рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрдИ рдЪреАрдЬреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рд╕рд╛рдзрд╛рд░рдг рд╕рд╣рдХрд░реНрдореА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред рдбреЗрдЯрд╛рдЪреИрдирд▓ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ (рдиреЛрдбрдЬреЗрд╕ рдкреАрдпрд░рдЬреНрд╕ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА) - рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ 2 (рдПрдЖрд░рдПрдо, рд░рд╛рд╕реНрдкрд┐рдпрди рдЬреЗрд╕реА, рд▓реЗрдХрд┐рди рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП) рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рддреИрдирд╛рдд рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рд╕рд░реНрд╡рд░ (рдкреАрдпрд░рд╕рд░реНрд╡рд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рджреВрд╕рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд┐рдВрдбреЛрдЬрд╝ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдПрдХ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд┐рдирд╛ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдмрдирд╛ рдкрд╛рддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдореБрджрд╛рдп рдХреЛ рд╡рд╛рдкрд╕ рджреЗ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдХрд░реЗрдВ (рдирд╣реАрдВ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рддреЗрдВ:
рд╕реЗрд▓реЗрдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддреЗрдЬрд╝ рдирд╣реАрдВ рд╣реИ
-xvfb рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рдареАрдХ рд╣реИ рдЗрд╕рдиреЗ рдХрд┐рдпрд╛
-рдЖрдкрдХреЛ рдкреАрдпрд░рдЬ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
- рдХрдо рд╕реЗ рдХрдо рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд░ - рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ wrtc рд╡реИрд╕реЗ рднреА рд╣рд╛рде рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ
рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ

рд╕рдм рдХреБрдЫ рд╕реНрд╡рдпрдВ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:
рдЦрд┐рдбрд╝рдХреА = рд╡реИрд╢реНрд╡рд┐рдХ
window.BlobBuilder = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмреНрд▓реЙрдмрдмрд┐рд▓реНрдбрд░")
рд╕реНрдерд╛рди = {рдкреНрд░реЛрдЯреЛрдХреЙрд▓: 'http'}

рдмрд╛рдЗрдирд░реАрдкреИрдХ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("рдмрд╛рдЗрдирд░реА-рдкреИрдХ")
XMLHttpRequest = рдЖрд╡рд╢реНрдпрдХрддрд╛ ("xmlhttprequest")ред XMLHttpRequest;
var wrtc = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди-webrtc') ()
// рд╡рд░ рдкреАрд░ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдкреАрд░рдЬ')

RTCPeerConnection = wrtc.RTCPeerConnection;
RTCSessionDescription = wrtc.RTCSessionDescription;
RTCIceCandidate = wrtc.RTCIceCandidate;

рд╡реЗрдмрд╕рд╛рдХреЗрдЯ = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдбрдмреНрд▓реНрдпреВрдПрд╕')
рдЖрд╡рд╢реНрдпрдХрддрд╛ ('/ рд╣реЛрдо/рдкреАрдЖрдИ/рдиреЛрдб_рдореЙрдбреНрдпреВрд▓/рдкреАрдпрд░рдЬ/lib/exports.js');

рд╡рд░ рдкреАрдпрд░ = рдирдпрд╛ рдкреАрдпрд░ (
...
})

var conn=peer.connect('id')
conn.serialization = 'рдХреЛрдИ рдирд╣реАрдВ'
conn.send ('рдиреЛрдбрдЬ рд╕реЗ рдирдорд╕реНрддреЗ!')

рдпрд╣реА рд╣реИ, рд╕рд╛рджрд░, рдЬреЗрдкреА

рд╣рд╛рдп @ рдЬреЗрд░реАрдлрд╛рд╕реНрдЯ , рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛

рдореИрдВ рдЗрд╕реЗ рдореИрдХ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ (рдЕрднреА рддрдХ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд░ рдирд╣реАрдВ) рдФрд░ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рдереА "рдЖрд░рдЯреАрд╕реАрдбрд╛рдЯрд╛ рдЪреИрдирд▓' рдкрд░ 'рдмрд╛рдЗрдирд░реА рдЯрд╛рдЗрдк' рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓: рдмреНрд▓реЙрдм рд╕рдорд░реНрдерди рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдЖ"

рдХреБрдЫ рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдмрд░реНрддрдиреЛрдВ рдкрд░, рдкрде рдкрд░ node_modules/peerjs/lib рд▓рд╛рдЗрди 116 рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд╛рдпрд╛ рдЧрдпрд╛:

try {
        dc.binaryType = 'blob';
        binaryBlob = true;
      } catch (e) {
      }

рдЬреЛ рддреНрд░реБрдЯрд┐ рдФрд░ рдРрдк рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рдРрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рд╕реБрдВрджрд░ред рд▓реЗрдХрд┐рди рдПрдХ рдЧрдВрджрд╛ рд╣реИрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░" рдХрд░рдиреЗ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ рдЬреЛ lib рд╕реЗ рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рддрд╛, рд▓реЗрдХрд┐рди рдЕрдм рддрдХ рдореБрдЭреЗ рдХреЛрдИ рдирд╣реАрдВ рдорд┐рд▓рд╛ред

рдЪреБрдиреМрддреА рддрдм рд░рд╣рддреА рд╣реИ рдЬрдм рдХреЛрдб рдХреЗ рдЙрд╕ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдирд┐рд░реНрдпрд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

require('./node_modules/peerjs/lib/exports.js');

рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдпрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ?

рд╕рд╛рджрд░

рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрджрд┐ рдЖрдк 'рдХреЛрдИ рдирд╣реАрдВ' рдХреНрд░рдорд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓реЗ рдмрд┐рдирд╛ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рд╛рджрд░

рд╣рд╛рдп рдлрд┐рд░ рд╕реЗ @jeryfast рдпрд╣ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ред рдореЗрд░реА рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдХрд╛ рдореБрджреНрджрд╛ OS X рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо

рдирд╣реАрдВ рдЪрд▓реЛ рдордЬрд╝рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рдирдорд╕реНрддреЗ
рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред
```
Global.postMessage (рд╕рдВрджреЗрд╢рдирд╛рдо, '*');
^

рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: Global.postMessage рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ
Object.setZeroTimeoutPostMessage рдкрд░ [setZeroTimeout рдХреЗ рд░реВрдк рдореЗрдВ] (

@crosogf , рд╡рд╣ рддреНрд░реБрдЯрд┐ рдореБрдЭреЗ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рдХреНрд╖рдг рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯрдореИрд╕реЗрдЬ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рддреНрд░реБрдЯрд┐-рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ lib/util.js рдореЗрдВ рдмрд╛рдЗрдирд░реА рдмреНрд▓реЙрдм рд╕рдкреЛрд░реНрдЯ рдбрд┐рдЯреЗрдХреНрд╢рди рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ (рдХреЛрдб @ nuno-nlfsoftware рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ)ред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреЛрдб рджреЛ рдЬрдЧрд╣реЛрдВ рдкрд░ рдореМрдЬреВрдж рд╣реИ, dist/peer.js рдпрд╛ dist/peer.min.js рдореЗрдВ рдФрд░ lib/util.js рдореЗрдВред рдореЗрд░реЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдмрд╛рдж рд╡рд╛рд▓реЗ рд╕рдВрд╢реЛрдзрди рд╣реА рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдереЗ ( @jeryfast рдХреА рд╣реИрдХ рдХреЗ рдХрд╛рд░рдг lib/exports.js рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред

рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдБ https://www.npmjs.com/package/peerjs-nodejs

рд╕рд╛рде рд╣реА, рдХрдиреЗрдХреНрд╢рди рдХреНрд░рдорд╛рдВрдХрди рдХреЛ none рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк binary рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдЗрдирд░реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ json рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдБ https://www.npmjs.com/package/peerjs-nodejs

рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреАрдпрд░рдЬреЗрдПрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж рдореЗрд░рд╛ рдХреЛрдб рд╣реИ jeryfast рдФрд░ peerjs-nodejs

const peerJs = require('peerjs-nodejs');
const peer = peerJs("myPeerId", {
host: '192.168.137.231',
port: 9000,
pingInterval: 5000,
path: '/myapp',
debug: 3, 
iceTransportPolicy: 'relay',
config: {
'iceServers': [
    { urls: "stun:stun.l.google.com:19302" },
    {
        urls: "turn:34.192.149.24:5678?transport=udp",
        username: "USER", credential: "PASS"
    }
]
}
});

let conn = peer.connect('myPeerJS', {
    reliable: true
});


setTimeout(()=>{
 // NOT JSON
 // conn.serialization='none';
 // conn.send('hello from nodejs!');  

 // JSON WAY
 conn.serialization = 'json';
 conn.send({ value: 'hello from nodejs!' });

}, 3000);

setTimeout(()=>{
  conn.close();
  console.log("CONN CLOSE");
  process.exit();
}, 10000);

рд╣реИрд▓реЛ, рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рдЬреИрд╕реЗ рд╣реА рдореИрдВ NodeJS рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдкреАрдпрд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕ ( peerjs-nodejs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдмрдирд╛рддрд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕ рд╕рдордп рдХрд┐рд╕реА рджреВрд░рд╕реНрде рдкреАрдпрд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рднреА рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ?

рд╕рд░реНрд╡рд░.рдЬреЗрдПрд╕

const Peer = require('peerjs-nodejs')

...

this.peer = Peer('webRTC-webinar-plugin', {
      host: '/',
      path: 'peer-js',
      port: (useHTTPS) ? 8443 : 8080,
      secure: (useHTTPS) ? true : false
})
/Users/federico/Documents/webRTC-webinar-plugin/node_modules/peerjs-nodejs/node_modules/peerjs/lib/util.js:234

      global.postMessage(messageName, '*');
             ^
TypeError: global.postMessage is not a function
    at Object.setZeroTimeoutPostMessage [as setZeroTimeout] (/Users/federico/Documents/webRTC-webinar-plugin/node_modules/peerjs-nodejs/node_modules/peerjs/lib/util.js:234:14)
    at Peer.disconnect (/Users/federico/Documents/webRTC-webinar-plugin/node_modules/peerjs-nodejs/node_modules/peerjs/lib/peer.js:420:8)
    at Socket.<anonymous> (/Users/federico/Documents/webRTC-webinar-plugin/node_modules/peerjs-nodejs/node_modules/peerjs/lib/peer.js:120:12)
    at Socket.emit (/Users/federico/Documents/webRTC-webinar-plugin/node_modules/peerjs-nodejs/node_modules/eventemitter3/index.js:71:35)
    at exports.XMLHttpRequest._http.onerror (/Users/federico/Documents/webRTC-webinar-plugin/node_modules/peerjs-nodejs/node_modules/peerjs/lib/socket.js:91:12)
    at exports.XMLHttpRequest.dispatchEvent (/Users/federico/Documents/webRTC-webinar-plugin/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:591:25)
    at exports.XMLHttpRequest.handleError (/Users/federico/Documents/webRTC-webinar-plugin/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:533:10)
    at ClientRequest.errorHandler (/Users/federico/Documents/webRTC-webinar-plugin/node_modules/xmlhttprequest/lib/XMLHttpRequest.js:459:14)
    at ClientRequest.emit (events.js:310:20)
    at Socket.socketErrorListener (_http_client.js:426:9)

рдХреНрдпрд╛ рдХреЛрдИ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

geraldsamosir picture geraldsamosir  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

maxpavlov picture maxpavlov  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

veezo2007pk picture veezo2007pk  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jameshfisher picture jameshfisher  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kidandcat picture kidandcat  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ