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

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

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

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

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

තත්‍ය කාලීන සන්නිවේදනයන් සපයන සියලුම තාක්ෂණයන් බ්‍රවුසරයේ ක්‍රියාත්මක කිරීම සහතික කරන WebRTC වේ. p2p වීඩියෝ කතාබස් වල සාරය නම් බහුමාධ්‍ය සහ පෙළ දත්ත සේවාදායකයක හෝ අතිරේක වැඩසටහන් වල සහභාගීත්වයෙන් තොරව පරිශීලකයින්ගේ බ්‍රව්සර් (දුරස්ථ පීරිං) අතර කෙලින්ම මාරු කරනු ලැබේ. මේ අනුව, බ්‍රව්සර් සියල්ලම පාහේ ප්‍රවේශය ලබා දෙනවා පමණක් නොවේ තොරතුරු සම්පත්අන්තර්ජාලය, සේවාදායකයන් මත ගබඩා කර ඇති නමුත්, සියලු තත්‍ය කාලීන සන්නිවේදන සේවා සහ තැපැල් සේවා වෙත ප්‍රවේශ වීමේ මාධ්‍යයක් බවට පත් වේ (හඬ තැපෑල, විද්යුත් තැපෑල, 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 මත පදනම් වූ P2P වීඩියෝ කතාබස් Bistri (එක්-ක්ලික් වීඩියෝ චැට්, p2p චැට්), Bistri මත විවෘත කළ හැක. අමතර වැඩසටහන් සහ ප්ලගීන ස්ථාපනය නොකර Bistri බ්‍රවුසරයේ ක්‍රියා කරයි. කාර්යයේ සාරය පහත පරිදි වේ: නිශ්චිත සබැඳිය භාවිතයෙන් p2p වීඩියෝ කතාබස් විවෘත කරන්න, විවෘත වන අතුරු මුහුණතේ ලියාපදිංචි වීමෙන් පසු, හවුල්කරුවන්ට ආරාධනා කරන්න, පසුව සම සේවාදායකයින්ගේ ලැයිස්තුවෙන් සබැඳිව සිටින සහකරු තෝරා “වීඩියෝ ඇමතුම මත ක්ලික් කරන්න. " බොත්තම.

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


සහල්. 1. P2P වීඩියෝ කතාබස් Bistri

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 Twelephone

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



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

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

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

WebRTC හැඳින්වීම

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

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

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

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

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

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

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

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

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

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

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

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

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

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

වෙනස ඇත්තේ දෙවන කරුණෙහි පමණි.

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

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

මූලික ආයතන මාධ්‍ය ප්‍රවාහ (MediaStream)

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

WebRTC හට පොටක් තුළ තරමක් ව්‍යාකූල ධුරාවලියක් ඇත. සෑම ප්‍රවාහයක්ම මාධ්‍ය පීලි කිහිපයකින් (MediaTrack) සමන්විත විය හැකි අතර, එය මාධ්‍ය නාලිකා කිහිපයකින් (MediaChannel) සමන්විත විය හැක. එමෙන්ම මාධ්‍ය ප්‍රවාහ කිහිපයක් ද තිබිය හැකිය.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

අයිස් අපේක්ෂකයා

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

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

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

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

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

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

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

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

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

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

රූපය 9: එක් නෝඩයක් NAT පිටුපස ඇත, අනෙක නොවේ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

දැන් අපට ප්‍රතිවිරුද්ධ දිශාවට යන දෙවන පැකට්ටුවක් තිබේ:

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

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

අභ්‍යන්තර IP අභ්‍යන්තර PORT බාහිර 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: රවුටරය ග්රාහක ලිපිනය වෙනස් කළේය

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

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

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

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

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

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

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

කෙටි සාරාංශය

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

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

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

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

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

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

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

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

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

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

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

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

2. Unpack:

$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. විකාශනය ආරම්භ කිරීම සඳහා, ඔබ තිරයේ මැද ඇති "ආරම්භක" බොත්තම ක්ලික් කළ යුතුය.
ඔබ මෙය කිරීමට පෙර, වෙබ් කැමරාව සම්බන්ධ වී ඇති බව සහ භාවිතයට සූදානම් බව තහවුරු කර ගත යුතුය. වෙබ් කැමරාව සඳහා විශේෂ අවශ්‍යතා නොමැත; උදාහරණයක් ලෙස, අපි 1280x800 විභේදනයකින් යුත් ලැප්ටොප් එකක සාදන ලද සම්මත කැමරාවක් භාවිතා කළෙමු.

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

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

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

වෙබ්නාර්, දේශන, මාර්ගගත වීඩියෝ විකාශන හෝ අන්තර්ක්‍රියාකාරී රූපවාහිනිය වැනි සැබෑ යෙදුම්වල, සංවර්ධකයින්ට මෙම හඳුනාගැනීමේ යන්ත්‍රය ඇතැම් නරඹන්නන් කණ්ඩායම් වෙත බෙදා හැරීම ක්‍රියාත්මක කිරීමට සිදුවනු ඇත, එවිට ඔවුන්ට අවශ්‍ය ප්‍රවාහවලට සම්බන්ධ විය හැකි නමුත් මෙය දැනටමත් යෙදුමේ තර්කයයි. . 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 ක්‍රමය මඟින් ක්‍රියාත්මක වේ;
  • සන්නිවේදන ක්‍රම නිර්වචනය කිරීම සහ ඒවා සෘජුව සම්ප්‍රේෂණය කිරීම ඇතුළුව මාධ්‍ය ප්‍රවාහ උත්පාදනය කරන උපාංග අතර සම-සම සන්නිවේදනය - RTCPeerConnection objects (ශ්‍රව්‍ය සහ දෘශ්‍ය ප්‍රවාහ යැවීම සහ ලැබීම සඳහා) සහ RTCDataChannel (බ්‍රවුසරයෙන් දත්ත යැවීම සහ ලබා ගැනීම සඳහා).
අපි මොකද කරන්නේ?

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

MediaStream

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

WebRTC - පළමු හඳුන්වාදීමේ වීඩියෝව (උස: 240px; පළල: 320px; මායිම: 1px ඝන අළු; ) getUserMedia

Microsoft CU-RTC-Web

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

දේශීය ප්‍රවාහය සබල කරමින්

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

Var localStream = null;

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

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

නැතහොත් අතිරේක පරාමිතීන් සඳහන් කරන්න:

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

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

කාර්යය getUserMedia_success(stream) ( console.log("getUserMedia_success():", ප්‍රවාහය); localVideo1.src = URL.createObjectURL(stream); // මාධ්‍ය ප්‍රවාහය HTML මූලද්‍රව්‍යයට localStream = stream; // සම්බන්ධ කර එය සුරකින්න වැඩිදුර භාවිතය සඳහා ගෝලීය විචල්‍යයක)

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

කාර්යය 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 servers = ( "iceServers": [ ( "url": "stun:stun.stunprotocol.org:3478" ), ( "url": "turn:user@host:port", "credential": "password" ) ]);

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

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

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


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

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

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

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

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

පිහිටුවීමේ දීමනාව

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

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

createOffer

මූලද්‍රව්‍යය සමඟ රේඛාවෙන් පසුව (අනාගතය සඳහා):


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

Var pc1;

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

Var servers = null;

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

Var offer Constraints = ();

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

කාර්යය pc1_createOffer_success(desc) ( console.log("pc1_createOffer_success(): \ndesc.sdp:\n"+desc.sdp+"desc:", desc); pc1.setLocalDescription(desc); 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(සේවාදායකයන්); // RTCPeerConnection pc1.onicecandidate = pc1_onicecandidate සාදන්න; // Callback function on pstream pdreaddc. මාධ්‍ය ප්‍රවාහයක් ඈත පැත්තෙන් දිස්වන විට නැවත ඇමතුම් ශ්‍රිතය කැඳවනු ලැබේ. තවමත් කිසිවක් නොමැත 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 සඳහා ගෝලීය විචල්‍යයක්:

Var pc2;

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

Answer SDP පිහිටුවීම Offer ට බෙහෙවින් සමාන ය. පිරිනැමීමට සමාන පිළිතුරක් සාර්ථක ලෙස සැකසීමට කැඳවන ලද ආපසු කැඳවීමේ කාර්යයේදී, අපි දේශීය විස්තරයක් ලබා දී ලැබුණු පිළිතුර 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(සේවාදායකයන්); pc2.onicecandicecandicedondateondate_pc2.onicecandicecandateondate_d=pc2 ; // ICE අපේක්ෂක pc2.onaddstream = pc_onaddstream දිස්වන විට සිදුවීම් හසුරුව සකසන්න; // ප්‍රවාහයක් දිස් වූ විට, එය HTML pc2.addStream (localStream) වෙත සම්බන්ධ කරන්න; // දේශීය මාධ්‍ය ප්‍රවාහය මාරු කරන්න (අපගේ උදාහරණයේ, දෙවැන්න සහභාගිවන්නෙකුට පළමු එකට සමාන එකක් ඇත) // දැන්, දෙවන RTCPeerConnection එක සූදානම් වූ විට, අපි එය ලැබුණු පිරිනැමීම SDP (අපි දේශීය ප්‍රවාහය පළමු එකට සම්මත කළෙමු) pc2.setRemoteDescription(new RTCSessionDescription(desc)); // පිළිතුරු පණිවිඩය pc2.createAnswer (pc2_createAnswer_success, pc2_createAnswer_error, answerConstraints) සඳහා දත්ත උත්පාදනය කිරීමට දෙවන සම්බන්ධතාවය ඉල්ලන්න; )

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

Pc2_receivedOffer(desc);

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

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 මූලද්‍රව්‍ය වලින් විසන්ධි කරන්න, ප්‍රාදේශීය මාධ්‍ය ප්‍රවාහය නවත්වන්න, සකසන්න = null localVideo1.src = ""; localStream.stop(); localStream = null; // එක් එක් සහභාගිවන්නෙකු සඳහා, HTML වෙතින් වීඩියෝව අබල කරන්න මූලද්‍රව්‍ය, සම්බන්ධතාවය වසා දමන්න, පොයින්ටරය සකසන්න = null remoteVideo1.src = ""; pc1.close(); pc1 = null; remoteVideo2.src = ""; pc2.close(); pc2 = null; )

අපි එය rtctest3.html ලෙස සුරකිමු, එය සේවාදායකයට උඩුගත කර බ්‍රව්සරයේ විවෘත කරමු. මෙම උදාහරණය එකම බ්‍රවුසර ටැබය තුළ RTCPeerConnection දෙකක් අතර මාධ්‍ය ප්‍රවාහයන් ද්වි-මාර්ග සම්ප්‍රේෂණය ක්‍රියාත්මක කරයි. පිරිනැමීම සහ පිළිතුරු 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("/", ශ්‍රිතය (req, res) ( // මූල පිටුවට ප්‍රවේශ වන විට res.sendfile(__dirname + "/nodetest2.html"); // HTML ගොනුව යවන්න ) ); io.sockets.on("සම්බන්ධතාවය", ශ්‍රිතය (සොකට්) ( // socket.emit ("සේවාදායක සිදුවීම", (ආයුබෝවන්: "ලෝකය") සම්බන්ධ කරන විට; // පණිවිඩයක් යවන්න socket.on("සේවාදායක සිදුවීම" , ශ්‍රිතය (දත්ත) ( // සහ සේවාදායක console.log(data) වෙතින් පණිවිඩයක් පැමිණෙන විට සිදුවීම් හසුරුවන්නෙකු ප්‍රකාශ කරන්න); );

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

$ nano nodetest2.html var socket = io.connect("/"); // Websocket සේවාදායකයේ URL (පිටුව පූරණය වූ සේවාදායකයේ මූල පිටුව) socket.on("සේවාදායක සිදුවීම", ශ්‍රිතය (දත්ත) ( console.log(data); socket.emit("සේවාදායක සිදුවීම", ( "නම": "අගය");));

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

$ 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("යෝජනා", 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("පිළිතුර", ශ්‍රිතය (දත්ත) (е 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("යෝජනා", ශ්‍රිතය (දත්ත) ( // අපට "පිරිනැමීම්" පණිවිඩය ලැබුණු විට, // මෙම උදාහරණයේ එක් සේවාදායක සම්බන්ධතාවයක් පමණක් ඇති බැවින්, // අපි එම සොකට් සොකට් හරහා පණිවිඩය යවන්නෙමු. .emit("යෝජනා" , දත්ත); // සියලුම සම්බන්ධතා හරහා පණිවිඩය යොමු කිරීමට අවශ්‍ය නම්, // යවන්නා හැර: // soket.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 array එකක් සාදා ක්‍රියාත්මක කරන්න. ගතික නිර්මාණයසහ අංග ඉවත් කිරීමෙන්, ඔබට සම්පූර්ණයෙන්ම භාවිතා කළ හැකි වීඩියෝ කතාබස් ලැබෙනු ඇත. WebRTC හා සම්බන්ධ විශේෂ විශේෂතා කිසිවක් නොමැති අතර, සහභාගිවන්නන් කිහිප දෙනෙකු සඳහා සරල වීඩියෝ සංවාදයක උදාහරණයක් (මෙන්ම ලිපියේ ඇති සියලුම උදාහරණවල පාඨ) සඟරාව සමඟ එන තැටියේ ඇත. කෙසේ වෙතත්, ඔබට දැනටමත් අන්තර්ජාලයේ බොහෝ දේ සොයාගත හැකිය. හොඳ උදාහරණ. විශේෂයෙන්ම, ලිපිය සකස් කිරීමේදී පහත සඳහන් දෑ භාවිතා කරන ලදී: simpl.info getUserMedia, simpl.info RTCPeerConnection, WebRTC Reference App.

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




ඉහල