WebRTC - рдФрд░ рднреА рдЖрд╕рд╛рди (EasyRTC)

рдореИрдВ рдЕрднреА рддрдХ рд╕рд┐рдЧреНрдирд▓ рд╕рд░реНрд╡рд░ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ рд╣реВрдВ рдЬрдм рдПрдХ рдорд▓реНрдЯреА-рдпреВрдЬрд░ рдЪреИрдЯ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рддреИрдпрд╛рд░ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХрд░ рджреАред рд╕рдм рд╕реЗ рдЖрд╕рд╛рди рдореБрдЭреЗ EasyRTC рд▓рдЧ рд░рд╣рд╛ рдерд╛ред

рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рджреЛрдиреЛрдВ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдкрд░:
1. рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ Node.js. рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
2. рдЬреАрдердм рд╕реЗ, рд╣рдо рдЖрд╕рд╛рди рдЖрд░рдЖрд░рдЯреАрд╕реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВред
3. рд╣рдо рдХрдВрд╕реЛрд▓ npm рд╕реНрдерд╛рдкрд┐рдд рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ (рдореИрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП easyRTC рдлрд╝реЛрд▓реНрдбрд░ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ) Node.js рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ
4. рд╡рд╣рд╛рдБ рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рд░реНрд╡рд░ рднреА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ: рдиреЛрдб server.jsред
рд╕рднреА !!! рдЕрдм, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдХреЗ 8080 рдХреЗ рд╕рдордп, easyRTC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдкрдиреА рдЪреИрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкреГрд╖реНрда рдкрд░ socket.io.js рдФрд░ easyrtc.js рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдм nginx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ "рдкреНрд░реЙрдХреНрд╕реА" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
 рдЕрдкрд╕реНрдЯреНрд░реАрдо backendEasyRTC {
		 рд╕рд░реНрд╡рд░ 127.0.0.1:9080;
     }
 рд╕рд░реНрд╡рд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ:
 рд╕реНрдерд╛рди /socket.io {
                        #proxy_pass http: // 127.0.0.1:9080;
			 рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕ http: // backendEasyRTC;
			 рдкреНрд░реЙрдХреНрд╕реА_рд╣реЗрдЯрдк_рд╡реЙрд╕ 1.1;
			 xy_set_header рдЕрдкрдЧреНрд░реЗрдб $ http_upgrad;
			 рдкреНрд░реЙрдХреНрд╕реА_рд╕реЗрдЯ_рд╣рд╛рдЗрдбрд░ рдХрдиреЗрдХреНрд╢рди "рдЕрдкрдЧреНрд░реЗрдб";
			 xy_set_header рд╣реЛрд╕реНрдЯ $ рд╣реЛрд╕реНрдЯ;
         }

Socket.io.js рдФрд░ easyrtc.js (рдЬреЛ рдПрдкреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ) рдХреНрд░рдорд╢рдГ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред

рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ easyRTC рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

Easyrtc.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, easyRTC.webSocket рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ:
 easyRTC.webSocket = io.connect ('http: // your server');

рдФрд░ config.js рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ (рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд┐рдд) рдореЗрд░реЗ рдорд╛рдирдХ 9080 рдореЗрдВ, рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреЛрд░реНрдЯ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ:
 config.httpPort = 9080;


рдЕрдкрдиреЗ рдкреГрд╖реНрда рдкрд░, рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
 <script src = "/ socket.io/socket.io.js"> </ script>
 <script type = "text / javascript" src = "/ static / js / easyrtc.js"> / / />


рд╡рд┐рдбрд┐рдпреЛ рдЯреИрдЧреНрд╕ рджреЗрдВ:
рджреВрд░рд╕реНрде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП
 <рд╡реАрдбрд┐рдпреЛ рдСрдЯреЛрдкреНрд▓реЗ = "рдСрдЯреЛрдкреНрд▓реЗ" рдЖрдИрдбреА = "RemoteVideo1"> </ рд╡реАрдбрд┐рдпреЛ>
 <рд╡реАрдбрд┐рдпреЛ рдСрдЯреЛрдкреНрд▓реЗ = "рдСрдЯреЛрдкреНрд▓реЗ" рдЖрдИрдбреА = "RemoteVideo2"> </ рд╡реАрдбрд┐рдпреЛ>

рдФрд░ рдЦреБрдж рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
 <video autoplay = "autoplay" id = "localVideo" рдореМрди = "рдореМрди" рдЖрдпрддрди = "0"> </ рд╡реАрдбрд┐рдпреЛ>


рд╣рдо рдкреГрд╖реНрда рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ easyRTC рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
 var maxCALLERS = 3;  // рдХрдорд░реЗ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
 window.onload - function () {
   easyRTC.setLoggedInListener (callEverybodyElse);  // рдЬрдм рдПрдХ рдирдИ рдзрд╛рд░рд╛ webrtc рд╣реЛрддреА рд╣реИ
   easyRTC.initManaged ("myroom", "localVideo", ["RemoteVideo1", "RemoteVideo2], loginSuccess);
 // myroom - рдЙрд╕ рдХрдорд░реЗ рдХрд╛ рдирд╛рдо рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрдВрдЧреЗ
 // localVideo - рдЖрдкрдХрд╛ рд╡реАрдбрд┐рдпреЛ
  // ["RemoteVideo1", "RemoteVideo2] - рдЬрд╣рд╛рдВ рджреВрд░рджрд░рд╛рдЬ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред 
 // loginSuccess - рдЗрд╕рдореЗрдВ рдЖрдк рдЕрдкрдиреА рд╕реНрдЯреНрд░реАрдо рдЖрдИрдбреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ
 }

 рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ рдЕрд╕рдлрд▓ (easyRTCId) {
     рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдореЗрд░реА рдЖрдИрдбреА' + easyRTCId);  // рдЖрдЧреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ
 }

 рд╕рдорд╛рд░реЛрд╣ callEverybodyElse (рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ) {
             easyRTC.setLoggedInListener (рдирд▓); 
             var рд╕реВрдЪреА = []; 
             var ConnectCount = 0;
    
             рдХреЗ рд▓рд┐рдП (var рдореИрдВ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдореЗрдВ) { 
                 list.push (i);
             }
     // рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдирдИ рд╕реНрдЯреНрд░реАрдо рд╕рд░рдгреА рдореЗрдВ рдЕрдВрддрд┐рдо рд╣реИ
             рд╕рдорд╛рд░реЛрд╣ рд╕реНрдерд╛рдкрдирд╛ (рд╕реНрдерд┐рддрд┐) {
                 рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░реЗрдВ рдЕрд╕рдлрд▓ () {
                     рдХрдиреЗрдХреНрдЯрдХрд╛рдЙрдВрдЯ ++;
                     рдЕрдЧрд░ (рдХрдиреЗрдХреНрдЯ рдХрдиреЗрдХреНрдЯ <maxCALLERS && рд╕реНрдерд┐рддрд┐> 0) {
                         рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ (рд╕реНрдерд┐рддрд┐ -1);
                     }
                 }
                 рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдлрд╝реЗрд▓реНрдпреЛрд░ () {
                     easyRTC.showError ("CALL-REJECTED", "рдЕрдиреНрдп рдкрд╛рд░реНрдЯреА рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрд╡реАрдХреГрдд");
                     рдЕрдЧрд░ (рдХрдиреЗрдХреНрдЯ рдХрдиреЗрдХреНрдЯ <maxCALLERS && рд╕реНрдерд┐рддрд┐> 0) {
                         рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ (рд╕реНрдерд┐рддрд┐ -1);
                     }            
                 }
                 easyRTC.call (рд╕реВрдЪреА [рд╕реНрдерд┐рддрд┐], callSuccess, callFailure);    
             }
             рдЕрдЧрд░ (рд╕реВрдЪреАред рдЧрддрд┐> 0) { 
                 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ (list.length -1); 
             }
         }


рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЖрдк рдХрдиреЗрдХреНрд╢рди рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 easyRTC.setSocketUrl (": 9088");

рдмрд┐рдЯрд░реЗрдЯ рд╡реАрдбрд┐рдпреЛ:
 easyRTC.setVideoBandwidth (40);

рд╡реАрдбрд┐рдпреЛ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди:
 easyRTC.setVideoDims (320,180);  - рд╡реАрдбрд┐рдпреЛ рд╕рдВрдХрд▓реНрдк

рдпрд╣ рдмрд╣реБ-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪреИрдЯ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, config.js easyrtc.js рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде Github рдФрд░ Google рд╕рдореВрд╣реЛрдВ рдкрд░ рднреАред
рдЕрдВрдд рддрдХ рдкрдврд╝реЗ рддреЛ рдзрдиреНрдпрд╡рд╛рджред

рд╡реЗрдмрд╕рд╛рдЗрдЯ: http://www.easyrtc.com/
рдЧрд┐рдердм: https://github.com/priologic/easyrtc
Google рд╕рдореВрд╣: https://groups.google.com/d/forum/easyrtc

Source: https://habr.com/ru/post/hi436928/


All Articles