WebRTC. බ්රවුසරයේ වීඩියෝ සම්මන්ත්රණ. WebRTC Webrtc හඬ කතාබස් භාවිතයෙන් බහු-පරිශීලක කතාබස්

පූර්විකාව. P2P වීඩියෝ කතාබස්පදනම මත WebRTCස්කයිප් සහ වෙනත් සන්නිවේදන මාධ්‍ය සඳහා විකල්පයක් වේ. p2p වීඩියෝ කතාබස් වල ප්‍රධාන අංග ක්‍රියාත්මකයි WebRTC මත පදනම්වවේ බ්රවුසරයසහ සේවාදායකය සම්බන්ධ කරන්න. P2P වීඩියෝ කතාබස් යනු peer-to-peer වීඩියෝ කතාබස් වන අතර, සේවාදායකය තොරතුරු ප්‍රවාහ සම්ප්‍රේෂණයට සහභාගී නොවේ. කිසිදු අමතර වැඩසටහන් නොමැතිව පරිශීලකයින්ගේ බ්‍රව්සර් (peerings) අතර තොරතුරු කෙලින්ම මාරු කරනු ලැබේ. බ්‍රව්සර් වලට අමතරව, p2p වීඩියෝ කතාබස් පරිශීලකයින් ලියාපදිංචි කිරීමට, ඔවුන් පිළිබඳ දත්ත ගබඩා කිරීමට සහ පරිශීලකයින් අතර මාරුවීම සඳහා නිර්මාණය කර ඇති සම්බන්ධතා සේවාදායකයන් භාවිතා කරයි. නවතම WebRTC සහ HTML5 තාක්ෂණයන් සඳහා සහය දක්වන බ්‍රව්සර් ක්ෂණික කෙටි පණිවිඩ සහ ගොනු සපයන අතර IP ජාල හරහා හඬ සහ වීඩියෝ සන්නිවේදනයද සපයයි.

එබැවින්, කතාබස්, වෙබ් කතාබස්, වෙබ් අතුරු මුහුණතේ හඬ සහ වීඩියෝ කතාබස්, IMS, VoIP යනු පැකට් මාරු කළ සංයුක්ත ජාල හරහා මාර්ගගත සන්නිවේදනයන් සපයන සේවාවන් වේ. රීතියක් ලෙස, සන්නිවේදන සේවා සඳහා පරිශීලක උපාංගවල (පරිගණක, ස්මාර්ට්ෆෝන්, ආදිය) සේවාදායක යෙදුම් ස්ථාපනය කිරීම හෝ බ්‍රවුසරවල ප්ලග් ඉන් සහ දිගු ස්ථාපනය කිරීම අවශ්‍ය වේ. සේවාවන්ට ඔවුන්ගේම සන්නිවේදන ජාල ඇත, ඒවායින් බොහොමයක් "සේවාදායක-සේවාදායක" ගෘහ නිර්මාණ ශිල්පය මත ගොඩනගා ඇත.

සන්නිවේදන සේවා යනු IMS හැර, හඬ, වීඩියෝ, දත්ත සහ පෙළ නාලිකා ඒකාබද්ධ නොවන යෙදුම් වේ. එක් එක් සේවාවේ ජාල තුළ, . මෙම යෙදුම් එකවර සන්නිවේදන ජාල කිහිපයක ක්‍රියා කළ නොහැකි බව සැලකිල්ලට ගත යුතුය, i.e. යෙදුම්, රීතියක් ලෙස, එකිනෙකා සමඟ අන්තර් ක්‍රියා කළ නොහැක, එහි ප්‍රති result ලයක් ලෙස එක් එක් සන්නිවේදන ජාලය සඳහා වෙනම යෙදුමක් ස්ථාපනය කළ යුතුය.

තත්‍ය කාලීන සන්නිවේදන සේවා (කතාබස්, දුරකථන, වීඩියෝ සම්මන්ත්‍රණ) ඒකාබද්ධ කිරීමේ ගැටලුව, i.e. කටහඬ, වීඩියෝ, දත්ත සම්ප්‍රේෂණ නාලිකා ඒකාබද්ධ කිරීම සහ තනි යෙදුමක් (බ්‍රවුසරය) භාවිතයෙන් ඒවාට ප්‍රවේශ වීම සම වයසේ සිට සම වයසේ සිට විසඳිය හැකිය. p2p වීඩියෝ කතාබස්(peer-to-peer, point - to - point) මත පදනම්ව WebRTC ප්‍රොටෝකෝලය. ඇත්ත වශයෙන්ම, WebRTC සඳහා සහය දක්වන බ්‍රව්සරයක් සියලුම පරිශීලක උපාංග සඳහා තනි අතුරු මුහුණතක් බවට පත්වේ (PCs, Smartphones, iPads, IP දුරකථන, ජංගම දුරකථනආදිය) සන්නිවේදන සේවා සමඟ වැඩ කරන.

තත්‍ය කාලීන සන්නිවේදනයන් සපයන සියලුම තාක්ෂණයන් බ්‍රවුසරයේ ක්‍රියාත්මක කිරීම සපයන WebRTC වේ. p2p වීඩියෝ කතාබස් වල සාරය නම් බහුමාධ්‍ය සහ පෙළ දත්ත සේවාදායකයක් සහ අමතර වැඩසටහන් වල සහභාගීත්වයෙන් තොරව පරිශීලකයින්ගේ බ්‍රවුසර (දුරස්ථ peerings) අතර සෘජුවම මාරු කරනු ලැබේ. මේ අනුව, බ්‍රව්සර් සියල්ලම පාහේ ප්‍රවේශය ලබා දෙනවා පමණක් නොවේ තොරතුරු සම්පත්අන්තර්ජාලය, සේවාදායකයන් මත ගබඩා කර ඇති නමුත්, සියලු තත්‍ය කාලීන සන්නිවේදන සේවා සහ තැපැල් සේවා වෙත ප්‍රවේශ වීමේ මාධ්‍යයක් බවට පත් වේ (හඬ තැපෑල, විද්යුත් තැපෑල, SMS, ආදිය)

p2p වීඩියෝ කතාබස් වල සේවාදායකයන් (සම්බන්ධතා සේවාදායකයන්) අදහස් කරන්නේ පරිශීලකයින් ලියාපදිංචි කිරීම, පරිශීලකයින් පිළිබඳ දත්ත ගබඩා කිරීම සහ පරිශීලකයින්ගේ බ්‍රව්සර් අතර සම්බන්ධතාවයක් (මාරු කිරීම) ස්ථාපිත කිරීම සඳහා පමණි. පළමු p2p වීඩියෝ කතාබස් ෆ්ලෑෂ් තාක්ෂණය භාවිතයෙන් ක්රියාත්මක කරන ලදී. ෆ්ලෑෂ් p2p වීඩියෝ කතාබස් භාවිතා වේ, උදාහරණයක් ලෙස, in සමාජ ජාල වල. ෆ්ලෑෂ් p2p වීඩියෝ කතාබස් සපයන්නේ නැත ඉහළ ගුණත්වයබහුමාධ්ය දත්ත සම්ප්රේෂණය. මීට අමතරව, p2p ෆ්ලෑෂ් වීඩියෝ කතාබස් තුළ මයික්‍රොෆෝනයකින් සහ වීඩියෝ කැමරාවකින් හඬ සහ වීඩියෝ ප්‍රවාහය ප්‍රතිදානය කිරීමට, ඔබ ස්ථාපනය කළ යුතුය. ෆ්ලෑෂ් ප්ලගිනයවෙබ් බ්‍රව්සරයකට.

නමුත් ඊළඟ පරම්පරාවේ විදුලි සංදේශ සේවා ඇතුළත් වේ වෙබ් සන්නිවේදන, අන්තර්ජාලය හරහා සන්නිවේදනය සඳහා පමණක් භාවිතා කරන බ්රවුසරසහ සම්බන්ධතා සේවාදායකයන්සහාය දෙනවා WebRTC ප්‍රොටෝකෝලසහ පිරිවිතර HTML5. එවැනි බ්රවුසරයකින් සමන්විත ඕනෑම පරිශීලක උපාංගයක් (PC, iPad, ස්මාර්ට්ෆෝන්, ආදිය) උසස් තත්ත්වයේ හඬ සහ වීඩියෝ ඇමතුම් ලබා දීම මෙන්ම ක්ෂණික කෙටි පණිවුඩ සහ ගොනු මාරු කළ හැකිය.

එබැවින්, වෙබ් සන්නිවේදනයේ නව තාක්ෂණය (p2p කතාබස්, වීඩියෝ කතාබස්) WebRTC ප්රොටෝකෝලය වේ. WebRTC HTML5, CSS3 සහ JavaScript සමඟ එක්ව ඔබට විවිධ වෙබ් යෙදුම් නිර්මාණය කිරීමට ඉඩ සලසයි. WebRT නිර්මාණය කර ඇත්තේ peer-to-peer architecture භාවිතයෙන් තත්‍ය කාලීනව වෙබ් සන්නිවේදනයන් (peer-to-peer networks) සංවිධානය කිරීමටය. WebRTC මත පදනම් වූ P2P කතාබස් මඟින් ගොනු හුවමාරුව මෙන්ම බ්‍රවුසරයේ බාහිර ඇඩෝන සහ ප්ලග්-ඉන් භාවිතයෙන් තොරව වෙබ් බ්‍රවුසර පමණක් භාවිතා කරමින් අන්තර්ජාලය හරහා පරිශීලකයන්ගේ පෙළ, හඬ සහ වීඩියෝ සන්නිවේදනය සපයයි.

p2p කතාබස් වලදී, සේවාදායකය භාවිතා කරන්නේ බ්‍රව්සර් දෙකක් අතර p2p සම්බන්ධතාවයක් ඇති කිරීමට පමණි. WebRTC ප්‍රොටෝකෝලය මත පදනම්ව p2p චැට් එකක සේවාදායක කොටස සෑදීමට, HTML5, CSS3 සහ JavaScript භාවිතා වේ. සේවාදායක යෙදුම WebRTC API හරහා බ්‍රව්සර් සමඟ සන්නිවේදනය කරයි.

WebRTC JavaScript API තුනකින් ක්‍රියාත්මක වේ:

  • RTCPeerConnection;
  • MediaStream(getUserMedia);
  • RTCDataChannel.

බ්‍රව්සර් UDP මත ක්‍රියාත්මක වන SRTP ප්‍රොටෝකෝලය භාවිතයෙන් බහුමාධ්‍ය දත්ත සම්ප්‍රේෂණය කරයි. NAT අන්තර්ජාලය හරහා p2p සම්බන්ධතා භාවිතා කරන NAT රවුටර පිටුපස ඇති බ්‍රව්සර් (සේවාලාභීන්) සඳහා ගැටළු ඇති කරන බැවින්, NAT පරිවර්තකයන් මඟ හැරීමට STUN භාවිතා කරයි. STUN යනු UDP ප්‍රවාහන ප්‍රොටෝකෝලය මත ක්‍රියාත්මක වන සේවාදායක/සේවාදායක ප්‍රොටෝකෝලයකි. p2p කතාබස් වලදී, රීතියක් ලෙස, පොදු STUN සේවාදායකයක් භාවිතා කරන අතර, NAT පිටුපස තිබේ නම්, බ්‍රව්සර් දෙකක් අතර UDP සම්බන්ධතාවයක් සඳහා එයින් ලැබෙන තොරතුරු භාවිතා වේ.

WebRTC යෙදුම් ක්‍රියාත්මක කිරීමේ උදාහරණ (p2p කතාබස්, හඬ සහ වීඩියෝ වෙබ් කතාබස්):
1. WebRTC මත පදනම් වූ Bistri P2P වීඩියෝ කතාබස් (එක්-ක්ලික් වීඩියෝ චැට්, p2p චැට්), Bistri මත විවෘත කළ හැක. අමතර වැඩසටහන් සහ ප්ලග් ඉන් ස්ථාපනය නොකර Bistri බ්‍රවුසරයේ ක්‍රියා කරයි. කාර්යයේ සාරය පහත පරිදි වේ: නිශ්චිත සබැඳිය භාවිතයෙන් p2p වීඩියෝ කතාබස් විවෘත කරන්න, විවෘත වන අතුරු මුහුණතේ ලියාපදිංචි වීමෙන් පසු, හවුල්කරුවන්ට ආරාධනා කරන්න, පසුව සම සේවාලාභීන්ගේ ලැයිස්තුවෙන් සබැඳිව සිටින සහකරු තෝරා "වීඩියෝ ඇමතුම මත ක්ලික් කරන්න. " බොත්තම.

එහි ප්‍රතිඵලයක් ලෙස, MediaStream (getUserMedia) මයික්‍රොෆෝනය + වෙබ් කැමරාව ග්‍රහණය කර ගන්නා අතර, සේවාදායකය විසින් තෝරාගත් සහකරු සමඟ සංඥා පණිවිඩ හුවමාරු කර ගනී. සංඥා පණිවිඩ හුවමාරු වූ පසු, PeerConnection API හඬ සහ වීඩියෝ ප්‍රවාහ සම්ප්‍රේෂණය කිරීම සඳහා නාලිකා නිර්මාණය කරයි. මීට අමතරව, Bistri ක්ෂණික කෙටි පණිවුඩ සහ ගොනු මාරු කිරීම සිදු කරයි. අත්තික්කා මත. රූප සටහන 1 හි Bistri p2p වීඩියෝ කතාබස් අතුරුමුහුණතේ තිර රුවක් පෙන්වයි.


සහල්. 1. P2P වීඩියෝ චැට් බිස්ට්‍රි

2. Twelephone (p2p video chat, p2p chat, SIP Twelephone) යනු HTML5 සහ WebRTC මත පදනම් වූ සේවාදායක යෙදුමකි, එය ඔබට හඬ සහ වීඩියෝ ඇමතුම් ලබා ගැනීමට මෙන්ම ක්ෂණික කෙටි පණිවිඩ යැවීමට ඉඩ සලසයි, i.e. Twelephone වලට test p2p chat, video chat සහ SIP Twelephone ඇතුළත් වේ. Twelephone SIP ප්‍රොටෝකෝලය සඳහා සහය දක්වන බව සටහන් කළ යුතු අතර දැන් ඔබට ඔබගේ Twitter ගිණුම දුරකථන අංකයක් ලෙස භාවිතා කර SIP දුරකථන වලින් හඬ සහ වීඩියෝ ඇමතුම් ලබා ගැනීමට සහ ලබා ගැනීමට හැකිය. ඊට අමතරව, කෙටි පණිවුඩඔබට මයික්‍රෆෝනයක් හරහා කටහඬින් ඇතුළු විය හැකි අතර, හඬ හඳුනාගැනීමේ වැඩසටහන "පණිවිඩයක් යවන්න" පේළියට අකුරු ඇතුල් කරයි.

Twelephone යනු බ්‍රවුසරය පදනම් කරගත් වෙබ් දුරකථනයකි ගූගල් ක්රෝම්, අතිරේක නොමැතිව 25 අනුවාදයෙන් ආරම්භ වේ මෘදුකාංග. Twelephone නිර්මාණය කර ඇත්තේ Chris Mattieu විසිනි. Twelephone හි පිටුපස කෙළවර Node.js මත ගොඩනගා ඇත. සේවාදායකය (සම්බන්ධතා සේවාදායකය) භාවිතා කරනුයේ බ්‍රව්සර් දෙකක් හෝ WebRTC සේවාලාභීන් අතර p2p සම්බන්ධතාවයක් ස්ථාපිත කිරීමට පමණි. Twelephone යෙදුමට තමන්ගේම අවසර මෙවලම් නොමැත, නමුත් ගිණුමකට සම්බන්ධ වීම කෙරෙහි අවධානය යොමු කර ඇත ( ගිණුම) Twitter හි.

අත්තික්කා මත. රූප සටහන 2 හි දැක්වෙන්නේ Twelephone p2p වීඩියෝ කතාබස් අතුරුමුහුණතේ තිර රුවක්.



සහල්. 2.P2P Twinphone

3. සමූහ p2p වීඩියෝ කතාබස් Conversat.io නවතම WebRTC සහ HTML5 තාක්ෂණයන් මත පදනම් වේ. Conversat වීඩියෝ කතාබස් SimpleWebRTC පුස්තකාලය මත පදනම් වන අතර එක කාමරයක සම සේවාලාභීන් 6 දෙනෙකු දක්වා සන්නිවේදනය කිරීමට සැලසුම් කර ඇත (සන්නිවේදනය සඳහා, "සංවාදය නම් කරන්න" රේඛාවේ සම සේවාලාභීන් සඳහා පොදු කාමරයේ නම සඳහන් කරන්න). P2P වීඩියෝ චැට් Conversat සම්බන්ධතා සේවාදායකයේ ලියාපදිංචි නොවී පරිශීලකයින්ට සන්නිවේදන සේවා සපයයි. අත්තික්කා මත. රූප සටහන 3 පෙන්වන්නේ Conversat p2p වීඩියෝ කතාබස් අතුරුමුහුණතේ තිර රුවක්.



සහල්. 3. සමූහ P2P වීඩියෝ කතාබස් Conversat.io

WebRTC-පාදක P2P වීඩියෝ කතාබස් වලට සහභාගී වීමට, පරිශීලකයන් WebRTC ප්‍රොටෝකෝලය සහ HTML5 පිරිවිතර සඳහා සහය දක්වන බ්‍රවුසරයක් ස්ථාපනය කර තිබිය යුතුය. දැනට ගූගල් බ්‍රව්සර් Chrome අනුවාදය 25 සිට, සහ Mozilla Firefox WebRTC ප්‍රොටෝකෝලය සහ HTML5 පිරිවිතර සඳහා රාත්‍රී සහාය දෙන්න. WebRTC යෙදුම් රූප සහ ශබ්ද සම්ප්‍රේෂණ ගුණත්වය අනුව ෆ්ලෑෂ් යෙදුම් වලට වඩා උසස් වේ.

බොහෝ ද්රව්ය මත WebRTCලිවීමේ කේතයේ යෙදුම් මට්ටම කෙරෙහි අවධානය යොමු කරන අතර තාක්ෂණය අවබෝධ කර ගැනීමට දායක නොවේ. අපි ගැඹුරට ගොස් සම්බන්ධතාවය ඇති වන ආකාරය සොයා ගැනීමට උත්සාහ කරමු, සැසි විස්තරය සහ අපේක්ෂකයින් මොනවාද, මොනවාද? STUNසහ හැරවීමසේවාදායකය.

WebRTC

හැදින්වීම

WebRTC යනු ඔබට වීඩියෝ දත්ත සම්ප්‍රේෂණය සඳහා සේවාලාභීන් දෙදෙනෙකු සම්බන්ධ කිරීමට ඉඩ සලසන බ්‍රවුසර පාදක තාක්ෂණයකි. ප්‍රධාන විශේෂාංග වන්නේ අභ්‍යන්තර බ්‍රවුසර සහායයි (වැනි තෙවන පාර්ශ්ව කාවැද්දූ තාක්ෂණයන් අවශ්‍ය නොවේ adobe flash) සහ අතිරේක සේවාදායකයන් භාවිතා නොකර සේවාදායකයින් සම්බන්ධ කිරීමේ හැකියාව - සම්බන්ධතාවය සම සම(තව දුරටත්, p2p).

සම්බන්ධතාවයක් ස්ථාපිත කරන්න p2p- පරිගණක සෑම විටම පොදු නොවන බැවින් තරමක් දුෂ්කර කාර්යයකි IPලිපින, එනම් අන්තර්ජාලයේ ලිපින. සුළු මුදල නිසා IPv4ලිපින (සහ ආරක්ෂක අරමුණු සඳහා) යාන්ත්රණයක් සංවර්ධනය කරන ලදී NAT, පුද්ගලික ජාල නිර්මාණය කිරීමට ඔබට ඉඩ සලසයි, උදාහරණයක් ලෙස, නිවාස භාවිතය සඳහා. බොහෝ නිවාස රවුටර දැන් සහය දක්වයි NATසහ මෙයට ස්තූතිවන්ත වන්නට, අන්තර්ජාල සපයන්නන් සාමාන්‍යයෙන් එකක් ලබා දුන්නද, සියලුම ගෘහ උපාංගවලට අන්තර්ජාලයට ප්‍රවේශය ඇත IPලිපිනය. පොදු IPඅන්තර්ජාලයේ ලිපින අද්විතීයයි, නමුත් පුද්ගලික ලිපින එසේ නොවේ. එබැවින් සම්බන්ධ වන්න p2p- දුෂ්කර.

මෙය වඩා හොඳින් අවබෝධ කර ගැනීම සඳහා, අවස්ථා තුනක් සලකා බලන්න: නෝඩ් දෙකම එකම ජාලයක ඇත (පින්තූරය 1), නෝඩ් දෙකම විවිධ ජාල වල ඇත (එකක් පුද්ගලිකව, අනෙක පොදු) (පින්තූරය 2)සහ නෝඩ් දෙකම එකම සමග විවිධ පුද්ගලික ජාල වල ඇත IPලිපිනයන් (රූපය 3).

රූපය 1: එකම ජාලයේ නෝඩ් දෙකම

රූපය 2: විවිධ ජාල වල නෝඩ් (එකක් පුද්ගලිකව, එකක් පොදු)

රූපය 3: විවිධ පුද්ගලික ජාල වල නෝඩ්, නමුත් සංඛ්‍යාත්මකව සමාන ලිපින සහිත

ඉහත රූපවල, අක්ෂර දෙකේ අංකනයේ පළමු අකුරෙන් නෝඩ් වර්ගය (p = සම වයසේ මිතුරන්, r = රවුටරය) පළමු රූපයේ, තත්වය වාසිදායක වේ: ඔවුන්ගේ ජාලයේ නෝඩ් සම්පූර්ණයෙන්ම ජාලය විසින් හඳුනාගෙන ඇත IPලිපිනයන් සහ එම නිසා එකිනෙකාට සෘජුවම සම්බන්ධ විය හැක. දෙවන රූපයේ, අපට සමාන නෝඩ් අංක ඇති විවිධ ජාල දෙකක් තිබේ. රවුටර (රවුටර) දෙකක් ඇති මෙහි දිස්වේ ජාල අතුරුමුහුණත- ඔබේ ජාලය තුළ සහ ඔබේ ජාලයෙන් පිටත. එබැවින් ඔවුන්ට දෙකක් තිබේ IPලිපිනයන්. සාමාන්‍ය නෝඩ් වලට ඇත්තේ එක් අතුරු මුහුණතක් පමණක් වන අතර එමඟින් ඔවුන්ගේම ජාලයෙන් පමණක් සන්නිවේදනය කළ හැකිය. ඔවුන් තම ජාලයෙන් පිටත කෙනෙකුට දත්ත සම්ප්‍රේෂණය කරන්නේ නම්, උපකාරයෙන් පමණි NATරවුටරය ඇතුළත (රවුටරය) සහ ඒ නිසා යටින් අනෙක් අයට දෘශ්‍යමාන වේ IP router address එක එයාලගේ බාහිර IPලිපිනය. මේ අනුව, නෝඩය p1අර තියෙන්නේ අභ්යන්තරය IP = 192.168.0.200 සහ බාහිර IP = 10.50.200.5 , අවසාන ලිපිනය ඔහුගේ ජාලයේ ඇති අනෙකුත් සියලුම ධාරකයන්ට බාහිර වීමත් සමඟ. නෝඩ් සඳහා තත්වය සමාන වේ p2. එමනිසා, ඔවුන්ගේ අභ්යන්තර (තමන්ගේම) පමණක් නම් ඔවුන්ගේ සම්බන්ධතාවය කළ නොහැකි ය IPලිපිනයන්. ඔබට බාහිර ලිපින භාවිතා කළ හැකිය, එනම් රවුටර වල ලිපින, නමුත් එකම පුද්ගලික ජාලයේ සියලුම නෝඩ් වලට එකම බාහිර ලිපිනයක් ඇති බැවින් මෙය තරමක් අපහසුය. මෙම ගැටළුව යාන්ත්රණය මගින් විසඳනු ලැබේ NAT

අපි තවමත් ඔවුන්ගේ අභ්යන්තර ලිපිනයන් හරහා නෝඩ් සම්බන්ධ කිරීමට තීරණය කළහොත් කුමක් සිදුවේද? දත්ත ජාලයෙන් ඉවත් නොවනු ඇත. බලපෑම වැඩි දියුණු කිරීම සඳහා, අවසාන රූපයේ දැක්වෙන තත්වය ඔබට සිතාගත හැකිය - නෝඩ් දෙකටම එකම අභ්යන්තර ලිපින ඇත. ඔවුන් ඒවා සන්නිවේදනය කිරීමට භාවිතා කරන්නේ නම්, එක් එක් නෝඩය තමන් සමඟ සන්නිවේදනය කරනු ඇත.

WebRTCප්රොටෝකෝලය භාවිතයෙන් එවැනි ගැටළු සමඟ සාර්ථකව කටයුතු කරයි ICE, කෙසේ වෙතත්, අතිරේක සේවාදායකයන් භාවිතා කිරීම අවශ්ය වේ ( STUN, හැරවීම) මේ සියල්ල පහතින්.

WebRTC හි අදියර දෙකක්

ප්රොටෝකෝලය හරහා නෝඩ් දෙකක් සම්බන්ධ කිරීමට WebRTC(හෝ සරලව RTCදෙකක් සම්බන්ධ නම් iPhone'අ) සම්බන්ධතාවයක් ඇති කර ගැනීම සඳහා මූලික පියවර කිහිපයක් ගත යුතුය. මෙය පළමු අදියරයි - සම්බන්ධතාවයක් ස්ථාපනය කිරීම. දෙවන අදියර වන්නේ වීඩියෝ දත්ත සම්ප්රේෂණය කිරීමයි.

තාක්ෂණය වුවද එය වහාම පැවසිය යුතුය WebRTCඔහුගේ කාර්යයේදී බොහෝ දේ භාවිතා කරයි විවිධ ක්රමසන්නිවේදන ( TCPසහ UDP) සහ ඒවා අතර නම්‍යශීලී මාරුවක් ඇත, මෙම තාක්ෂණය සම්බන්ධතා දත්ත යැවීම සඳහා ප්‍රොටෝකෝලයක් නොමැත. පුදුමයක් නොවේ, මන්ද නෝඩ් දෙකක් සම්බන්ධ කරන්න p2pඑතරම් පහසු නැත. එබැවින්, එය කිහිපයක් තිබීම අවශ්ය වේ අතිරේකදත්ත හුවමාරු කිරීමේ ක්රමය, සම්බන්ධ නොවේ WebRTC. එය සොකට් මාරු කිරීම, ප්රොටෝකෝලය විය හැකිය http, එය ප්රොටෝකෝලයක් පවා විය හැකිය SMTPහෝ රුසියානු පෝස්ට්. මෙම සම්ප්රේෂණ යාන්ත්රණය ප්රාථමිකදත්ත ලෙස හැඳින්වේ සංඥාව. බොහෝ තොරතුරු මාරු කිරීම අවශ්ය නොවේ. සියලුම දත්ත පෙළ ලෙස සම්ප්රේෂණය වන අතර එය වර්ග දෙකකට බෙදා ඇත - SDPසහ අයිස් අපේක්ෂකයා. පළමු වර්ගය තාර්කික සම්බන්ධතාවයක් ස්ථාපිත කිරීම සඳහා භාවිතා කරන අතර, දෙවනුව භෞතික එකක් සඳහා භාවිතා වේ. මේ ගැන වැඩි විස්තර පසුව, නමුත් දැනට, එය මතක තබා ගැනීම වැදගත් වේ WebRTCවෙනත් නෝඩයකට සම්ප්‍රේෂණය කිරීමට අවශ්‍ය තොරතුරු කිහිපයක් අපට ලබා දෙනු ඇත. අපි අවශ්ය සියලු තොරතුරු සම්ප්රේෂණය කළ පසු, නෝඩ් සම්බන්ධ කිරීමට හැකි වන අතර අපගේ උපකාරය තවදුරටත් අවශ්ය නොවේ. ඒ නිසා අපි ක්රියාත්මක කළ යුතු සංඥා යාන්ත්රණය වෙනම, භාවිතා කරනු ඇත සම්බන්ධ වූ විට පමණි, සහ වීඩියෝ දත්ත සම්ප්‍රේෂණය කිරීමේදී භාවිතා නොකරනු ඇත.

එබැවින් අපි පළමු අදියර, සම්බන්ධතා සැකසුම් අදියර දෙස බලමු. එය අයිතම කිහිපයකින් සමන්විත වේ. සම්බන්ධතාවය ආරම්භ කරන නෝඩය සඳහා මෙම අදියර මුලින්ම සලකා බලන්න, පසුව බලා සිටීම සඳහා.

  • ආරම්භකයා (ඇමතුම්කරු - අමතන්නා):
    1. වීඩියෝ දත්ත සම්ප්‍රේෂණය ආරම්භ කිරීමට පිරිනැමීම (createOffer)
    2. ඔබේ ලබා ගැනීම SDP SDP)
    3. ඔබේ ලබා ගැනීම අයිස් අපේක්ෂකයා අයිස් අපේක්ෂකයා)
  • ඇමතුම බලා සිටීම ( කැඳවුම්කරු):
    1. දේශීය (තමන්ගේම) මාධ්‍ය ප්‍රවාහයක් ලබා ගැනීම සහ එය සම්ප්‍රේෂණය සඳහා සැකසීම (getUserMediaStream)
    2. වීඩියෝ දත්ත හුවමාරුවක් ආරම්භ කිරීමට සහ පිළිතුරක් සෑදීමට පිරිනැමීමක් ලබා ගන්න (createAnswer)
    3. ඔබේ ලබා ගැනීම SDPවස්තුව සහ එය සංඥා යාන්ත්‍රණය හරහා ගමන් කිරීම ( SDP)
    4. ඔබේ ලබා ගැනීම අයිස් අපේක්ෂකයාවස්තූන් සහ සංඥා යාන්ත්‍රණය හරහා ඒවා සම්ප්‍රේෂණය කිරීම ( අයිස් අපේක්ෂකයා)
    5. දුරස්ථ (විදේශීය) මාධ්‍ය ප්‍රවාහයක් ලබා ගැනීම සහ එය තිරය මත ප්‍රදර්ශනය කිරීම (onAddStream)

වෙනස ඇත්තේ දෙවන ඡේදයේ පමණි.

පියවරවල පෙනෙන සංකීර්ණත්වය තිබියදීත්, ඇත්ත වශයෙන්ම ඒවායින් තුනක් තිබේ: ඔබේම මාධ්‍ය ප්‍රවාහයක් යැවීම (p. 1), සම්බන්ධතා පරාමිතීන් සැකසීම (p. 2-4), වෙනත් කෙනෙකුගේ මාධ්‍ය ප්‍රවාහයක් ලබා ගැනීම (p. 5). වඩාත්ම දුෂ්කර වන්නේ දෙවන පියවරයි, මන්ද එය කොටස් දෙකකින් සමන්විත වේ: ස්ථාපිත කිරීම භෞතිකසහ තාර්කිකසම්බන්ධතා. පළමුවැන්න පෙන්නුම් කරයි මාර්ගය, එක් ජාල නෝඩයක සිට තවත් ජාල නෝඩයකට ලබා ගැනීම සඳහා කුමන පැකට් යා යුතුද යන්න. දෙවැන්න පෙන්නුම් කරයි වීඩියෝ/ශ්‍රව්‍ය පරාමිතීන්- භාවිතා කළ යුතු ගුණාත්මකභාවය, කුමන කෝඩෙක් භාවිතා කළ යුතුද.

මානසික වේදිකාව createOfferහෝ නිර්මාණය පිළිතුරමාරු කිරීමේ අදියරවලට සම්බන්ධ විය යුතුය SDPසහ අයිස් අපේක්ෂකයාවස්තූන්.

මූලික ආයතන

මාධ්‍ය ප්‍රවාහ (MediaStream)

ප්‍රධාන ආයතනය මාධ්‍ය ප්‍රවාහය, එනම් වීඩියෝ සහ ශ්‍රව්‍ය දත්ත, පින්තූර සහ ශබ්ද ප්‍රවාහයයි. මාධ්‍ය ප්‍රවාහ වර්ග දෙකක් තිබේ - දේශීය සහ දුරස්ථ. දේශීය එක ආදාන උපාංග (කැමරාව, මයික්‍රොෆෝනය) සහ දුරස්ථ එක ජාලය හරහා දත්ත ලබා ගනී. මේ අනුව, සෑම නෝඩයකටම දේශීය හා දුරස්ථ නූල් දෙකම ඇත. තුල WebRTCප්‍රවාහ සඳහා අතුරු මුහුණතක් ඇත මාධ්ය ප්රවාහයසහ උප අතුරු මුහුණතක් ද ඇත LocalMediaStreamවිශේෂයෙන්ම දේශීය නූල් සඳහා. තුල JavaScriptඔබට හමුවිය හැක්කේ පළමු එක හා ඔබ භාවිතා කරන්නේ නම් පමණි lib jingle, එවිට දෙවැන්න ද හමුවිය හැකිය.

තුල WebRTCත්‍රෙඩ් එක ඇතුලේ තරමක් අවුල් සහගත ධුරාවලියක් තියෙනවා. සෑම ප්‍රවාහයක්ම මාධ්‍ය පීලි කිහිපයකින් සමන්විත විය හැක ( මාධ්ය ධාවන පථය), එය මාධ්‍ය නාලිකා කිහිපයකින් සමන්විත විය හැකිය ( MediaChannel) එමෙන්ම මාධ්‍ය ප්‍රවාහ කිහිපයක් ද තිබිය හැකිය.

අපි සෑම දෙයක්ම පිළිවෙලට සලකා බලමු. මෙය සිදු කිරීම සඳහා, අපි උදාහරණයක් මතක තබා ගනිමු. අපි හිතමු අපි අපේම වීඩියෝවක් පමණක් නොව, අපි යමක් ලිවීමට යන කඩදාසි කැබැල්ලක් ඇති අපගේ මේසයේ වීඩියෝවක් ද සම්ප්‍රේෂණය කිරීමට අවශ්‍ය බව. අපට වීඩියෝ දෙකක් (අපි + වගුව) සහ එක් ශ්රව්ය (අපි) අවශ්ය වනු ඇත. මෙම දත්ත බොහෝ විට දුර්වල ලෙස එකිනෙකා මත රඳා පවතින බැවින්, අප සහ වගුව විවිධ නූල් වලට බෙදිය යුතු බව පැහැදිලිය. එබැවින් අපට දෙකක් ලැබෙනු ඇත මාධ්ය ප්රවාහය'අ - එකක් අපට සහ එකක් මේසයට. පළමුවැන්න වීඩියෝ සහ ශ්‍රව්‍ය දත්ත යන දෙකම අඩංගු වන අතර දෙවැන්න වීඩියෝ පමණක් අඩංගු වේ (රූපය 4).

රූපය 4: වෙනස් මාධ්‍ය ප්‍රවාහ දෙකක්. එකක් අපට, එකක් අපේ මේසයට

මාධ්‍ය ප්‍රවාහයට අවම වශයෙන් දත්ත අඩංගු කිරීමේ හැකියාව ඇතුළත් විය යුතු බව වහාම පැහැදිලි වේ විවිධ වර්ග- වීඩියෝ සහ ශ්රව්ය. මෙය තාක්ෂණයේ දී සැලකිල්ලට ගනු ලබන අතර එබැවින් එක් එක් වර්ගයේ දත්ත මාධ්ය ධාවන පථයක් හරහා ක්රියාත්මක වේ. මාධ්ය ධාවන පථය. මාධ්‍ය ධාවන පථයට විශේෂ දේපලක් ඇත කාරුණික, අප ඉදිරියෙහි ඇති දේ තීරණය කරයි - වීඩියෝ හෝ ශ්රව්ය (රූපය 5)

රූපය 5: මාධ්‍ය ප්‍රවාහ සෑදී ඇත්තේ මාධ්‍ය පීලි වලින්

වැඩසටහනේ සෑම දෙයක්ම සිදු වන්නේ කෙසේද? අපි මාධ්‍ය ප්‍රවාහ දෙකක් ඇති කරනවා. ඊට පස්සේ අපි වීඩියෝ ට්‍රැක් දෙකක් සහ ඕඩියෝ ට්‍රැක් එකක් හදනවා. අපි කැමරා සහ මයික්‍රෆෝනය වෙත ප්‍රවේශය ලබා ගනිමු. කුමන උපාංගයක් භාවිතා කළ යුතුද යන්න අපි එක් එක් ධාවන පථයට කියමු. පළමු මාධ්‍ය ප්‍රවාහයට වීඩියෝ සහ ශ්‍රව්‍ය පථයක් සහ දෙවන මාධ්‍ය ප්‍රවාහයට වෙනත් කැමරාවකින් වීඩියෝ පටයක් එක් කරමු.

නමුත් සම්බන්ධතාවයේ අනෙක් අන්තයේ ඇති මාධ්‍ය ප්‍රවාහයන් වෙන්කර හඳුනා ගන්නේ කෙසේද? මෙය සිදු කිරීම සඳහා, සෑම මාධ්‍ය ප්‍රවාහයකටම දේපලක් ඇත ලේබලය- ප්රවාහ ලේබලය, එහි නම (රූපය 6). මාධ්‍ය පීලි වලට එකම දේපල ඇත. බැලූ බැල්මට පෙනෙන්නේ වීඩියෝව වෙනත් ආකාරවලින් ශබ්දයෙන් වෙන්කර හඳුනාගත හැකි බවයි.

රූපය 6: මාධ්‍ය ප්‍රවාහ සහ ධාවන පථ ලේබල් මගින් හඳුනා ගැනේ

ඉතින්, සහ මාධ්‍ය ධාවන පථ ලේබලයක් හරහා හඳුනාගත හැකි නම්, අපගේ උදාහරණය සඳහා එකක් වෙනුවට මාධ්‍ය ප්‍රවාහ දෙකක් භාවිතා කිරීමට අවශ්‍ය වන්නේ ඇයි? සියල්ලට පසු, ඔබට එක් මාධ්‍ය ප්‍රවාහයක් මාරු කළ හැකි අතර එහි විවිධ පීලි භාවිතා කරන්න. අපි මාධ්‍ය ප්‍රවාහවල වැදගත් දේපලකට පැමිණ ඇත - ඒවා සමමුහුර්ත කරන්නමාධ්ය පීලි. විවිධ මාධ්‍ය ප්‍රවාහයන් එකිනෙක සමමුහුර්ත කර නැත, නමුත් එක් එක් මාධ්‍ය ප්‍රවාහය තුළ සියලුම පීලි එකම වේලාවක සෙල්ලම් කළා.

මේ අනුව, අපට අපගේ වචන, අපගේ හැඟීම් සහ අපගේ කඩදාසි කැබැල්ල එකවර වාදනය කිරීමට අවශ්‍ය නම්, එක් මාධ්‍ය ප්‍රවාහයක් භාවිතා කිරීම වටී. මෙය එතරම් වැදගත් නොවේ නම්, විවිධ ධාරාවන් භාවිතා කිරීම වඩා ලාභදායී වේ - පින්තූරය වඩාත් සුමට වනු ඇත.

සම්ප්‍රේෂණය අතරතුර ධාවන පථයක් අක්‍රිය කිරීමට අවශ්‍ය නම්, ඔබට දේපල භාවිතා කළ හැකිය සක්රීය කර ඇතමාධ්ය පීලි.

අවසානයේදී, ඔබ ස්ටීරියෝ ශබ්දය ගැන සිතා බැලිය යුතුය. ඔබ දන්නා පරිදි, ස්ටීරියෝ ශබ්දය වෙනස් ශබ්ද දෙකකි. ඒවගේම ඒවත් වෙනම යවන්න ඕන. මේ සඳහා නාලිකා භාවිතා වේ. MediaChannel. ශ්‍රව්‍ය මාධ්‍ය ධාවන පථයකට බොහෝ නාලිකා තිබිය හැක (උදාහරණයක් ලෙස, ඔබට 5+1 ශ්‍රව්‍ය අවශ්‍ය නම් 6). මාධ්‍ය ධාවන පථය තුළ, නාලිකා, ඇත්ත වශයෙන්ම ද සමමුහුර්ත කර ඇත. වීඩියෝ සඳහා, සාමාන්යයෙන් එක් නාලිකාවක් පමණක් භාවිතා කරයි, නමුත් කිහිපයක් භාවිතා කළ හැකිය, උදාහරණයක් ලෙස, ප්රචාරණ ආවරණ සඳහා.

සාරාංශ ගත කිරීමට: අපි වීඩියෝ සහ ශ්‍රව්‍ය දත්ත සම්ප්‍රේෂණය කිරීමට මාධ්‍ය ප්‍රවාහයක් භාවිතා කරමු. එක් එක් මාධ්‍ය ප්‍රවාහය තුළ, දත්ත සමමුහුර්ත කර ඇත. අපට සමමුහුර්තකරණය අවශ්‍ය නැතිනම් අපට බහු මාධ්‍ය ප්‍රවාහ භාවිතා කළ හැක. එක් එක් මාධ්‍ය ප්‍රවාහය තුළ මාධ්‍ය පීලි වර්ග දෙකක් ඇත - වීඩියෝ සහ ශ්‍රව්‍ය සඳහා. සාමාන්‍යයෙන් පීලි දෙකකට වඩා නැත, නමුත් ඔබට විවිධ වීඩියෝ කිහිපයක් (මැදිහත්කරුගේ සහ ඔහුගේ මේසයේ) මාරු කිරීමට අවශ්‍ය නම් තවත් ඒවා තිබිය හැකිය. සෑම ධාවන පථයක්ම නාලිකා කිහිපයකින් සමන්විත විය හැකිය, එය සාමාන්‍යයෙන් ස්ටීරියෝ ශබ්දය සඳහා පමණක් භාවිතා වේ.

සරලම වීඩියෝ කතාබස් තත්වයේදී, අපට එක් ප්‍රාදේශීය මාධ්‍ය ප්‍රවාහයක් ඇත, එය පීලි දෙකකින් සමන්විත වනු ඇත - වීඩියෝ පථයක් සහ ශ්‍රව්‍ය පථයක්, ඒ සෑම එකක්ම එක් ප්‍රධාන නාලිකාවකින් සමන්විත වේ. වීඩියෝ පථය කැමරාවට වගකිව යුතු අතර, ශ්‍රව්‍ය පථය මයික්‍රොෆෝනය සඳහා වන අතර මාධ්‍ය ප්‍රවාහය දෙකෙහිම කන්ටේනරය වේ.

සැසි විස්තරය (SDP)

විවිධ පරිගණකවල සෑම විටම විවිධ කැමරා, මයික්‍රොෆෝන, වීඩියෝ කාඩ්පත් සහ වෙනත් උපකරණ ඇත. ඔවුන් සතුව ඇති බොහෝ විකල්ප තිබේ. ජාල නෝඩ් දෙකක් අතර මාධ්‍ය දත්ත හුවමාරුව සඳහා මේ සියල්ල සම්බන්ධීකරණය කළ යුතුය. WebRTCඑය ස්වයංක්‍රීයව සිදු කර නිර්මාණය කරයි විශේෂ වස්තුව- සැසි විස්තරය SDP. මෙම වස්තුව වෙනත් නෝඩයකට යවන්න, ඔබට මාධ්‍ය දත්ත යැවිය හැක. තවම වෙනත් නෝඩයක් සමඟ සම්බන්ධයක් නොමැත.

මේ සඳහා ඕනෑම සංඥා යාන්ත්රණයක් භාවිතා කරයි. SDPසොකට් හරහා පවා, පුද්ගලයෙකුට පවා (දුරකථනයෙන් වෙනත් නෝඩයකට කියන්න), රුසියානු පෝස්ට් මගින් පවා සම්ප්රේෂණය කළ හැකිය. සෑම දෙයක්ම ඉතා සරලයි - ඔබට සූදානම් කළ එකක් ලබා දෙනු ඇත SDPසහ එය යැවීමට අවශ්ය වේ. සහ අනෙක් පැත්තෙන් ලැබීමෙන් පසු - දෙපාර්තමේන්තුවට මාරු කිරීම WebRTC. සැසි හසුරුව පෙළ ලෙස ගබඩා කර ඇති අතර, ඔබට එය ඔබගේ යෙදුම්වල වෙනස් කළ හැක, නමුත් ඔබට සාමාන්‍යයෙන් අවශ්‍ය නොවේ. උදාහරණයක් ලෙස, ඩෙස්ක්ටොප්↔දුරකථනය සම්බන්ධ කරන විට, සමහර විට ඔබට අවශ්ය ශ්රව්ය කෝඩෙක් තෝරාගැනීම බල කිරීමට අවශ්ය වේ.

සාමාන්යයෙන්, සම්බන්ධතාවයක් ස්ථාපනය කිරීමේදී, උදාහරණයක් ලෙස, ඔබ යම් ලිපිනයක් සඳහන් කළ යුතුය URL. සංඥා යාන්ත්‍රණය හරහා ඔබ විසින්ම දත්ත ගමනාන්තයට යවන බැවින් මෙහි මෙය අවශ්‍ය නොවේ. දැක්වීමට WebRTCඅපට ස්ථාපනය කිරීමට අවශ්‍ය දේ p2pඔබට createOffer ශ්‍රිතය ඇමතීමට අවශ්‍ය සම්බන්ධතාවය. මේ ෆන්ෂන් එකට කතා කරලා විශේෂයක් දුන්නට පස්සේ ආපසු අමතන්න'a නිර්මාණය වනු ඇත SDPවස්තුව සහ එයම සම්මත කර ඇත ආපසු අමතන්න. ඔබට අවශ්‍ය වන්නේ මෙම වස්තුව ජාලය හරහා වෙනත් නෝඩයකට (interlocutor) මාරු කිරීමයි. ඊට පසු, අනෙක් කෙළවරේ, සංඥා යාන්ත්රණය හරහා දත්ත පැමිණෙනු ඇත, එනම් මෙය SDPවස්තුවක්. මෙම සැසි විස්තරය මෙම නෝඩයට ආගන්තුක වන අතර එබැවින් ප්‍රයෝජනවත් තොරතුරු දරයි. මෙම වස්තුව ලැබීම සම්බන්ධතාවය ආරම්භ කිරීමට සංඥාවක් වේ. එබැවින්, ඔබ මෙයට එකඟ විය යුතු අතර createAnswer ශ්‍රිතය අමතන්න. එය createOffer හි සම්පූර්ණ ප්‍රතිසමයකි. ඔබේ වෙත ආපසු ආපසු අමතන්නප්‍රාදේශීය සැසි විස්තරයක් සමත් වන අතර එය සංඥා යාන්ත්‍රණය හරහා ආපසු යැවීමට අවශ්‍ය වනු ඇත.

ඔබට createAnswer ශ්‍රිතය ඇමතීමට හැක්කේ වෙනත් කෙනෙකුගේ ලැබීමෙන් පසුව පමණක් බව සඳහන් කිරීම වටී SDPවස්තුව. ඇයි? දේශීය නිසා SDP createAnswer කියන විට උත්පාදනය වන වස්තුව දුරස්ථ පාලකය මත රඳා පැවතිය යුතුය SDPවස්තුවක්. මෙම අවස්ථාවේදී පමණක් ඔබගේ වීඩියෝ සැකසුම් මැදිහත්කරුගේ සැකසුම් සමඟ සම්බන්ධීකරණය කළ හැකිය. එසේම, දේශීය මාධ්‍ය ප්‍රවාහය ලැබෙන තුරු createAnswer සහ createOffer අමතන්න එපා - ඔවුන්ට ලිවීමට කිසිවක් නැත. SDPවස්තුවක්.

තුළ සිට WebRTCඑය සංස්කරණය කිරීමට හැකි ය SDPවස්තුව, පසුව දේශීය හසුරුව ලබා ගැනීමෙන් පසුව, එය සැකසිය යුතුය. සමත් වීම ටිකක් අමුතු දෙයක් ලෙස පෙනෙන්නට පුළුවන WebRTCඇය විසින්ම අපට ලබා දුන් දේ, නමුත් එය ප්‍රොටෝකෝලයයි. ඔබට දුරස්ථ හසුරුව ලැබුණු විට, ඔබ එය ද සැකසිය යුතුය. එමනිසා, ඔබ එක් නෝඩයක් මත විස්තර දෙකක් ස්ථාපනය කළ යුතුය - ඔබේම සහ වෙනත් කෙනෙකුගේ (එනම්, දේශීය සහ දුරස්ථ).

එවැනි පසු අතට අත දීමනෝඩ් එක එකාගේ කැමැත්ත ගැන දන්නවා. උදාහරණයක් ලෙස, නෝඩය නම් 1 codecs සඳහා සහය දක්වයි සහ බී, සහ නෝඩය 2 codecs සඳහා සහය දක්වයි බීසහ සී, එවිට, සෑම නෝඩයක්ම තමන්ගේම සහ තවත් අයෙකුගේ විස්තර දන්නා බැවින්, නෝඩ් දෙකම කෝඩෙක් එකක් තෝරා ගනු ඇත. බී(රූපය 7). සම්බන්ධතා තර්කනය දැන් ස්ථාපිත කර ඇති අතර මාධ්‍ය ප්‍රවාහ සම්ප්‍රේෂණය කළ හැකිය, නමුත් තවත් ගැටළුවක් ඇත - නෝඩ් තවමත් සම්බන්ධ වන්නේ සංඥා යාන්ත්‍රණයකින් පමණි.


රූපය 7: කෝඩෙක් සාකච්ඡා

අපේක්ෂකයින් (අයිස් අපේක්ෂකයා)

තාක්ෂණ WebRTCඑයාගේ අලුත් ක්‍රමවේදයෙන් අපිව අවුල් කරන්න හදනවා. සම්බන්ධතාවයක් ස්ථාපනය කිරීමේදී, ඔබට සම්බන්ධ වීමට අවශ්‍ය නෝඩයේ ලිපිනය සඳහන් කර නොමැත. මුලින්ම ස්ථාපනය කර ඇත තාර්කිකසම්බන්ධතාවය, නැත භෞතික, සෑම විටම ප්රතිවිරුද්ධය සිදු කර ඇතත්. නමුත් අපි තෙවන පාර්ශවීය සංඥා යාන්ත්රණයක් භාවිතා කරන බව අමතක නොකළහොත් මෙය අමුතු දෙයක් ලෙස නොපෙනේ.

එබැවින්, සම්බන්ධතාවය දැනටමත් ස්ථාපිත කර ඇත (තාර්කික සම්බන්ධතාවය), නමුත් ජාල නෝඩ් සඳහා දත්ත සම්ප්රේෂණය කිරීමට තවමත් ක්රමයක් නොමැත. සියල්ල එතරම් සරල නැත, නමුත් අපි සරලව ආරම්භ කරමු. නෝඩ් එකම පුද්ගලික ජාලයක තිබිය යුතුය. අප දැනටමත් දන්නා පරිදි, ඔවුන්ගේ අභ්යන්තරය හරහා පහසුවෙන් එකිනෙකා සමඟ සම්බන්ධ විය හැකිය IPලිපින (හෝ සමහර විට වෙනත්, භාවිතා නොකළහොත් TCP/IP).

සමහරු හරහා ආපසු අමතන්න'සහ WebRTCඅපට කියයි අයිස් අපේක්ෂකයාවස්තූන්. ඒවා පාඨමය ආකාරයෙන් ද එන අතර සැසි විස්තර කිරීම් මෙන්, ඒවා සංඥා යාන්ත්‍රණය හරහා යැවිය යුතුය. සැසි විස්තරයේ කැමරාවේ සහ මයික්‍රොෆෝන මට්ටමේ අපගේ සැකසුම් පිළිබඳ තොරතුරු අඩංගු වූයේ නම්, අපේක්ෂකයින් ජාලයේ අපගේ ස්ථානය පිළිබඳ තොරතුරු අඩංගු වේ. ඒවා වෙනත් නෝඩයකට මාරු කරන්න, ඔහුට භෞතිකව අප හා සම්බන්ධ වීමට හැකි වනු ඇත, ඔහු දැනටමත් සැසි විස්තරයක් ඇති බැවින්, ඔහුට තාර්කිකව සම්බන්ධ කළ හැකි අතර දත්ත "ගලා" ඇත. ඔහුගේ අපේක්ෂක වස්තුව අපට එවීමට ඔහු අමතක නොකරන්නේ නම්, එනම් ඔහු ජාලයේ සිටින ස්ථානය පිළිබඳ තොරතුරු, එවිට අපට ඔහු සමඟ සම්බන්ධ වීමට හැකි වනු ඇත. සම්භාව්‍ය සේවාදායක-සේවාදායක අන්තර් ක්‍රියාවෙන් තවත් එක් වෙනසක් අපි මෙහි සටහන් කරමු. HTTP සේවාදායකය සමඟ සන්නිවේදනය ඉල්ලීම්-ප්‍රතිචාර යෝජනා ක්‍රමයට අනුව සිදු වේ, සේවාදායකයා සේවාදායකයට දත්ත යවයි, එය ක්‍රියාවට නංවා එය හරහා යවයි ඉල්ලීම් පැකේජයේ දක්වා ඇති ලිපිනය. තුල WebRTCදැනගත යුතුයි ලිපින දෙකක්සහ දෙපැත්තෙන්ම ඒවා සම්බන්ධ කරන්න.

සැසි හැසිරවීම් වලින් ඇති වෙනස නම් දුරස්ථ අපේක්ෂකයින් පමණක් සැකසීමට අවශ්‍ය වීමයි. මෙහි සංස්කරණය කිරීම තහනම් වන අතර කිසිදු ප්‍රතිලාභයක් ගෙන දිය නොහැක. සමහර ක්‍රියාත්මක කිරීම් වලදී WebRTCඅපේක්ෂකයින් සැකසිය යුත්තේ සැසි හැසිරවීම් සැකසීමෙන් පසුව පමණි.

එක් සැසි විස්තරයක් පමණක් තිබුනේ ඇයි, නමුත් බොහෝ අපේක්ෂකයින් සිටිය හැක්කේ ඇයි? ජාලයේ පිහිටීම තීරණය කළ හැක්කේ එහි අභ්යන්තරයෙන් පමණක් නොවේ IPලිපිනය, නමුත් රවුටරයේ බාහිර ලිපිනය, සහ අවශ්යයෙන්ම එකක් නොවේ, මෙන්ම ලිපින හැරවීමසේවාදායකයන්. ඡේදයේ ඉතිරි කොටස අපේක්ෂකයින් සහ විවිධ පුද්ගලික ජාල වලින් නෝඩ් සම්බන්ධ කරන්නේ කෙසේද යන්න පිළිබඳ සවිස්තරාත්මක සාකච්ඡාවක් සඳහා කැප කෙරේ.

එබැවින්, නෝඩ් දෙකක් එකම ජාලයක ඇත (රූපය 8). ඔවුන් හඳුනා ගන්නේ කෙසේද? භාවිතා කිරීම මගින් IPලිපිනයන්. වෙන මගක් නෑ. ඇත්ත, ඔබට තවමත් විවිධ ප්‍රවාහන භාවිතා කළ හැක ( TCPසහ UDP) සහ විවිධ වරායන්. අපේක්ෂක වස්තුවේ අඩංගු තොරතුරු මෙයයි - IP, වරාය, ප්රවාහනසහ තවත්. උදාහරණයක් ලෙස, භාවිතා කරමු UDPප්රවාහනය සහ 531 වරාය.

රූපය 8: නෝඩ් දෙකක් එකම ජාලයක ඇත

එතකොට අපි node එකක නම් p1, එම WebRTCඑවැනි අපේක්ෂක වස්තුවක් අපට ලබා දෙනු ඇත - . මෙය නිශ්චිත ආකෘතියක් නොවේ, නමුත් රූප සටහනක් පමණි. අපි ගැටයක නම් p2, එවිට අපේක්ෂකයා වේ . සංඥා යාන්ත්රණය හරහා p1අපේක්ෂකයෙකු ලැබෙනු ඇත p2(එනම් නෝඩ් ස්ථානය p2, එනම් ඔහුගේ IPසහ වරාය) ඉන්පසු p1සමඟ සම්බන්ධ විය හැක p2සෘජුවම. වඩාත් නිවැරදි, p1ලිපිනයට දත්ත යවනු ඇත 10.50.150.3:531 ඔවුන් ළඟා වනු ඇතැයි බලාපොරොත්තුවෙන් p2. මෙම ලිපිනය නෝඩයකට අයත් වුවද කමක් නැත p2හෝ සමහර අතරමැදියෙක්. එකම වැදගත් දෙය නම් මෙම ලිපිනය හරහා දත්ත යවනු ලබන අතර ළඟා විය හැකිය p2.

නෝඩ් එකම ජාලයක පවතින තාක් - සෑම දෙයක්ම සරල සහ පහසුයි - සෑම නෝඩයකටම ඇත්තේ එක් අපේක්ෂක වස්තුවක් පමණි (සෑම විටම එහිම අර්ථය, එනම් ජාලය තුළ එහි පිහිටීම). නමුත් නෝඩ් ඇති විට තවත් බොහෝ අපේක්ෂකයින් සිටිනු ඇත විවිධජාල.

අපි වඩාත් සංකීර්ණ නඩුවකට යමු. එක් නෝඩයක් රවුටරයට පිටුපසින් (වඩාත් නිවැරදිව, NAT පිටුපස) ඇති අතර, දෙවන නෝඩය මෙම රවුටරය සමඟ එකම ජාලය තුළ ඇත (උදාහරණයක් ලෙස, අන්තර්ජාලයේ) (රූපය 9).

රූපය 9: NAT පිටුපසින් එක් සත්කාරක, තවත් නොවේ

මෙම නඩුවේ ගැටලුවට විශේෂ විසඳුමක් ඇත, එය අපි දැන් සලකා බලමු. ගෙදර රවුටරයසාමාන්යයෙන් මේසයක් අඩංගු වේ NAT. මෙය රවුටරයේ පුද්ගලික ජාලය තුළ ඇති නෝඩ් වලට ප්‍රවේශ වීමට ඉඩ සලසන විශේෂ යාන්ත්‍රණයකි, උදාහරණයක් ලෙස වෙබ් අඩවි.

අපි හිතමු web server එක කෙලින්ම අන්තර්ජාලයට සම්බන්ධයි, ඒ කියන්නේ ඒකට public එකක් තියෙනවා කියලා IP* ලිපිනය. ගැටයක් වෙන්න දෙන්න p2. ගැටය p1(වෙබ් සේවාදායකයා) ලිපිනයට ඉල්ලීමක් යවයි 10.50.200.10 . පළමුව, දත්ත රවුටරයට යයි r1, හෝ ඒ වෙනුවට ඔහුගේ අභ්යන්තරයඅතුරුමුහුණත 192.168.0.1 . ඊට පසු, රවුටරය මූලාශ්ර ලිපිනය මතක තබා ගනී (ලිපිනය p1) සහ එය විශේෂ වගුවකට ඇතුල් කරයි NAT, ඉන්පසු මූලාශ්‍ර ලිපිනය එයටම වෙනස් කරයි( p1 r1) තවදුරටත්, අනුව බාහිරඅතුරුමුහුණත, රවුටරය වෙබ් සේවාදායකයට කෙලින්ම දත්ත යවයි p2. වෙබ් සේවාදායකය දත්ත සකසයි, ප්‍රතිචාරයක් ජනනය කරයි, සහ එය ආපසු යවයි. රවුටරය වෙත යවයි r1, ආපසු එන ලිපිනයේ සිටින්නේ ඔහු බැවින් (රවුටරය ලිපිනය තමන්ගේම ලෙස වෙනස් කළේය). රවුටරය දත්ත ලබා ගනී, මේසය දෙස බලයි NATසහ දත්ත node වෙත යවයි p1. මෙහි අතරමැදියෙකු ලෙස රවුටරය ක්‍රියා කරයි.

නමුත් අභ්‍යන්තර ජාලයෙන් නෝඩ් කිහිපයක් එකවර බාහිර ජාලයට පිවිසෙන්නේ නම් කුමක් කළ යුතුද? ප්‍රතිචාරය ආපසු යැවිය යුත්තේ කාටද යන්න රවුටරය තේරුම් ගන්නේ කෙසේද? සමඟ මෙම ගැටළුව විසඳනු ලැබේ වරායන්. රවුටරය එහි ධාරක ලිපිනය ප්‍රතිස්ථාපනය කරන විට, එය වරාය ද ප්‍රතිස්ථාපනය කරයි. නෝඩ් දෙකක් අන්තර්ජාලයට පිවිසෙන්නේ නම්, රවුටරය ඔවුන්ගේ මූලාශ්ර වරායන් සමඟ ප්රතිස්ථාපනය කරයි විවිධ. එතකොට web server එකෙන් එන packet එක Router එකට ආයිත් එනකොට Router එකට තේරෙයි මේ packet එක assign කරලා තියෙන port එකෙන්. උදාහරණයක් පහත දැක්වේ.

තාක්ෂණය වෙත නැවත යන්න WebRTC, හෝ ඒ වෙනුවට, භාවිතා කරන එහි කොටස වෙත ICEප්රොටෝකෝලය (එබැවින් අයිස්අපේක්ෂකයින්). ගැටය p2එක් අපේක්ෂකයෙකු ඇත (ජාලයේ එහි පිහිටීම - 10.50.200.10 ), සහ නෝඩය p1, NAT සමඟ රවුටරයක් ​​පිටුපස පිහිටා ඇති, අපේක්ෂකයින් දෙදෙනෙකු සිටිනු ඇත - දේශීය ( 192.168.0.200 ) සහ රවුටර අපේක්ෂකයා ( 10.50.200.5 ) පළමු එක ප්‍රයෝජනවත් නොවේ, නමුත් එය කෙසේ වෙතත් ජනනය වේ WebRTCදුරස්ථ ධාරකය ගැන තවමත් කිසිවක් දන්නේ නැත - එය එකම ජාලයේ හෝ නොවිය හැකිය. දෙවන අපේක්ෂකයා ප්‍රයෝජනවත් වනු ඇති අතර, අප දැනටමත් දන්නා පරිදි, වරාය වැදගත් කාර්යභාරයක් ඉටු කරනු ඇත ( හරහා යාමට NAT).

මේස ඇතුළත් කිරීම NATදත්ත අභ්යන්තර ජාලයෙන් පිටවන විට පමණක් ජනනය වේ. එබැවින්, නෝඩය p1පළමුව දත්ත සම්ප්‍රේෂණය කළ යුතු අතර ඉන් පසුව පමණක් node හි දත්ත p2 node වෙත ලබා ගත හැක p1.

ප්රායෝගිකව නෝඩ් දෙකමපිටුපසින් සිටිනු ඇත NAT. වගුවක ප්‍රවේශයක් සෑදීමට NATසෑම රවුටරයකම, නෝඩ් දුරස්ථ නෝඩයට යමක් යැවිය යුතුය, නමුත් මෙවර පළමුවැන්නට දෙවැන්නට ළඟා විය නොහැක, නැතහොත් අනෙක් අතට. මෙයට හේතුව නෝඩ් ඔවුන්ගේ බාහිරව නොදැන සිටීමයි IPලිපින, සහ අභ්යන්තර ලිපින වෙත දත්ත යැවීම අර්ථ විරහිත ය.

කෙසේ වෙතත්, බාහිර ලිපින දන්නේ නම්, සම්බන්ධතාවය පහසුවෙන් ස්ථාපිත වනු ඇත. පළමු නෝඩය දෙවන නෝඩයේ රවුටරයට දත්ත යවන්නේ නම්, රවුටරය එහි වගුව නිසා ඒවා නොසලකා හරිනු ඇත. NATහිස්ව තිබියදී. කෙසේ වෙතත්, වගුවේ පළමු නෝඩයේ රවුටරයේ NATවාර්තාවක් අවශ්‍ය විය. දැන් දෙවන නෝඩය පළමු නෝඩයේ රවුටරයට දත්ත යවන්නේ නම්, රවුටරය ඒවා පළමු නෝඩයට සාර්ථකව සම්ප්‍රේෂණය කරයි. දැන් මේසය NATදෙවන රවුටරයේ ඔබට අවශ්‍ය දත්ත තිබේ.

ගැටලුව වන්නේ ඔබේ බාහිර දැනගැනීම සඳහා ය IPලිපිනය, ඔබට පිහිටා ඇති නෝඩයක් අවශ්‍ය වේ පොදු ජාලය. මෙම ගැටළුව විසඳීම සඳහා, අන්තර්ජාලයට සෘජුවම සම්බන්ධ වන අතිරේක සේවාදායකයන් භාවිතා කරනු ලැබේ. ඔවුන්ගේ උපකාරයෙන්, මේසයේ නිධන්ගත වාර්තා ද නිර්මාණය වේ. NAT.

STUN සහ TURN සේවාදායකයන්

ආරම්භයේදී WebRTCඇත STUNසහ හැරවීමසේවාදායකයන්, අපි එය ලෙස හඳුන්වනු ඇත ICEසේවාදායකයන්. සේවාදායකයන් නිශ්චිතව දක්වා නොමැති නම්, එකම ජාලයේ නෝඩ් පමණක් (එය නොමැතිව එයට සම්බන්ධ වේ NAT) සඳහා බව වහාම සටහන් කළ යුතුය 3g- ජාල භාවිතා කළ යුතුය හැරවීමසේවාදායකයන්.

STUN සේවාදායකයයනු හුදෙක් ආපසු ලිපිනයක්, එනම් යවන්නාගේ ධාරකයේ ලිපිනය ලබා දෙන අන්තර්ජාලයේ සේවාදායකයකි. රවුටරය පිටුපස ඇති නෝඩය ප්‍රවේශ වේ STUNහරහා යාමට සේවාදායකය NAT. වෙත පැමිණි පැකේජය STUNසේවාදායකයේ මූලාශ්‍ර ලිපිනය අඩංගු වේ - රවුටරයේ ලිපිනය, එනම් අපගේ නෝඩයේ බාහිර ලිපිනය. මෙම ලිපිනය STUNසේවාදායකය සහ ආපසු යවයි. මේ අනුව, නෝඩය එහි බාහිරව ලබා ගනී IPජාලයෙන් ප්‍රවේශ විය හැකි ලිපිනය සහ වරාය. තව දුරටත්, WebRTCමෙම ලිපිනය භාවිතයෙන් අතිරේක අපේක්ෂකයෙකු (බාහිර රවුටර ලිපිනය සහ වරාය) නිර්මාණය කරයි. දැන් මේසයේ NATරවුටරයට අවශ්‍ය වරායේ රවුටරයට යවන පැකට් අපගේ නෝඩයට යවන ප්‍රවේශයක් රවුටරයේ ඇත.

අපි උදාහරණයක් සමඟ මෙම ක්රියාවලිය දෙස බලමු.

උදාහරණය (STUN සේවාදායක මෙහෙයුම)

STUNසේවාදායකය විසින් දක්වනු ලැබේ s1. රවුටරය, පෙර මෙන්, හරහා r1, සහ node එක හරහා p1. ඔබ ද මේසය අනුගමනය කිරීමට අවශ්ය වනු ඇත NAT- අපි එය ලෙස දක්වමු r1_nat. එපමණක් නොව, මෙම වගුව සාමාන්යයෙන් විවිධ උපජාල නෝඩ් වලින් බොහෝ ඇතුළත් කිරීම් අඩංගු වේ - ඒවා ලබා නොදෙනු ඇත.

ඉතින්, ආරම්භයේදී අපට හිස් මේසයක් තිබේ r1_nat.

වගුව 2: පැකට් ශීර්ෂකය

ගැටය p1මෙම පැකට්ටුව රවුටරය වෙත යවයි r1(කෙසේ වෙතත්, විවිධ උපජාල භාවිතා කළ හැක විවිධ තාක්ෂණයන්) රවුටරයට මූලාශ්‍ර ලිපිනය ආදේශ කිරීම අවශ්‍ය වේ src IP, පැකට්ටුවේ සඳහන් කර ඇති ලිපිනය නිසැකවම බාහිර උපජාලය සඳහා සුදුසු නොවන බැවින්, එපමනක් නොව, මෙම පරාසයේ ලිපින වෙන් කර ඇති අතර, අන්තර්ජාලයේ එක ලිපිනයකටවත් එවැනි ලිපිනයක් නොමැත. රවුටරය පැකට් එකේ ආදේශකයක් සාදා නිර්මාණය කරයි නව වාර්තාවඔබේ මේසයේ r1_nat. මෙය සිදු කිරීම සඳහා, ඔහු වරාය අංකයක් ඉදිරිපත් කළ යුතුය. උපජාලයක් තුළ ඇති නෝඩ් කිහිපයකට බාහිර ජාලයකට ප්‍රවේශ විය හැකි බැවින්, පසුව වගුවේ ඇති බව මතක තබා ගන්න NATතබා ගත යුතුය අමතර තොරතුරුඑවිට රවුටරයට මෙම ධාරක කිහිපයෙන් කුමන ධාරකයක් සඳහාද යන්න තීරණය කළ හැක. රවුටරයට පෝට් එකක් එන්න දෙන්න 888 .

වෙනස් කරන ලද පැකේජ ශීර්ෂකය:

වගුව 4: NAT වගුව නව ප්‍රවේශයක් සමඟ යාවත්කාලීන කරන ලදී

මෙතන IPඋපජාලය සඳහා ලිපිනය සහ තොට හරියටම මුල් පැකට්ටුවට සමාන වේ. ඇත්ත වශයෙන්ම, පසුබැසීමේදී, ඒවා සම්පූර්ණයෙන්ම යථා තත්ත්වයට පත් කිරීමට අපට ක්රමයක් තිබිය යුතුය. IPබාහිර ජාලය සඳහා ලිපිනය රවුටරයේ ලිපිනය වන අතර වරාය රවුටරය විසින් සොයා ගන්නා ලද ලිපිනයට වෙනස් වී ඇත.

නෝඩය ඇති සැබෑ වරාය p1සම්බන්ධතාවයක් පිළිගනී - මෙය ඇත්ත වශයෙන්ම, 35777 , නමුත් සේවාදායකය දත්ත යවයි කල්පිතවරාය 888 , එය රවුටරය මගින් සැබෑ ලෙස වෙනස් කරනු ඇත 35777 .

ඉතින්, රවුටරය පැකට් ශීර්ෂයේ මූලාශ්‍ර ලිපිනය සහ වරාය වෙනස් කර වගුවට ප්‍රවේශයක් එක් කළේය NAT. දැන් පැකට්ටුව ජාලය හරහා සේවාදායකය වෙත යවනු ලැබේ, එනම් නෝඩය s1. දොරටුවේ, s1මෙම පැකේජය ඇත:

src IP Src PORT ඩෙස්ට් IP ඩෙස්ට් වරාය
10.50.200.5 888 12.62.100.200 6000

වගුව 5: STUN සේවාදායකයට පැකට්ටුවක් ලැබුණි

මුළු STUNලිපිනයෙන් පැකට්ටුවක් ලැබුණු බව සේවාදායකයා දනී 10.50.200.5:888 . දැන් සේවාදායකය මෙම ලිපිනය ආපසු යවයි. මෙතැනින් නතර වී අප දැන් සලකා බැලූ දේ නැවත බැලීම වටී. ඉහත වගු එහි කොටසකි ශීර්ෂකයපැකේජය, එය කිසිසේත්ම නොවේ අන්තර්ගතය. අපි අන්තර්ගතය ගැන කතා කළේ නැත, එය එතරම් වැදගත් නොවන බැවින් - එය කෙසේ හෝ ප්‍රොටෝකෝලයේ විස්තර කර ඇත STUN. දැන් අපි මාතෘකාවට අමතරව අන්තර්ගතය ද සලකා බලමු. එය සරල වන අතර රවුටරයේ ලිපිනය අඩංගු වේ - 10.50.200.5:888 අපි එය ගත්තත් ශීර්ෂකයපැකේජය. මෙය බොහෝ විට සිදු නොවේ, සාමාන්යයෙන් ප්රොටෝකෝල නෝඩ් වල ලිපිනයන් පිළිබඳ තොරතුරු ගැන සැලකිලිමත් නොවේ, පැකට් ඔවුන්ගේ ගමනාන්තයට ලබා දීම පමණක් වැදගත් වේ. මෙහිදී අපි නෝඩ් දෙකක් අතර මාර්ගයක් ස්ථාපිත කරන ප්රොටෝකෝලයක් සලකා බලමු.

දැන් අපට ප්‍රතිවිරුද්ධ දිශාවට යන දෙවන කණ්ඩායමක් ඇත:

වගුව 7: STUN සේවාදායකය මෙම අන්තර්ගතය සහිත පැකට්ටුවක් යවයි

මීලඟට, පැකට්ටුව රවුටරයේ බාහිර අතුරු මුහුණත වෙත ළඟා වන තුරු ජාලය හරහා ගමන් කරයි r1. පැකේජය ඔහු සඳහා අදහස් නොකරන බව රවුටරය තේරුම් ගනී. ඔහු එය තේරුම් ගන්නේ කෙසේද? මෙය සොයාගත හැක්කේ වරායෙන් පමණි. වරාය 888 ඔහු තම පුද්ගලික අරමුණු සඳහා භාවිතා නොකරයි, නමුත් යාන්ත්රණය සඳහා භාවිතා කරයි NAT. එබැවින්, රවුටරය මෙම වගුව දෙස බලයි. තීරුව දෙස බලයි බාහිර වරායසහ ගැලපෙන තන්තුවක් සොයයි ඩෙස්ට් වරායඑන පැකේජයෙන්, එනම් 888 .

අභ්යන්තර IP අභ්යන්තර වරාය බාහිර IP බාහිර වරාය
192.168.0.200 35777 10.50.200.5 888

වගුව 8: NAT වගුව

එවැනි රේඛාවක් පැවතීම අපගේ වාසනාවකි. එය වාසනාවන්ත නොවේ නම්, පැකට්ටුව සරලව ඉවත දමනු ඇත. දැන් ඔබට මෙම පැකට්ටුව යැවිය යුත්තේ කුමන උපජාල නෝඩ් වලටද යන්න තේරුම් ගත යුතුය. අපි ඉක්මන් නොවී, මෙම යාන්ත්‍රණයේ වරායන්හි වැදගත්කම නැවත සලකා බලමු. ඒ සමගම, උපජාලයේ නෝඩ් දෙකක් බාහිර ජාලයට ඉල්ලීම් යැවිය හැක. එවිට, පළමු නෝඩය සඳහා රවුටරය වරායක් සමඟ පැමිණියේ නම් 888 , ඊට පස්සේ තත්පරයට ඔහු වරායක් සමඟ එනවා 889 . මෙය සිදු වූ බව සිතන්න, එනම් මේසය r1_natඒ වගේ

වගුව 10: රවුටරය වංචා කිරීමේ ග්‍රාහක ලිපිනය

src IP Src PORT ඩෙස්ට් IP ඩෙස්ට් වරාය
12.62.100.200 6000 192.168.0.200 35777

වගුව 11: රවුටරය ග්රාහක ලිපිනය වෙනස් කළේය

පැකට්ටුව සාර්ථකව නෝඩ් වෙත පැමිණේ p1සහ පැකට්ටුවේ අන්තර්ගතය දෙස බැලීමෙන්, නෝඩය එහි බාහිර ගැන ඉගෙන ගනී IPලිපිනය, එනම් බාහිර ජාලයේ රවුටරයේ ලිපිනය. රවුටරය හරහා ගමන් කරන වරාය ද එය දනී NAT.

ඊළඟට කුමක් ද? මේ සියල්ලෙන් ඇති ප්‍රයෝජනය කුමක්ද? ප්රතිලාභය යනු වගුවේ ඇතුළත් කිරීමකි r1_nat. දැන් නම් කවුරුහරි රවුටරයට එවයි r1වරාය පැකේජය 888 , එවිට රවුටරය මෙම පැකට්ටුව සත්කාරක වෙත යොමු කරනු ඇත p1. මේ අනුව, සැඟවුණු නෝඩයට කුඩා පටු මාර්ගයක් නිර්මාණය විය p1.

ඉහත උදාහරණයෙන්, ඔබට එය ක්‍රියාත්මක වන ආකාරය පිළිබඳ යම් අදහසක් ලබා ගත හැකිය. NATසහ සාරය STUNසේවාදායකය. සාමාන්යයෙන්, යාන්ත්රණය ICEසහ STUN/TURNසේවාදායකයන් ඉලක්ක කර ඇත්තේ සීමාවන් ජය ගැනීම පමණි NAT.

නෝඩය සහ සේවාදායකය අතර රවුටර එකකට වඩා තිබිය හැක, නමුත් කිහිපයක්. මෙම අවස්ථාවෙහිදී, සේවාදායකයට සමාන ජාලයකට ඇතුල් වන පළමු රවුටරයේ ලිපිනය නෝඩයට ලැබෙනු ඇත. වෙනත් වචන වලින් කිවහොත්, අපි සම්බන්ධ වන රවුටරයේ ලිපිනය ලබා ගනිමු STUNසේවාදායකය. සදහා p2pසන්නිවේදනය යනු අපට අවශ්‍ය දෙයයි, එක් එක් රවුටරය තුළ අපට අවශ්‍ය රේඛාව මේසයට එකතු වන බව අප අමතක නොකළහොත් NAT. එබැවින් ආපසු යන මාර්ගය නැවතත් සුමට වනු ඇත.

හැරවීමසේවාදායකය වැඩි දියුණු කර ඇත STUNසේවාදායකය. මෙයින් එය වහාම අනුගමනය කරයි ඕනෑම දෙයක් හැරවීමසේවාදායකයට වැඩ කළ හැක්කේ කෙසේද සහ කෙසේද STUNසේවාදායකය. කෙසේ වෙතත්, ප්රතිලාභ ද ඇත. නම් p2pසන්නිවේදනය කළ නොහැක (ලෙස 3gජාල), ඉන්පසු සේවාදායකය පුනරාවර්තන මාදිලියට මාරු වේ ( රිලේ), එනම්, එය අතරමැදියෙකු ලෙස ක්රියා කරයි. ඇත්ත වශයෙන්ම, ඕනෑම දෙයක් ගැන p2pඑවිට එය ප්රශ්නයක් නොවේ, නමුත් යාන්ත්රණයේ රාමුවෙන් පිටත ICEනෝඩ් සිතන්නේ ඔවුන් කෙලින්ම සන්නිවේදනය කරන බවයි.

එය අවශ්ය වන්නේ කුමන අවස්ථාවලදීද? හැරවීමසේවාදායකය? ඇයි මදි STUNසේවාදායකයන්? කාරණය වන්නේ වර්ග කිහිපයක් තිබේ NAT. ඔවුන් එයම ප්රතිස්ථාපනය කරයි IPලිපිනය සහ වරාය, නමුත් ඒවායින් සමහරක් "ව්යාජකරණයට" එරෙහිව අතිරේක ආරක්ෂාවක් ඇත. උදාහරණයක් ලෙස, in සමමිතිකවගුව NATතවත් පරාමිති 2 ක් සුරකින ලදි - IPසහ දුරස්ථ ධාරකයේ වරාය. බාහිර ජාලයෙන් පැකට්ටුවක් හරහා ගමන් කරයි NATඅභ්‍යන්තර ජාලයට මූලාශ්‍ර ලිපිනය සහ වරාය වගුවේ සටහන් කර ඇති ඒවාට ගැලපෙන්නේ නම් පමණි. එබැවින්, අවධානය යොමු කිරීම STUNසේවාදායකය අසමත් වේ - වගුව NATලිපිනය සහ වරාය ගබඩා කරයි STUNසේවාදායකය සහ රවුටරයට පැකට්ටුවක් ලැබුණු විට WebRTCමැදිහත්කරු, ඔහු "අසත්‍ය" කර ඇති බැවින් ඔහුව ඉවත දමයි. ඔහු ආවේ නැත STUNසේවාදායකය.

මෙසේ හැරවීමමැදිහත්කරුවන් දෙදෙනාම පිටුපසින් සිටින විට සේවාදායකයක් අවශ්‍ය වේ සමමිතික NAT(එක් එක් තමන්ගේම සඳහා).

කෙටි සාරාංශය

ආයතන පිළිබඳ ප්‍රකාශ කිහිපයක් මෙන්න WebRTCසෑම විටම මතක තබා ගත යුතු ය. ඒවා ඉහත විස්තරාත්මකව විස්තර කර ඇත. කිසියම් ප්‍රකාශයක් ඔබට සම්පූර්ණයෙන්ම පැහැදිලි නැති බව පෙනේ නම්, අදාළ ඡේද නැවත කියවන්න.

  • මාධ්ය ප්රවාහය
    • වීඩියෝ සහ ශ්‍රව්‍ය දත්ත මාධ්‍ය ප්‍රවාහවලට අසුරා ඇත
    • මාධ්‍ය ප්‍රවාහයන් සෑදෙන මාධ්‍ය පීලි සමමුහුර්ත කරයි
    • විවිධ මාධ්‍ය ප්‍රවාහයන් සමමුහුර්ත නොවේ
    • මාධ්‍ය ප්‍රවාහයන් දේශීය සහ දුරස්ථ විය හැක, කැමරාවක් සහ මයික්‍රෆෝනයක් සාමාන්‍යයෙන් දේශීය එකට සම්බන්ධ වේ, දුරස්ථ ඒවා සංකේතාත්මක ආකාරයෙන් ජාලයෙන් දත්ත ලබා ගනී.
    • මාධ්‍ය පීලි වර්ග දෙකක් තිබේ - වීඩියෝ සඳහා සහ ශ්‍රව්‍ය සඳහා.
    • මාධ්‍ය ධාවන පථවලට සක්‍රිය / අක්‍රිය කිරීමේ හැකියාව ඇත
    • මාධ්‍ය ධාවන පථ සෑදී ඇත්තේ මාධ්‍ය නාලිකා මගිනි
    • මාධ්‍ය ධාවන පථ සෑදෙන මාධ්‍ය නාලිකා සමමුහුර්ත කරයි
    • මාධ්‍ය ප්‍රවාහ සහ මාධ්‍ය ධාවන පථවලට ඒවා වෙන්කර හඳුනාගත හැකි ලේබල ඇත
  • සැසි හසුරුව
    • ජාල නෝඩ් දෙකක් තාර්කිකව සම්බන්ධ කිරීමට සැසි විස්තරය භාවිතා කරයි
    • සැසි විස්තරය පිළිබඳ තොරතුරු ගබඩා කරයි ලබා ගත හැකි ක්රමවීඩියෝ සහ ශ්‍රව්‍ය දත්ත කේතනය කිරීම
    • WebRTCබාහිර සංඥා යාන්ත්‍රණයක් භාවිතා කරයි - සැසි විස්තර ඉදිරිපත් කිරීමේ කාර්යය ( sdp) යෙදුම මත වැටේ
    • තාර්කික සම්බන්ධතා යාන්ත්‍රණය අදියර දෙකකින් සමන්විත වේ - යෝජනාවක් ( පිරිනැමීම) සහ ප්රතිචාර ( පිළිතුර)
    • පිරිනැමීමකදී දේශීය මාධ්‍ය ප්‍රවාහයක් භාවිතා නොකර සැසි විස්තර උත්පාදනය කළ නොහැක ( පිරිනැමීම) සහ ප්‍රතිචාරයකදී දුරස්ථ සැසි විස්තරයක් භාවිතයෙන් තොරව කළ නොහැක ( පිළිතුර)
    • ප්රතිඵලයක් වශයෙන් විස්තරය ක්රියාත්මක කිරීම සඳහා ලබා දිය යුතුය WebRTC, සහ මෙම හසුරුව එකම ක්‍රියාත්මක කිරීමකින් දුරස්ථව හෝ දේශීයව ලබා ගත්තේද යන්න ගැටළුවක් නොවේ WebRTC
    • සැසි විස්තරය තරමක් සංස්කරණය කළ හැකිය
  • අපේක්ෂකයින්
    • අපේක්ෂක ( අයිස් අපේක්ෂකයා) යනු ජාලයේ නෝඩයේ ලිපිනයයි
    • නෝඩ් ලිපිනය ඔබේම විය හැකිය, නැතහොත් එය රවුටරයක ලිපිනය හෝ විය හැකිය හැරවීමසේවාදායකයන්
    • සෑම විටම බොහෝ අපේක්ෂකයින් සිටී
    • අපේක්ෂකයා සමන්විත වේ IPලිපිනය, වරාය සහ ප්රවාහන වර්ගය ( TCPහෝ UDP)
    • ජාලයක නෝඩ් දෙකක් අතර භෞතික සම්බන්ධතාවයක් ඇති කිරීමට අපේක්ෂකයින් භාවිතා කරයි
    • අපේක්ෂකයන් ද සංඥා යාන්ත්‍රණය හරහා යැවිය යුතුය
    • අයදුම්කරුවන් ද ක්‍රියාත්මක කිරීම් සමත් විය යුතුය WebRTC, නමුත් දුරස්ථ පමණි
    • සමහර ක්‍රියාත්මක කිරීම් වලදී WebRTCඅපේක්ෂකයින් සමත් විය හැක්කේ සැසි විස්තරය සැකසීමෙන් පසුව පමණි
  • STUN/TURN/ICE/NAT
    • NAT- බාහිර ජාලයකට ප්රවේශය ලබා දීම සඳහා යාන්ත්රණයක්
    • නිවසේ රවුටර විශේෂ වගුවකට සහය දක්වයි NAT
    • රවුටරය පැකට් වල ඇති ලිපින ප්‍රතිස්ථාපනය කරයි - පැකට්ටුව බාහිර ජාලයට ගියහොත් මූලාශ්‍ර ලිපිනය සහ ගමනාන්ත ලිපිනය අභ්‍යන්තර ජාලයේ ධාරක ලිපිනය සමඟ, පැකට්ටුව බාහිර ජාලයෙන් පැමිණියේ නම්
    • බාහිර ජාලයකට බහු-නාලිකා ප්රවේශය ලබා දීම සඳහා NATවරායන් භාවිතා කරයි
    • ICE- බයිපාස් යාන්ත්රණය NAT
    • STUNසහ හැරවීමසේවාදායකයන් - මඟ හැරීම සඳහා උපකාරක සේවාදායකයන් NAT
    • STUNසේවාදායකය ඔබට වගුවේ අවශ්‍ය ඇතුළත් කිරීම් සෑදීමට ඉඩ දෙයි NAT, සහ නෝඩයේ බාහිර ලිපිනය ද ආපසු ලබා දෙයි
    • හැරවීමසේවාදායකය සාමාන්‍යකරණය කරයි STUNයාන්ත්රණය සහ එය සෑම විටම ක්රියා කරයි
    • නරකම අවස්ථාවලදී හැරවීමසේවාදායකය අතරමැදියෙකු ලෙස භාවිතා වේ ( රිලේ), එනම් p2pසේවාදායක-සේවාදායක-සේවාදායක සම්බන්ධතාවයක් බවට පත් වේ.

අද, WebRTC යනු බ්‍රව්සර්වල ශ්‍රව්‍ය සහ දෘශ්‍ය ප්‍රවාහය සඳහා "උණුසුම්" තාක්‍ෂණයයි. HTTP ප්‍රවාහය සහ ෆ්ලෑෂ් වැනි කොන්සර්වේටිව් තාක්‍ෂණ, පටිගත කළ අන්තර්ගතය (ඉල්ලුම මත වීඩියෝ) බෙදා හැරීම සඳහා වඩාත් සුදුසු වන අතර තත්‍ය කාලීන සහ මාර්ගගත විකාශන අනුව WebRTC ට වඩා සැලකිය යුතු ලෙස පහත් වේ, i.e. අවම වීඩියෝ ප්‍රමාදයක් අවශ්‍ය වන විට, "සජීවී" සිදුවන්නේ කුමක්දැයි බැලීමට නරඹන්නන්ට ඉඩ සලසයි.

උසස් තත්ත්වයේ තත්‍ය කාලීන සන්නිවේදනයේ හැකියාව පැමිණෙන්නේ WebRTC ගෘහ නිර්මාණ ශිල්පය තුළින්ම වන අතර එහිදී UDP ප්‍රොටෝකෝලය වීඩියෝ ප්‍රවාහයන් ප්‍රවාහනය කිරීමට භාවිතා කරයි, එය අවම ප්‍රමාදයන් සමඟ වීඩියෝ සම්ප්‍රේෂණය කිරීමේ සම්මත පදනම වන අතර තත්‍ය කාලීන සන්නිවේදන පද්ධතිවල බහුලව භාවිතා වේ.

වීඩියෝ මූලාශ්‍රය, අවසාන පරිශීලකයන් සහ විසඳුම සමඟ අන්තර්ක්‍රියාකාරී සන්නිවේදනයක් අවශ්‍ය වන සජීවී ප්‍රවාහ පද්ධති, වෙබ්නාර් සහ වෙනත් යෙදුම්වල සන්නිවේදන ප්‍රමාදය වැදගත් වේ.

WebRTC උත්සාහ කිරීමට තවත් හොඳ හේතුවක් අනිවාර්යයෙන්ම ප්‍රවණතාවකි. අද, සෑම ඇන්ඩ්‍රොයිඩ් ක්‍රෝම් බ්‍රවුසරයක්ම මෙම තාක්ෂණයට සහය දක්වයි, එමඟින් උපාංග මිලියන ගණනක් අමතර මෘදුකාංග සහ වින්‍යාස කිරීම් ස්ථාපනය නොකර විකාශනය නැරඹීමට සූදානම් බව සහතික කරයි.

WebRTC තාක්‍ෂණය ක්‍රියාකාරීව පරීක්‍ෂා කර එය මත සරල මාර්ගගත විකාශනයක් දියත් කිරීම සඳහා, අපි Flashphoner WebRTC Media & Broadcasting Server සේවාදායක මෘදුකාංගය භාවිතා කළෙමු. විශේෂාංග මගින් WebRTC ප්‍රවාහයන් එකකින් සිට බොහෝ ප්‍රකාරයට විකාශනය කිරීමේ හැකියාව ප්‍රකාශ කරයි, එසේම RTSP ප්‍රොටෝකෝලය හරහා IP කැමරා සහ වීඩියෝ නිරීක්ෂණ පද්ධති සඳහා සහය දක්වයි; මෙම සමාලෝචනයේදී, අපි වෙබ්-වෙබ් විකාශන සහ ඒවායේ විශේෂාංග කෙරෙහි අවධානය යොමු කරමු.

WebRTC මාධ්‍ය සහ විකාශන සේවාදායකය ස්ථාපනය කිරීම

සඳහා නිසා වින්ඩෝස් පද්ධතිසේවාදායක අනුවාදයක් නොතිබූ අතර, මට VMWare + Linux වැනි අතථ්‍ය යන්ත්‍රයක් ස්ථාපනය කිරීමට අවශ්‍ය නොවීය, නිවසේ මාර්ගගත විකාශන පරීක්ෂා කරන්න වින්ඩෝස් පරිගණකයවැඩේ හරි ගියේ නෑ. කාලය ඉතිරි කර ගැනීම සඳහා, අපි මෙවැනි ක්ලවුඩ් සත්කාරකත්වය පිළිබඳ උදාහරණයක් ගැනීමට තීරණය කළෙමු:

එය ඇම්ස්ටර්ඩෑම් දත්ත මධ්‍යස්ථානයක පෙර-ස්ථාපිත මෘදුකාංගයක් නොමැතිව Centos x86_64 අනුවාදය 6.5 විය. මේ අනුව, අප සතුව ඇත්තේ සේවාදායකයක් සහ ssh ප්‍රවේශය පමණි. හුරුපුරුදු අය සඳහා කොන්සෝල විධාන Linux, WebRTC සේවාදායකයක් ස්ථාපනය කිරීම පහසු සහ වේදනා රහිත බවට පොරොන්දු වේ. ඉතින් අපි කළ දේ:

1. සංරක්ෂිතය බාගන්න:

$wget https://website/download-wcs5-server.tar.gz

2. අසුරන්න:

$tar -xzf බාගත-wcs5-server.tar.gz

3. ස්ථාපනය කරන්න:

$cd FlashphonerWebCallServer

ස්ථාපනය අතරතුර, සේවාදායකයේ IP ලිපිනය ඇතුළත් කරන්න: XXX.XXX.XXX.XXX

4. බලපත්‍රය සක්‍රිය කරන්න:

$cd /usr/local/FlashphonerWebCallServer/bin

$./activation.sh

5. WCS සේවාදායකය ආරම්භ කරන්න:

$service webcallserver ආරම්භය

6. ලොගය පරීක්ෂා කරන්න:

$tail - f /usr/local/FlashphonerWebCallServer/logs/flashphoner_manager.log

7. ක්රියාවලි දෙකක් ක්රියාත්මක වන බව පරීක්ෂා කරන්න:

$ps aux | grep Flashphoner

ස්ථාපන ක්රියාවලිය සම්පූර්ණයි.

WebRTC සජීවී ප්‍රවාහ පරීක්ෂා කිරීම

විකාශන පරීක්ෂා කිරීම සරල කාරණයක් බවට පත් විය. සේවාදායකයට අමතරව, ජාවාස්ක්‍රිප්ට්, HTML සහ CSS ගොනු දුසිමකින් සමන්විත වෙබ් සේවාලාභියෙකු ඇත, ස්ථාපන අදියරේදී අප විසින් /var/www/html ෆෝල්ඩරය වෙත යොදවා ඇත. කළ යුතු එකම දෙය නම්, සේවාදායකයේ IP ලිපිනය flashphoner.xml වින්‍යාසය තුළට ඇතුළු කිරීම පමණි, එවිට වෙබ් සේවාදායකයාට HTML5 Websockets හරහා සේවාදායකයට සම්බන්ධතාවයක් ඇති කර ගත හැකිය. පරීක්ෂණ ක්‍රියාවලිය විස්තර කරමු.

1. Chrome බ්‍රවුසරයේ පරීක්ෂණ සේවාලාභියාගේ index.html පිටුව විවෘත කරන්න:

2. විකාශනය ආරම්භ කිරීම සඳහා, ඔබ තිරයේ මැද ඇති "ආරම්භක" බොත්තම ක්ලික් කළ යුතුය.
මෙය කිරීමට පෙර, ඔබ වෙබ් කැමරාව සම්බන්ධ වී ඇති බව සහ යාමට සූදානම් බව තහවුරු කර ගත යුතුය. වෙබ් කැමරාවක් සඳහා විශේෂ අවශ්‍යතා නොමැත, උදාහරණයක් ලෙස, අපි 1280 × 800 විභේදනයක් සහිත සම්මත බිල්ට් ලැප්ටොප් කැමරාවක් භාවිතා කළෙමු.

Chrome බ්‍රවුසරය අනිවාර්යයෙන්ම කැමරාවට සහ මයික්‍රෆෝනයට ප්‍රවේශය ඉල්ලා සිටින අතර එමඟින් පරිශීලකයා තම වීඩියෝව අන්තර්ජාල සේවාදායකයට යවනු ලබන බව තේරුම් ගෙන ඔහුට එසේ කිරීමට ඉඩ සලසයි.

3. අතුරු මුහුණත කැමරාවේ සිට WebRTC සේවාදායකය වෙත වීඩියෝ ප්‍රවාහයේ සාර්ථක විකාශනයක් නියෝජනය කරයි. ඉහළ දකුණු කෙළවරේ, දර්ශකය මඟින් ප්‍රවාහය සේවාදායකයට යන බව පෙන්නුම් කරයි, පහළ කෙළවරේ වීඩියෝව යැවීම නැවැත්වීමට "Stop" බොත්තමක් ඇත.

පහත ලින්ක් එක බලන්න. එහි මෙම ප්‍රවාහය සඳහා අනන්‍ය හඳුනාගැනීමක් අඩංගු වේ, එබැවින් ඕනෑම අයෙකුට දසුනට එක් විය හැක. මෙම සබැඳිය බ්‍රව්සරයකින් විවෘත කරන්න. එය පසුරු පුවරුවට පිටපත් කිරීමට, ඔබ "පිටපත් කරන්න" බොත්තම මත ක්ලික් කළ යුතුය.

webinars, දේශන, මාර්ගගත වීඩියෝ විකාශන හෝ අන්තර්ක්‍රියාකාරී රූපවාහිනිය වැනි සැබෑ යෙදුම්වල, සංවර්ධකයින්ට මෙම හඳුනාගැනීමේ බෙදා හැරීම ඇතැම් නරඹන්නන් කණ්ඩායම් වෙත ක්‍රියාත්මක කිරීමට සිදුවනු ඇත, එවිට ඔවුන්ට අවශ්‍ය ප්‍රවාහවලට සම්බන්ධ විය හැක, නමුත් මෙය යෙදුමේ තර්කයයි. WebRTC මාධ්‍ය සහ විකාශන සේවාදායකය එය බලපාන්නේ නැත, නමුත් වීඩියෝ බෙදා හැරීම සමඟ පමණක් කටයුතු කරයි.

5. සම්බන්ධතාවය ස්ථාපිත කර ඇති අතර නරඹන්නා තිරය මත ධාරාව දකියි. දැන් ඔහුට සබැඳිය වෙනත් කෙනෙකුට යැවීමට, ප්‍රවාහ පසුධාවනය නැවැත්වීමට හෝ පහළ දකුණු කෙළවරේ ඇති පාලන භාවිතයෙන් සම්පූර්ණ තිර මාදිලිය සක්‍රීය කිරීමට හැකිය.

සබැඳි විකාශන සඳහා WebRTC සේවාදායක පරීක්ෂණ ප්‍රතිඵල

පරීක්ෂණ අතරතුර, ප්‍රමාදය පරිපූර්ණ බව පෙනෙන්නට තිබුණි. දත්ත මධ්‍යස්ථානයට පිං කිරීම මිලි තත්පර 100 ක් පමණ වූ අතර ප්‍රමාදය ඇසට නොපෙනුණි. මෙතැන් සිට, අපට උපකල්පනය කළ හැක්කේ සැබෑ ප්‍රමාදය බෆරින් කාලය සඳහා මිලි තත්පර දස දස 100ක් හෝ අඩු කිරීමක් බවයි. ෆ්ලෑෂ් වීඩියෝව හා සසඳන විට, ෆ්ලෑෂ් මෙම පරීක්ෂණ වලදී WebRTC තරම් හොඳින් ක්‍රියා නොකරයි. එබැවින්, ඔබ සමාන ජාලයක් මත ඔබේ අත ගෙන ගියහොත්, තිරයේ චලනය දැකිය හැක්කේ තත්පර එකකට / දෙකකට පසුවය.

ගුණාත්මකභාවය සම්බන්ධයෙන්, සමහර විට ඔබට චලනයන් මත කැට වෙන්කර හඳුනාගත හැකි බව අපි සටහන් කරමු. මෙය VP8 කෝඩෙක්හි ස්වභාවයට අනුකූල වන අතර එහි ප්‍රධාන ඉලක්කය වන්නේ පිළිගත හැකි ගුණාත්මක භාවයෙන් සහ සන්නිවේදන ප්‍රමාදයකින් තොරව තත්‍ය කාලීන වීඩියෝ සන්නිවේදනය සැපයීමයි.

සේවාදායකය ස්ථාපනය සහ වින්‍යාස කිරීම තරමක් පහසුය, එය ක්‍රියාත්මක කිරීමට කිසිදු බරපතල කුසලතා අවශ්‍ය නොවේ, උසස් පරිශීලකයෙකුගේ මට්ටමින් ලිනක්ස් පිළිබඳ දැනුමක් හැර ssh සහ භාවිතා කිරීම හරහා කොන්සෝලයෙන් විධාන ක්‍රියාත්මක කළ හැකිය. පෙළ සංස්කාරකය. එහි ප්‍රතිඵලයක් වශයෙන්, අපි බ්‍රවුසර අතර එකින් එක-බොහෝ අන්තර්ජාල විකාශනයක් පිහිටුවීමට සමත් විය. ප්‍රවාහයට අමතර නරඹන්නන් සම්බන්ධ කිරීම ද ගැටලු ඇති කළේ නැත.

විකාශන ගුණත්වය webinars සහ මාර්ගගත විකාශන සඳහා බෙහෙවින් පිළිගත හැකි විය. සමහර ප්‍රශ්න ඇති වූ එකම දෙය වීඩියෝවේ විභේදනයයි. කැමරාව 1280x800 සඳහා සහය දක්වයි, නමුත් පරීක්ෂණ පින්තූරයේ විභේදනය 640x480 ට බෙහෙවින් සමාන ය. පෙනෙන විදිහට, මෙම ගැටළුව සංවර්ධකයින් සමඟ පැහැදිලි කළ යුතුය.

වෙබ් කැමරාවකින් පරීක්ෂණ විකාශනය පිළිබඳ වීඩියෝව
WebRTC සේවාදායකය හරහා

බ්‍රවුසරයෙන් ඇමතීමේ තාක්ෂණය වසර ගණනාවක් පුරා පවතී: Java, ActiveX, Adobe Flash... පසුගිය වසර කිහිපය තුළ, ප්ලගින සහ ඉවත්ව ගිය බව පැහැදිලි විය අතථ්‍ය යන්ත්‍රඒවා පහසුවකින් බැබළෙන්නේ නැත (මම කිසිවක් ස්ථාපනය කළ යුත්තේ ඇයි?) සහ, වඩාත්ම වැදගත් ලෙස, ආරක්ෂාව. කුමක් කරන්න ද? පිටවීමක් තිබේ!

මෑතක් වන තුරුම, IP දුරකථන හෝ වීඩියෝ සඳහා IP ජාල වල ප්‍රොටෝකෝල කිහිපයක් භාවිතා කර ඇත: SIP, දර්ශනයෙන් පිටතට එන වඩාත් පොදු ප්‍රොටෝකෝලය, H.323 සහ MGCP, Jabber/Jingle (Gtalk හි භාවිතා වේ), අර්ධ-විවෘත Adobe RTMP* සහ, ඇත්ත වශයෙන්ම, සංවෘත ස්කයිප්. Google විසින් ආරම්භ කරන ලද WebRTC ව්‍යාපෘතිය, සෑම දෙයක්ම අනවශ්‍ය බවට පත් කරමින් IP සහ වෙබ් දුරකථන ලෝකය හැරවීමට උත්සාහ කරයි. මෘදු දුරකථනස්කයිප් ඇතුළුව. WebRTC දැන් සෑම උපාංගයකම පාහේ ස්ථාපනය කර ඇති බ්‍රවුසරය තුළ සියලුම සන්නිවේදන හැකියාවන් කෙලින්ම ක්‍රියාත්මක නොකරයි, නමුත් ඒ සමඟම බ්‍රව්සර් පරිශීලකයින් අතර වඩාත් සාමාන්‍ය සන්නිවේදන කාර්යයක් විසඳීමට උත්සාහ කරයි (විවිධ දත්ත හුවමාරුව, තිර විකාශනය, ලේඛන සමඟ සහයෝගීතාව සහ තවත් බොහෝ).

වෙබ් සංවර්ධකයෙකු විසින් WebRTC

වෙබ් සංවර්ධකයෙකුගේ දෘෂ්ටි කෝණයෙන්, WebRTC ප්රධාන කොටස් දෙකකින් සමන්විත වේ:

  • දේශීය සම්පත් වලින් මාධ්‍ය ප්‍රවාහ පාලනය කිරීම (කැමරාව, මයික්‍රෆෝනය හෝ තිරය දේශීය පරිගණකය) MediaStream වස්තුවක් ආපසු ලබා දෙන navigator.getUserMedia ක්‍රමය මඟින් ක්‍රියාත්මක වේ;
  • සන්නිවේදන ක්‍රම නිර්වචනය කිරීම සහ ඒවායේ සෘජු සම්ප්‍රේෂණය ඇතුළුව මාධ්‍ය ප්‍රවාහ උත්පාදනය කරන උපාංග අතර peer-to-peer සන්නිවේදනය - RTCPeerConnection objects (ශ්‍රව්‍ය සහ දෘශ්‍ය ප්‍රවාහ යැවීම සහ ලබා ගැනීම සඳහා) සහ RTCDataChannel (බ්‍රවුසරයෙන් දත්ත යැවීම සහ ලබා ගැනීම සඳහා).

අපි මොකද කරන්නේ?

WebRTC මත පදනම් වූ වෙබ් සොකට් භාවිතයෙන් බ්‍රව්සර් අතර සරලම බහු ක්‍රීඩක වීඩියෝ කතාබස් සංවිධානය කරන්නේ කෙසේදැයි අපි සොයා බලමු. ජූනි 24 දින නිකුත් කරන ලද Firefox 22, ඔවුන් සමඟ පාහේ හසු වුවද, WebRTC අනුව වඩාත්ම දියුණු බ්‍රව්සර් ලෙස Chrome/Chromium අත්හදා බැලීම ආරම්භ කරමු. ප්‍රමිතිය තවමත් සම්මත කර නොමැති බව පැවසිය යුතු අතර, API අනුවාදයෙන් අනුවාදයට වෙනස් විය හැකිය. සියලුම උදාහරණ Chromium 28 හි පරීක්ෂා කර ඇත. සරල බව සඳහා, අපි කේතයේ පිරිසිදුකම සහ හරස් බ්‍රවුසර ගැළපුම නිරීක්ෂණය නොකරමු.

මාධ්ය ප්රවාහය

පළමු සහ සරලම WebRTC සංරචකය MediaStream වේ. එය දේශීය පරිගණකයේ කැමරාව සහ මයික්‍රෆෝනය වෙතින් මාධ්‍ය ප්‍රවාහ වෙත ප්‍රවේශය බ්‍රවුසරයට සපයයි. Chrome හි, මෙයට navigator.webkitGetUserMedia() ශ්‍රිතය ඇමතීමට අවශ්‍ය වේ (ප්‍රමිතිය තවම අවසන් කර නොමැති නිසා, සියලුම කාර්යයන් උපසර්ගයක් සමඟ පැමිණේ, සහ ෆයර්ෆොක්ස් හි එම ශ්‍රිතයම navigator.mozGetUserMedia() ලෙස හැඳින්වේ). එය ඇමතූ විට, කැමරාව සහ මයික්‍රෆෝනය වෙත ප්‍රවේශ වීමට ඉඩ දෙන ලෙස පරිශීලකයාගෙන් විමසනු ඇත. ඇමතුම දිගටම කරගෙන යාමට හැකි වනු ඇත්තේ පරිශීලකයාගේ කැමැත්ත ලබා දීමෙන් පසුව පමණි. අවශ්‍ය මාධ්‍ය ප්‍රවාහයේ පරාමිති සහ ආපසු ඇමතුම් ශ්‍රිත දෙක මෙම ශ්‍රිතයට පරාමිති ලෙස සම්මත කර ඇත: පළමුවැන්න කැමරාවට/මයික්‍රොෆෝනයට සාර්ථක ප්‍රවේශයකදී, දෙවැන්න - දෝෂයක් ඇති වුවහොත් කැඳවනු ලැබේ. පළමුව, බොත්තමක් සහ මූලද්‍රව්‍යයක් සහිත rtctest1.html HTML ගොනුවක් නිර්මාණය කරමු

WebRTC - පළමු දැන හඳුනා ගැනීම


Microsoft CU-RTC-Web

Google හි මුලපිරීමට ප්‍රතිචාර වශයෙන්, එය වහාම CU-RTC-Web (html5labs.interoperabilitybridges.com/cu-rtc-web/cu-rtc-web ලෙස හඳුන්වන තමන්ගේම නොගැලපෙන අභිරුචි ප්‍රභේදයක් නිකුත් නොකළේ නම් Microsoft Microsoft නොවේ. htm). IE හි කොටස, දැනටමත් කුඩා වුවත්, ස්කයිප් භාවිතා කරන්නන් සංඛ්යාව Microsoft වෙත Google තල්ලු කිරීමට බලාපොරොත්තුවක් ලබා දෙයි, මෙම ප්රමිතිය බ්රවුසරයේ භාවිතා කරනු ඇතැයි උපකල්පනය කළ හැකිය. ස්කයිප් අනුවාද. ගූගල් ප්‍රමිතිය මූලික වශයෙන් බ්‍රවුසරයෙන් බ්‍රවුසරයට සන්නිවේදනය කෙරෙහි අවධානය යොමු කරයි; ඒ අතරම, හඬ ගමනාගමනයේ වැඩි ප්‍රමාණයක් තවමත් සාම්ප්‍රදායික දුරකථන ජාලයේ පවතින අතර, එය සහ IP ජාල අතර දොරටු අවශ්‍ය වන්නේ භාවිතයේ පහසුව හෝ වේගවත් බෙදා හැරීම සඳහා පමණක් නොව, තවත් ක්‍රීඩකයින්ට ඉඩ සලසන මුදල් ඉපැයීමේ මාධ්‍යයක් ලෙස ය. ඒවා සංවර්ධනය කරන්න. වෙනත් ප්‍රමිතියක පෙනුම එකවර නොගැලපෙන තාක්ෂණයන් දෙකකට සහය දැක්වීමට සංවර්ධකයින්ට අප්‍රසන්න අවශ්‍යතාවයක් ඇති කිරීමට පමණක් නොව, අනාගතයේදී පරිශීලකයාට හැකි ක්‍රියාකාරීත්වය සහ පවතින තාක්ෂණික විසඳුම් පිළිබඳ පුළුල් තේරීමක් ලබා දිය හැකිය. බලාගෙන ඉන්න.

දේශීය නූල් සබල කරන්න

ඇතුළත ටැග්අපගේ HTML ගොනුව තුළ, මාධ්‍ය ප්‍රවාහය සඳහා ගෝලීය විචල්‍යයක් ප්‍රකාශ කරමු:

VarlocalStream = null;

getUserMedia ක්‍රමයේ පළමු පරාමිතිය වන්නේ ඉල්ලා සිටින මාධ්‍ය ප්‍රවාහයේ පරාමිතීන් නියම කිරීමයි - උදාහරණයක් ලෙස, ශ්‍රව්‍ය හෝ දෘශ්‍ය සක්‍රීය කරන්න:

Var streamConsstraints = ( "ශ්‍රව්‍ය": සත්‍ය, "වීඩියෝ": සත්‍ය ); // ශ්‍රව්‍ය සහ දෘශ්‍ය යන දෙකටම ප්‍රවේශය ඉල්ලන්න

හෝ අමතර විකල්ප සඳහන් කරන්න:

Var streamConstraints = ( "ශ්‍රව්‍ය": සත්‍ය, "වීඩියෝ": ( "අනිවාර්‍ය": ( "maxWidth": "320", "maxHeight": "240", "maxFrameRate": "5" ), "විකල්ප": ) );

getUserMedia ක්‍රමයේ දෙවන පරාමිතිය නම් එය සාර්ථක නම් කැඳවනු ලබන ඇමතුම් ශ්‍රිතයක් සම්මත කිරීමයි:

කාර්යය getUserMedia_success(stream) ( console.log("getUserMedia_success():", stream); localVideo1.src = URL.createObjectURL(stream); // මාධ්‍ය ප්‍රවාහය HTML මූලද්‍රව්‍ය වෙත අමුණන්න

තුන්වන පරාමිතිය ආපසු කැඳවීමේ ශ්‍රිතයක් වන අතර, දෝෂයක් ඇති වූ විට එය කැඳවනු ලබන දෝෂ හසුරුවන්නකි.

කාර්යය getUserMedia_error(දෝෂය) ( console.log("getUserMedia_error():", දෝෂය); )

getUserMedia ක්‍රමයට සත්‍ය ඇමතුම - පළමු බොත්තම එබූ විට මයික්‍රෆෝනයට සහ කැමරාවට ප්‍රවේශය ඉල්ලා සිටීම

කාර්යය getUserMedia_click() ( console.log("getUserMedia_click()"); navigator.webkitGetUserMedia(streamConstraints, getUserMedia_success, getUserMedia_error); )

දේශීයව විවෘත කරන ලද ගොනුවකින් මාධ්‍ය ප්‍රවාහයට ප්‍රවේශ විය නොහැක. අපි මෙය කිරීමට උත්සාහ කළහොත්, අපට දෝෂයක් ලැබේ:

NavigatorUserMediaError (කේතය: 1, PERMISSION_DENIED: 1)"

ප්රතිඵල ගොනුව සේවාදායකයට උඩුගත කරමු, බ්රවුසරයේ එය විවෘත කර, පෙනෙන ඉල්ලීමට ප්රතිචාර වශයෙන්, කැමරාව සහ මයික්රොෆෝනය වෙත ප්රවේශ වීමට ඉඩ දෙන්න.

ඔබට සැකසීම්, උසස් සැකසුම් සබැඳිය පෙන්වන්න, රහස්‍යතා කොටස, අන්තර්ගත බොත්තම තුළ Chrome ප්‍රවේශ වන්නේ කුමන උපාංගද යන්න තෝරාගත හැක. ෆයර්ෆොක්ස් සහ ඔපෙරා බ්‍රව්සර් වල, ප්‍රවේශය ලබා දෙන විට උපාංග කෙලින්ම පතන ලැයිස්තුවෙන් තෝරා ගනු ලැබේ.

HTTP ප්‍රොටෝකෝලය භාවිතා කරන විට, පිටුව පූරණය වූ පසු මාධ්‍ය ප්‍රවාහයකට ප්‍රවේශ වන සෑම අවස්ථාවකම අවසරය ඉල්ලා සිටිනු ඇත. HTTPS වෙත මාරු වීමෙන් ඔබට ඉල්ලීම ප්‍රදර්ශනය කිරීමට ඉඩ ලබා දේ, මාධ්‍ය ප්‍රවාහයට ප්‍රථම ප්‍රවේශය මත පමණි.

ටැබ් එකෙහි ඇති අයිකනයේ ස්පන්දන කවය සහ ලිපින තීරුවේ දකුණු පස ඇති කැමරා නිරූපකය වෙත අවධානය යොමු කරන්න:

RTCMediaConnection

RTCMediaConnection - සහභාගිවන්නන් අතර ජාලය හරහා මාධ්‍ය ප්‍රවාහයන් පිහිටුවීමට සහ මාරු කිරීමට නිර්මාණය කර ඇති වස්තුවකි. මීට අමතරව, මෙම වස්තුව මාධ්‍ය සැසි විස්තරයක් (SDP) උත්පාදනය කිරීම, NAT හරහා ගමන් කිරීම සඳහා ICE අපේක්ෂකයින් පිළිබඳ තොරතුරු ලබා ගැනීම හෝ ගිනි පවුර(දේශීය සහ STUN හරහා) සහ TURN සේවාදායකය සමඟ අන්තර්ක්‍රියා. සෑම සහභාගිවන්නෙකුටම සම්බන්ධතාවයකට එක් RTCMediaConnection එකක් තිබිය යුතුය. මාධ්‍ය ප්‍රවාහයන් සංකේතනය කරන ලද SRTP ප්‍රොටෝකෝලය හරහා සම්ප්‍රේෂණය වේ.

සේවාදායක හැරෙන්න

ICE අපේක්ෂකයින් වර්ග තුනක් ඇත: සත්කාරක, srflx සහ රිලේ. ධාරකයේ දේශීයව ලබාගත් තොරතුරු අඩංගු වේ, srflx යනු බාහිර සේවාදායකයකට (STUN) පෙනෙන්නේ කෙසේද යන්නයි, සහ රිලේ යනු TURN සේවාදායකය හරහා ගමනාගමනය ප්‍රොක්සි කිරීම සඳහා වන තොරතුරු වේ. අපගේ සත්කාරක NAT පිටුපස සිටින්නේ නම්, සත්කාරක අපේක්ෂකයින් අඩංගු වේ දේශීය ලිපිනසහ නිෂ්ඵල වනු ඇත, srflx අපේක්ෂකයින් සමහර NAT වර්ග සඳහා පමණක් උපකාර කරනු ඇති අතර අතරමැදි සේවාදායකයක් හරහා ගමනාගමනය ගමන් කිරීමේ අවසාන බලාපොරොත්තුව වන්නේ රිලේය.

ලිපිනය 192.168.1.37 සහ port udp/34022 සහිත, සත්කාරක වර්ගයේ ICE අපේක්ෂකයෙකුගේ උදාහරණයක්:

A=අපේක්ෂක:337499441 2 udp 2113937151 192.168.1.37 34022 ටයිප් සත්කාරක පරම්පරාව 0

STUN/TURN සේවාදායක සඳහන් කිරීම සඳහා සාමාන්‍ය ආකෘතිය:

Var සේවාදායකයන් = ( "iceServers": [ ( "url": "stun:stun.stunprotocol.org:3478" ), ( "url": "හැරීම: [ඊමේල් ආරක්ෂිත]:port", " අක්තපත්‍ර ": "මුරපදය" ) ]);

අන්තර්ජාලයේ බොහෝ පොදු STUN සේවාදායකයන් ඇත. විශාල ලැයිස්තුවක්, උදාහරණයක් ලෙස, වේ. අවාසනාවකට, ඔවුන් ඉතා සුළු ගැටලු විසඳයි. STUN මෙන් නොව ප්‍රායෝගිකව පොදු TURN සේවාදායක නොමැත. මෙයට හේතුව TURN සේවාදායකය මාධ්‍ය ප්‍රවාහයන් තමන් හරහා ගමන් කරන අතර එමඟින් ජාල නාලිකාව සහ සේවාදායකයම සැලකිය යුතු ලෙස පූරණය කළ හැකිය. එබැවින්, TURN සේවාදායකයට සම්බන්ධ වීමට ඇති පහසුම ක්රමය වන්නේ එය ඔබම ස්ථාපනය කිරීමයි (පැහැදිලිවම, ඔබට පොදු IP එකක් අවශ්ය වනු ඇත). සියලුම සේවාදායකයන් අතරින්, මගේ මතය අනුව, හොඳම වන්නේ rfc5766-turn-server . එය යටතේ, Amazon EC2 සඳහා සූදානම් කළ රූපයක් පවා තිබේ.

TURN සමඟ, සෑම දෙයක්ම අප කැමති තරම් හොඳ නැත, නමුත් ක්‍රියාකාරී සංවර්ධනයක් සිදු වෙමින් පවතී, සහ ලිපි පරිවර්තනය හරහා ගමන් කිරීමේ ගුණාත්මක භාවය අනුව එය ස්කයිප් සමඟ සම්බන්ධ නොවන්නේ නම්, යම් කාලයකට පසු WebRTC යැයි මම බලාපොරොත්තු වෙමි. NAT) සහ ෆයර්වෝල්, එවිට අවම වශයෙන් සැලකිය යුතු ලෙස සමීප වේ.

RTCMediaConnection හට සම්බන්ධතාවයක් ස්ථාපිත කිරීම සඳහා පාලන තොරතුරු හුවමාරු කර ගැනීම සඳහා අතිරේක යාන්ත්‍රණයක් අවශ්‍ය වේ - එය මෙම දත්ත උත්පාදනය කළද, එය සම්ප්‍රේෂණය නොකරන අතර අනෙකුත් සහභාගිවන්නන් විසින් සම්ප්‍රේෂණය වෙන වෙනම ක්‍රියාත්මක කළ යුතුය.


සම්ප්‍රේෂණ ක්‍රමය තෝරා ගැනීම සංවර්ධකයාගේ වගකීමයි - අවම වශයෙන් අතින්. අවශ්‍ය දත්ත හුවමාරු වූ විගස, RTCMediaConnection ස්වයංක්‍රීයව මාධ්‍ය ප්‍රවාහ සකසනු ඇත (හැකි නම්, ඇත්ත වශයෙන්ම).

පිරිනැමීමේ-පිළිතුරු ආකෘතිය

මාධ්‍ය ප්‍රවාහ ස්ථාපනය කිරීමට සහ වෙනස් කිරීමට, පිරිනැමීමේ / පිළිතුරු ආකෘතිය (පිරිනැමීම / ප්‍රතිචාරය; RFC3264 හි විස්තර කර ඇත) සහ SDP ප්‍රොටෝකෝලය (සැසි විස්තර ප්‍රොටෝකෝලය) භාවිතා වේ. ඒවා SIP ප්රොටෝකෝලය මගින් ද භාවිතා වේ. මෙම ආකෘතිය තුළ, නියෝජිතයින් දෙදෙනෙකු කැපී පෙනේ: පිරිනැමීම - නව එකක් සෑදීමට හෝ පවතින එකක් වෙනස් කිරීමට SDP සැසි විස්තරයක් උත්පාදනය කරන තැනැත්තා (SDP පිරිනැමීම), සහ පිළිතුරු දෙන්නා - වෙනත් නියෝජිතයෙකුගෙන් SDP සැසි විස්තරයක් ලබාගෙන ප්‍රතිචාර දක්වන අයෙකි. එය ඔහුගේම සැසි විස්තරය සමඟින් (උත්තරය SDP). ඒ අතරම, පිරිවිතරයට ඉහළ මට්ටමේ ප්‍රොටෝකෝලයක් අවශ්‍ය වේ (උදාහරණයක් ලෙස, SIP හෝ අපගේ නඩුවේදී මෙන්, වෙබ් සොකට් හරහා තමන්ගේම), එය නියෝජිතයන් අතර SDP මාරු කිරීම සඳහා වගකිව යුතුය.

මාධ්‍ය ප්‍රවාහයන් සාර්ථකව ස්ථාපිත කිරීමට හැකි වන පරිදි RTCMediaConnections දෙකක් අතර දත්ත යැවීමට අවශ්‍ය දත්ත මොනවාද:

  • සම්බන්ධතාවය ආරම්භ කරන පළමු පාර්ශවය එය සම්ප්‍රේෂණය කිරීම ආරම්භ කිරීමට නියමිත මාධ්‍ය ප්‍රවාහයේ විය හැකි ලක්ෂණ විස්තර කරමින් SDP දත්ත ව්‍යුහයක් (SIP හි එකම අරමුණ සඳහා එකම ප්‍රොටෝකෝලය භාවිතා කරයි) සම්ප්‍රේෂණය කරන පිරිනැමීමක් සාදයි. මෙම දත්ත වාරණ දෙවන සහභාගිකයා වෙත මාරු කළ යුතුය. දෙවන සහභාගිකයා ඔහුගේ SDP සමඟ පිළිතුරක් ජනනය කර එය පළමුවැන්නා වෙත යවයි.
  • පළමු සහ දෙවන සහභාගිවන්නන් දෙදෙනාම ICE අපේක්ෂකයින් තීරණය කිරීමේ ක්‍රියා පටිපාටිය සිදු කරයි, දෙවන සහභාගිවන්නාට මාධ්‍ය ප්‍රවාහය ඔවුන් වෙත මාරු කළ හැකිය. අපේක්ෂකයින් හඳුනාගෙන ඇති පරිදි, ඔවුන් පිළිබඳ තොරතුරු වෙනත් සහභාගිවන්නෙකුට මාරු කළ යුතුය.

පිරිනැමීම ගොඩනැගීම

පිරිනැමීමක් සැකසීමට, අපට කාර්යයන් දෙකක් අවශ්‍ය වේ. එය සාර්ථක ලෙස ගොඩනැගීමේදී පළමුවැන්නා කැඳවනු ලැබේ. createOffer() ක්‍රමයේ දෙවන පරාමිතිය එය ක්‍රියාත්මක කිරීමේදී දෝෂයක් ඇති වූ විට (දේශීය ප්‍රවාහය දැනටමත් තිබේ නම්) නැවත කැඳවීමේ ශ්‍රිතයකි.

මීට අමතරව, සිදුවීම් හසුරුවන්නන් දෙදෙනෙකු අවශ්‍ය වේ: නව ICE අපේක්ෂකයෙකු නිර්වචනය කිරීමේදී onicecandidate සහ දුර පැත්තේ සිට මාධ්‍ය ප්‍රවාහයක් සම්බන්ධ කිරීමේදී onaddstream. අපි අපේ ගොනුව වෙත ආපසු යමු. මූලද්‍රව්‍ය සමඟ පේළි පසු HTML වෙත එක් කරන්න

සහ මූලද්රව්යය සමඟ රේඛාවෙන් පසුව


එසේම, JavaScript කේතය ආරම්භයේදී, අපි RTCPeerConnection සඳහා ගෝලීය විචල්‍යයක් ප්‍රකාශ කරන්නෙමු:

varpc1;

RTCPeerConnection කන්ස්ට්‍රක්ටරය ඇමතීමේදී, ඔබ STUN/TURN සේවාදායකයන් සඳහන් කළ යුතුය. වැඩි විස්තර සඳහා පැති තීරුව බලන්න; සියලුම සහභාගිවන්නන් එකම ජාලයක සිටින තාක් කල්, ඔවුන් අවශ්ය නොවේ.

var servers = null;

SDP පිරිනැමීම සඳහා විකල්ප

var offerConstraints = ();

CreateOffer() ක්‍රමයේ පළමු පරාමිතිය වන්නේ පිරිනැමීමක් සාර්ථක ලෙස ගොඩනැගීමෙන් පසු කැඳවීමේ ශ්‍රිතයකි

ශ්‍රිතය pc1_createOffer_success(desc) ( console.log("pc1_createOffer_success(): \ndesc.sdp:\n"+desc.sdp+"desc:", desc); pc1.setLocalDescription(desc); // RTCPeer එක ජනනය කර ඇත්තේ SDP setLocalDescription ක්‍රමය පිරිනැමීම. // ඈත පැත්ත එහි පිළිතුර SDP යවන විට, එය setRemoteDescription ක්‍රමය භාවිතයෙන් සැකසීමට අවශ්‍ය වනු ඇත // දෙවන පැත්ත ක්‍රියාත්මක වන තුරු, කිසිවක් නොකරන්න // pc2_receivedOffer(desc); )

දෙවන පරාමිතිය යනු නැවත ඇමතුම් ශ්‍රිතයක් වන අතර එය දෝෂයක් ඇති විට කැඳවනු ලැබේ

කාර්යය pc1_createOffer_error(දෝෂය)( console.log("pc1_createOffer_success_error(): error:", error); )

තවද ICE අයදුම්කරුවන් අර්ථ දක්වා ඇති පරිදි සමත් වන ආපසු කැඳවීමේ කාර්යයක් අපි ප්‍රකාශ කරන්නෙමු:

කාර්යය pc1_onicecandidate(event)( if (event.candidate) ( console.log("pc1_onicecandidate():\n"+ event.candidate.candidate.replace("\r\n", ""), event.candidate); // දෙවන පැත්ත ක්‍රියාත්මක වන තුරු කිසිවක් නොකරන්න // pc2.addIceCandidate(new RTCIceCandidate(event.candidate)); ) )

දුර පැත්තේ සිට මාධ්‍ය ප්‍රවාහයක් එක් කිරීම සඳහා ආපසු කැඳවීමේ කාර්යයක් (අනාගතය සඳහා, අපට දැනට ඇත්තේ එක් RTCPeerConnection එකක් පමණක් බැවින්):

කාර්යය pc1_onaddstream(සිද්ධිය) ( console.log("pc_onaddstream()"); remoteVideo1.src = URL.createObjectURL(event.stream); )

ඔබ “createOffer” බොත්තම මත ක්ලික් කළ විට, RTCPeerConnection එකක් සාදන්න, onicecandidate සහ onaddstream ක්‍රම සකසා, createOffer() ක්‍රමය ඇමතීමෙන් Offer SDP පිහිටුවීමට ඉල්ලන්න:

කාර්යය createOffer_click() ( console.log("createOffer_click()"); pc1 = නව webkitRTCPeerConnection(servers); // RTCPeerConnection pc1.onicecandidate = pc1_onicecandidate; // Callbackstream pfunction to process.Ion1candddc_pddc. / ආපසු ඇමතුම් ශ්‍රිතය ඈත පැත්තෙන් මාධ්‍ය ප්‍රවාහයක් ඇති විට, එය තවමත් නොපවතියි pc1.addStream(localStream); // ප්‍රාදේශීය මාධ්‍ය ප්‍රවාහය පසු කරන්න (එය දැනටමත් ලැබී ඇතැයි උපකල්පනය කරයි) pc1.createOffer(// සහ ඇත්ත වශයෙන්ම පිරිනැමීම pc1_createOffer_success පිහිටුවීමට ඉල්ලන්න, pc1_createOffer_error, offerConstraints); )

අපි ගොනුව rtctest2.html ලෙස සුරකිමු, එය සේවාදායකයට දමා, එය බ්‍රව්සරයකින් විවෘත කර එහි ක්‍රියාකාරිත්වය අතරතුර ජනනය වන දත්ත මොනවාදැයි කොන්සෝලයෙන් බලමු. එක් සහභාගිවන්නෙකු පමණක් සිටින බැවින් දෙවන වීඩියෝව තවම නොපෙන්වයි. SDP යනු මාධ්‍ය සැසි පරාමිතීන් පිළිබඳ විස්තරයක්, පවතින කෝඩෙක්ස්, මාධ්‍ය ප්‍රවාහ සහ ICE අපේක්ෂකයින් මෙම සහභාගිකයාට සම්බන්ධ වීමට හැකි විකල්ප බව මතක තබා ගන්න.

පිළිතුර SDP පිහිටුවීම සහ ICE අපේක්ෂකයින් හුවමාරු කිරීම

Offer SDP සහ ICE අපේක්ෂකයින් දෙකම අනෙක් පැත්තට යැවිය යුතු අතර, එහිදී, RTCPeerConnection වෙතින් ඒවා ලැබුණු පසු, පිරිනැමීමේ SDP සඳහා setRemoteDescription ක්‍රම අමතන්න සහ ඈත පැත්තෙන් ලැබෙන සෑම ICE අපේක්ෂකයෙකු සඳහාම addIceCandidate අමතන්න; ඒ හා සමානව තුළ ආපසු පැත්තේපිළිතුරු SDP සහ දුරස්ථ ICE අපේක්ෂකයින් සඳහා. පිළිතුර SDP පිරිනැමීමට සමානව පිහිටුවා ඇත; වෙනස නම් createOffer ක්‍රමය නොව createAnswer ක්‍රමය ලෙස හැඳින්වීම වන අතර මෙම RTCPeerConnection එකට පෙර setRemoteDescription ක්‍රමය ඇමතුම්කරුගෙන් ලැබුණු Offer SDP පසු කරයි.

අපි HTML වෙත තවත් වීඩියෝ අංගයක් එකතු කරමු:

පළමු එකෙහි ප්‍රකාශය යටතේ දෙවන RTCPeerConnection සඳහා ගෝලීය විචල්‍යයක්:

Varpc2;

පිරිනැමීම සහ පිළිතුරු SDP සැකසීම

පිළිතුරක් සැකසීම SDP පිරිනැමීමකට බෙහෙවින් සමාන ය. පිළිතුර සාර්ථක ලෙස සැකසීමට කැඳවන ලද ආපසු කැඳවීමේ කාර්යයේදී, පිරිනැමීම හා සමානව, අපි දේශීය විස්තරයක් ලබා දී ලැබුණු පිළිතුර SDP පළමු සහභාගිකයා වෙත ලබා දෙන්නෙමු:

කාර්යය pc2_createAnswer_success(desc) ( pc2.setLocalDescription(desc); console.log("pc2_createAnswer_success()", desc.sdp); pc1.setRemoteDescription(desc); )

පිළිතුර ජනනය කිරීමේදී දෝෂයක් ඇති වූ විට ඇමතීමේ ශ්‍රිතය පිරිනැමීමට සම්පූර්ණයෙන්ම සමාන වේ:

ශ්‍රිතය pc2_createAnswer_error(දෝෂය) ( console.log("pc2_createAnswer_error():", දෝෂය); )

පිළිතුරු SDP ජනනය සඳහා පරාමිතීන්:

Var answerConsstraints = ( "අනිවාර්ය": ( "OfferToReceiveAudio":true, "OfferToReceiveVideo":true );

දෙවන සහභාගිවන්නාට පිරිනැමීමක් ලැබුණු විට, RTCPeerConnection එකක් සාදා දීමනාව ලෙසම පිළිතුරක් සාදන්න:

කාර්යය pc2_receivedOffer(desc) ( console.log("pc2_receiveOffer()", desc); // පළමු pc2 = නව webkitRTCPeerConnection(servers); pc2.onicecandidate;//pcdicecandidate; ICE අපේක්ෂකයා pc2.onaddstream = pc_onaddstream; // ප්‍රවාහයක් දිස්වන විට, එය HTML වෙත සම්බන්ධ කරන්න

අපගේ උදාහරණයේ කොටසක් ලෙස, පළමු සහභාගිවන්නාගෙන් SDP පිරිනැමීම දෙවන සහභාගිකයා වෙත මාරු කිරීම සඳහා, pc1 ශ්‍රිතය තුළ අදහස් දක්වන්න. createOffer success() ඇමතුම් තන්තුව:

Pc2_receivedOffer(desc);

ICE අපේක්ෂකයින් පිරිසැකසුම් කිරීම ක්‍රියාවට නැංවීම සඳහා, පළමු සහභාගිවන්නාගේ ICE අපේක්ෂක සූදානම සිදුවීම් හසුරුවන්නා තුළ අදහස් දැක්වීමක් නොකරන්න pc1_onicecandidate() එහි සම්ප්‍රේෂණය දෙවැන්නට:

Pc2.addIceCandidate(නව RTCIceCandidate(event.candidate));

දෙවන සහභාගිවන්නාගේ ICE අපේක්ෂක සූදානම සිදුවීම් හසුරුවන්නා පළමු එකට කැඩපතක් වැනි ය:

කාර්යය pc2_onicecandidate(සිද්ධිය) ((event.candidate) නම් (console.log("pc2_onicecandidate():", event.candidate.candidate); pc1.addIceCandidate(new RTCIceCandidate(event.candidate)); )

පළමු සහභාගිවන්නාගෙන් මාධ්‍ය ප්‍රවාහයක් එක් කිරීම සඳහා ආපසු කැඳවීමේ කාර්යය:

කාර්යය pc2_onaddstream(සිද්ධිය) ( console.log("pc_onaddstream()"); remoteVideo2.src = URL.createObjectURL(event.stream); )

සම්බන්ධතාවයක් අවසන් කිරීම

අපි HTML හි තවත් බොත්තමක් එකතු කරමු

සහ සම්බන්ධතාවය අවසන් කිරීමට කාර්යයක්

කාර්යය btnHangupClick() ( // HTML මූලද්‍රව්‍ය වලින් දේශීය වීඩියෝ අක්‍රිය කරන්න

ඒක rtctest3.html විදියට save කරලා server එකට දාලා browser එකේ open කරමු. මෙම උදාහරණය එකම බ්‍රවුසර ටැබය තුළ RTCPeerConnections දෙකක් අතර ද්වි-මාර්ග මාධ්‍ය ප්‍රවාහය ක්‍රියාත්මක කරයි. SDP, ICE අපේක්ෂකයින් අතර හ්භාගීවනනන සහ අනෙකුත් තොරතුරු ජාලය හරහා හුවමාරු කිරීම සහ පිළිතුරු සැපයීම සංවිධානය කිරීම සඳහා, සෘජු ඇමතුමක් වෙනුවට, අපගේ නඩුවේදී, වෙබ් සොකට් භාවිතා කරමින් සහභාගිවන්නන් අතර හුවමාරුව ක්‍රියාත්මක කිරීමට අවශ්‍ය වනු ඇත. ක්රියා පටිපාටි.

තිර විකාශනය

getUserMedia ශ්‍රිතය සමඟින්, ඔබට පහත පරාමිති සඳහන් කිරීමෙන් තිරය ග්‍රහණය කර MediaStream ලෙස ප්‍රවාහය ද කළ හැක:

Var mediaStreamConstraints = (ශ්‍රව්‍ය: අසත්‍ය, වීඩියෝ: (අනිවාර්‍ය: (chromeMediaSource: "තිරය"), විකල්ප: ) );

තිරයට සාර්ථක ප්රවේශයක් සඳහා, කොන්දේසි කිහිපයක් සපුරාලිය යුතුය:

  • getUserMedia() හි chrome://flags/,chrome://flags/ හි තිරපිටපත් ධජය සබල කරන්න;
  • මූලාශ්‍ර ගොනුව HTTPS (SSL සම්භවය) හරහා බාගත කළ යුතුය;
  • ශ්‍රව්‍ය ප්‍රවාහය ඉල්ලා නොසිටිය යුතුය;
  • එකම බ්‍රව්සර් ටැබ් එකක බහුවිධ ඉල්ලීම් නොකළ යුතුය.

WebRTC සඳහා පුස්තකාල

WebRTC තවමත් සම්පූර්ණ වී නැතත්, එය පදනම් කරගත් පුස්තකාල කිහිපයක් දැනටමත් දර්ශනය වී ඇත. JsSIP නිර්මාණය කර ඇත්තේ Asterisk සහ Camalio වැනි SIP ස්විච සමඟ ක්‍රියා කරන බ්‍රවුසර පාදක මෘදුකාංග නිර්මාණය කිරීමටය. PeerJS දත්ත හුවමාරුව සඳහා P2P ජාල නිර්මාණය කිරීම සරල කරනු ඇති අතර, Holla විසින් බ්‍රව්සර් වලින් P2P සන්නිවේදනය සඳහා අවශ්‍ය සංවර්ධන ප්‍රමාණය අඩු කරනු ඇත.

Node.js සහ socket.io

ජාලය හරහා RTCPeerConnections දෙකක් අතර SDP සහ ICE අපේක්ෂකයින් හුවමාරු කිරීම සංවිධානය කිරීම සඳහා, අපි Socket.io මොඩියුලය සමඟ Node.js භාවිතා කරමු.

Node.js හි නවතම ස්ථාවර අනුවාදය (Debian/Ubuntu සඳහා) ස්ථාපනය කිරීම විස්තර කර ඇත.

$ sudo apt-get install python-software-properties python g++ කරන්න $ sudo add-apt-repository ppa:chris-lea/node.js $ sudo apt-get update $ sudo apt-get install nodejs

අන් අය සඳහා ස්ථාපනය OSවිස්තර කර ඇත

අපි පරීක්ෂා කරමු:

$ echo "sys=require("util"); sys.puts("පරීක්ෂණ පණිවිඩය");" > nodetest1.js $ nodejs nodetest1.js

npm (Node Package Manager) භාවිතා කරමින් socket.io සහ අතිරේක අධිවේගී මොඩියුලය ස්ථාපනය කරන්න:

$npm ස්ථාපනය socket.io express

සේවාදායක පැත්ත සඳහා nodetest2.js ගොනුවක් සෑදීමෙන් එය පරීක්ෂා කරමු:

$ nano nodetest2.js var යෙදුම = අවශ්‍ය ("එක්ස්ප්‍රස්")() , සේවාදායකය = අවශ්‍ය ("http").createServer(app) , io = require("socket.io").listen(server); server.listen(80); // port 80 නොමිලේ නම් app.get("/", function (req, res) ( // root page res.sendfile (__dirname + "/nodetest2.html") වෙත ප්‍රවේශ වන විට // HTML ගොනුව ලබා දෙන්න ) ); io.sockets.on("සම්බන්ධතාවය", ශ්‍රිතය (සොකට්) ( // සම්බන්ධතාවය මත socket.emit("සේවාදායක සිදුවීම", ( හලෝ: "ලෝක" )); // පණිවිඩය යවන්න socket.on("සේවාදායක සිදුවීම", ශ්‍රිතය (දත්ත) ( // සහ සේවාදායක console.log(data) වෙතින් පණිවිඩයක් පැමිණෙන විට සිදුවීම් හසුරුවන්නෙකු ප්‍රකාශ කරන්න; ));

සහ සේවාදායකයාගේ පැත්ත සඳහා nodetest2.html:

$nano nodetest2.html

අපි සේවාදායකය ආරම්භ කරමු:

$ sudo nodejs nodetest2.js

සහ http://localhost:80 (වරාය 80 මත දේශීයව ධාවනය කරන්නේ නම්) පිටුව බ්‍රවුසරයකින් විවෘත කරන්න. සෑම දෙයක්ම සාර්ථක නම්, බ්‍රවුසරයේ ජාවාස්ක්‍රිප්ට් කොන්සෝලය තුළ අපි බ්‍රවුසරය සහ සේවාදායකය අතර සම්බන්ධතා මත සිදුවීම් හුවමාරු කර ගනිමු.

වෙබ් සොකට් හරහා RTCPeerConnection අතර තොරතුරු හුවමාරු කිරීම

සේවාදායකයාගේ පැත්ත

අපි අපේ ප්‍රධාන උදාහරණය (rtcdemo3.html) නව නම rtcdemo4.html යටතේ සුරකිමු. මූලද්රව්යයේ socket.io පුස්තකාලය ඇතුළත් කරන්න:

සහ ජාවාස්ක්‍රිප්ට් ස්ක්‍රිප්ට් ආරම්භයේදී - වෙබ් සොකට් සම්බන්ධතාවය:

var socket = io.connect("http://localhost");

වෙබ් සොකට් හරහා පණිවිඩයක් යැවීමෙන් වෙනත් සහභාගිවන්නෙකුගේ කාර්යයන් සඳහා සෘජු ඇමතුමක් ප්‍රතිස්ථාපනය කරමු:

කාර්යය createOffer_success(desc) (... // pc2_receivedOffer(desc); socket.emit("Offer", desc); ... ) ශ්‍රිතය pc2_createAnswer_success(desc) (... // pc1.setRemoteDescription(desc); socket .emit("පිළිතුර", desc); ) ශ්‍රිතය pc1_onicecandidate(සිද්ධිය) (... // pc2.addIceCandidate(new RTCIceCandidate(event.candidate)); socket.emit("ice1", event.candidate); .. . ) ශ්‍රිතය pc2_onicecandidate(සිද්ධිය) (... // pc1.addIceCandidate(new RTCIceCandidate(event.candidate)); socket.emit("ice2", event.candidate); ... )

hangup() ශ්‍රිතය තුළ, දෙවන සහභාගිවන්නාගේ කාර්යයන් කෙලින්ම ඇමතීම වෙනුවට, අපි වෙබ් සොකට් හරහා පණිවිඩයක් යවන්නෙමු:

කාර්යය btnHangupClick() ( ... // remoteVideo2.src = ""; pc2.close(); pc2 = null; socket.emit("hangup", ()); )

සහ පණිවිඩ ලැබෙන හසුරුවන්න එකතු කරන්න:

Socket.on("යෝජනා", ශ්‍රිතය (දත්ත) ( console.log("socket.on("යෝජනා"):", දත්ත); pc2_receivedOffer(data); )); socket.on("පිළිතුර", ශ්‍රිතය (දත්ත) (e console.log("socket.on("පිළිතුර"):", දත්ත); pc1.setRemoteDescription(new RTCSessionDescription(data)); )); socket.on("ice1", ශ්‍රිතය (දත්ත) ( console.log("socket.on("ice1"):", දත්ත); pc2.addIceCandidate(new RTCIceCandidate(data)); )); socket.on("ice2", ශ්‍රිතය (දත්ත) ( console.log("socket.on("ice2"):", දත්ත); pc1.addIceCandidate(new RTCIceCandidate(data)); )); socket.on("hangup", ශ්‍රිතය (දත්ත) ( console.log("socket.on("hangup")):", දත්ත); remoteVideo2.src = ""; pc2.close(); pc2 = null; ));

සේවාදායක කොටස

සේවාදායකයේ පැත්තේ, nodetest2 ගොනුව rtctest4.js යන නව නම යටතේ සහ io.sockets.on("සම්බන්ධතාවය", ශ්‍රිතය (සොකට්) (... ) ශ්‍රිතය තුළ සේවාදායක පණිවිඩ ලැබීම සහ යැවීම එක් කරන්න:

Socket.on("Offer", function (data) ( // "Offer" පණිවිඩයක් ලැබෙන විට, // මෙම උදාහරණයේ එක් සේවාදායක සම්බන්ධතාවයක් පමණක් ඇති බැවින්, // එම socket හරහා පණිවිඩය ආපසු යවන්න socket.emit( "යෝජනා" , දත්ත); // යවන්නා හැර // සියලුම සම්බන්ධතා මත පණිවිඩය යොමු කිරීමට අවශ්‍ය නම්: // socket.broadcast.emit("යෝජනා", දත්ත); )); socket.on("පිළිතුර", ශ්‍රිතය (දත්ත) ( socket.emit("පිළිතුර", දත්ත); )); socket.on("ice1", ශ්‍රිතය (දත්ත) ( socket.emit("ice1", දත්ත); )); socket.on("ice2", ශ්‍රිතය (දත්ත) ( socket.emit("ice2", data); )); socket.on("hangup", ශ්‍රිතය (දත්ත) ( socket.emit("hangup", data); ));

ඊට අමතරව, HTML ගොනුවේ නම වෙනස් කරන්න:

// res.sendfile(__dirname + "/nodetest2.html"); // HTML ගොනුව යවන්න res.sendfile(__dirname + "/rtctest4.html");

සේවාදායක ආරම්භය:

$ sudo nodejs nodetest2.js

සේවාදායකයින් දෙදෙනාගේම කේතය එකම බ්‍රව්සර් පටිත්තක් තුළ ක්‍රියාත්මක වුවද, අපගේ උදාහරණයේ සහභාගිවන්නන් අතර සියලුම අන්තර්ක්‍රියා සම්පූර්ණයෙන්ම ජාලය හරහා සිදු කරනු ලබන අතර සහභාගිවන්නන් “පතුරුවා හැරීම” තවදුරටත් අපහසු නොවේ. කෙසේ වෙතත්, අප කළ දේ ද ඉතා සරල ය - මෙම තාක්ෂණයන් ඔවුන්ගේ භාවිතයේ පහසුව සඳහා හොඳය. සමහර විට රැවටිලිකාර වුවත්. විශේෂයෙන්ම, STUN/TURN සේවාදායකයන් නොමැතිව, අපගේ උදාහරණයට ලිපින පරිවර්තනය සහ ෆයර්වෝල් ඉදිරියේ ක්‍රියා කළ නොහැකි බව අමතක නොකළ යුතුය.

නිගමනය

ප්‍රතිඵලය වන උදාහරණය ඉතා කොන්දේසි සහිතයි, නමුත් අපි සිදුවීම් හසුරුවන්න තරමක් විශ්වීයකරණය කරන්නේ නම්, ඔවුන් ඇමතුම් සහ කැඳවන පාර්ශ්ව අතර වෙනස් නොවන පරිදි, pc1 සහ pc2 යන වස්තු දෙකක් වෙනුවට, RTCPeerConnection අරාවක් සාදා ක්‍රියාත්මක කරන්න. ගතික නිර්මාණයසහ මූලද්රව්ය ඉවත් කිරීම

WebRTC ට ස්තූතිවන්ත වන්නට, කටහඬ සහ වීඩියෝ සන්නිවේදනයන් පිළිබඳ අපගේ අවබෝධයේ පමණක් නොව, සමස්තයක් ලෙස අප අන්තර්ජාලය දකින ආකාරයෙහි ද විප්ලවයක් සිදුවනු ඇතැයි උපකල්පනය කළ හැකිය. WebRTC ස්ථානගත කර ඇත්තේ බ්‍රවුසරයෙන් බ්‍රවුසරයට ඇමතුම් තාක්‍ෂණයක් ලෙස පමණක් නොව, තත්‍ය කාලීන සන්නිවේදන තාක්‍ෂණයක් ලෙසය. අප විශ්ලේෂණය කළ වීඩියෝ සබැඳිය එහි කුඩා කොටසක් පමණි. විකල්පඑහි භාවිතය. RTCDataChannel භාවිතා කරමින් තිර බෙදාගැනීම (තිර බෙදාගැනීම) සහ සහයෝගීතාවය සහ බ්‍රවුසරය පදනම් කරගත් P2P අන්තර්ගත බෙදාහැරීමේ ජාලයක් සඳහා දැනටමත් උදාහරණ ඇත.




ඉහල