ããŠã¹ãã¥ãŒãã³ã NIHDã€ã¡ãŒãžïŒ CC-BY-2.0 ïŒ
ãªã¢ã«ã¿ã€ã éä¿¡ã¯ããããã¯ãŒã¯ã垯åå¹ ãé 延ããã±ããæ倱ã«éåžžã«ææã§ãã ãããã¬ãŒãã®äœäžã¯ãããªå質ã®äœäžã«ã€ãªãããé·ããããã¯ãŒã¯é 延ã¯ãšã³ããŠãŒã¶ãŒã®é·ãé 延ã«ã€ãªãããŸãã ãã±ããã倱ããããšãé³ãæç¶çã«ãªãããããªã®ããªãŒãºãçºçããå¯èœæ§ããããŸãïŒãã¬ãŒã ã¹ãããã®ããïŒã
ãããã£ãŠãäŒè°ã§ã¯ãšã³ãããã€ã¹/ãŠãŒã¶ãŒéã®æé©ãªã«ãŒããéžæããããšãéåžžã«éèŠã§ãã ãŠãŒã¶ãŒã2人ãããªãå Žåã¯ç°¡åã§ã-WebRTCã¯ICEãããã³ã«ã䜿çšããŠåå è éã®æ¥ç¶ã確ç«ããŸãã å¯èœã§ããã°ãåå è ã¯çŽæ¥æ¥ç¶ããŸãããã以å€ã®å Žåã¯ãTURNãµãŒããŒã䜿çšãããŸãã WebRTCã¯ãã¡ã€ã³åã解決ããŠTURNãµãŒããŒã®ã¢ãã¬ã¹ãååŸã§ãããããããšãã°AWS Route53ããããã£ã䜿çšããŠãDNSã«åºã¥ããŠããŒã«ã«TURNãç°¡åã«éžæã§ããŸãã
ãã ãã1ã€ã®äžå€®ã¡ãã£ã¢ãµãŒããŒãä»ããŠè€æ°ã®åå è ãã«ãŒãã£ã³ã°ããå Žåãç¶æ³ã¯è€éã«ãªããŸãã å€ãã®WebRTCãµãŒãã¹ã¯ãéžæç転éãŠãããïŒSFUïŒã䜿çšããŠã3人以äžã®åå è éã§ãªãŒãã£ãªãšãããªãããå¹ççã«è»¢éããŸãã
æã®åé¡
ã¹ã¿ãŒããããžã§ã¯ããã¹ãŠã®åå è ãã¡ãã£ã¢ã¹ããªãŒã ã亀æããåäžã®ãµãŒããŒã«æ¥ç¶ããŸãã ãµãŒããŒã®å Žæã®éžæã¯éåžžã«éèŠã§ãããã¹ãŠã®åå è ãç±³åœã«ããå Žåãã·ãããŒã§ãµãŒããŒã䜿çšããããšã¯ãå§ãã§ããŸããã
å€ãã®ãµãŒãã¹ã¯ãã»ãšãã©ã®å ŽåããŸãæ©èœããã·ã³ãã«ãªã¢ãããŒãã䜿çšããŸããã€ãŸããäŒè°ã®æåã®åå è ã«ããè¿ããµãŒããŒãéžæããŸãã ãã ãããã®ãœãªã¥ãŒã·ã§ã³ãæé©ã§ãªãå ŽåããããŸãã äžã®åçãã3人ã®åå è ããããšæ³åããŠãã ããã ãªãŒã¹ãã©ãªã¢äººïŒçºä¿¡è CïŒãæåã«äŒè°ã«åå ããå Žåãã¢ã«ãŽãªãºã ã¯ãªãŒã¹ãã©ãªã¢ã®ãµãŒããŒãéžæããŸãããç±³åœã®ãµãŒããŒ1ãæè¯ã®éžæã«ãªããŸãã 圌ã¯ã»ãšãã©ã®åå è ã«è¿ãã
説æãããŠããã·ããªãªã¯ããã»ã©é »ç¹ã§ã¯ãããŸããããå®éã«çºçããŸãã ãŠãŒã¶ãŒãã©ã³ãã ãªé åºã§æ¥ç¶ãããŠãããšä»®å®ãããšã3人ã®åå è ããããã¹ãŠã®äŒè°ã®withã§èª¬æãããç¶æ³ãçºçãããã®ãã¡ã®1人ã¯å€§ããåé€ãããŸãã
å¥ã®ããé »ç¹ãªã·ããªãªïŒç°ãªãå Žæã«2ã€ã®ã°ã«ãŒãã®åå è ãããŸãã ãã®å Žåãæ¥ç¶é åºã¯éèŠã§ã¯ãããŸããããªã¢ãŒããµãŒããŒãšã¡ãã£ã¢ã亀æããããšãäœåãªãããããå¯æ¥ã«äœçœ®ããåå è ã®ã°ã«ãŒããåžžã«ååšããŸãã ããšãã°ããªãŒã¹ãã©ãªã¢ãã2人ã®åå è ïŒCïŒDïŒãšã¢ã¡ãªã«ãã2人ã®åå è ïŒAïŒBïŒã
ãµãŒããŒ1ãžã®åãæ¿ãã¯ãCïŒDã¡ã³ããŒã«ã¯æé©ã§ã¯ãããŸããã ãµãŒããŒ2ã¯AïŒBã«æé©ã§ã¯ãããŸããã ã€ãŸãã䜿çšãããŠãããµãŒããŒã«é¢ä¿ãªãããªã¢ãŒãïŒ=éæé©ïŒãµãŒããŒã«æ¥ç¶ãããåå è ãåžžã«ååšããŸãã
ããããåäžã®ãµãŒããŒå¶éããªãå Žåã¯ã©ãã§ããããïŒ ååå è ãæãè¿ããµãŒããŒã«æ¥ç¶ã§ããŸããããããã®ãµãŒããŒã«æ¥ç¶ããã ãã§ãã
解決çïŒã«ã¹ã±ãŒã
ãµãŒããŒã®æ¥ç¶æ¹æ³ã®è³ªåã¯å»¶æããŸãã ãŸããå¹æãã©ããªãããèŠãŠã¿ãŸãããã
CãšDã®éã®SFUæ¥ç¶ã¯å€æŽãããŠããŸãã-ãµãŒããŒ2ã¯åŒãç¶ã䜿çšãããŸããããµãŒããŒAã¯åå è AãšBã«äœ¿çšãããããã¯æããã«åªããŠããŸãã æãèå³æ·±ãã®ã¯ãããšãã°AãšCéã®æ¥ç¶ã§ããA<=>ãµãŒããŒ2 <=> Cã®ä»£ããã«ãã«ãŒãA <=>ãµãŒããŒ1 <=>ãµãŒããŒ2 <=> Cã䜿çšãããŸãã
çºæ¿ã¬ãŒããžã®æé»ã®åœ±é¿
SFUããã¯ã¹ã«ã¯é·æãšçæããããŸãã äžæ¹ã§ã¯ãäžèšã®ç¶æ³ã§ã¯ããããã¯ãŒã¯äžã®æ°ãããžã£ã³ããè¿œå ããããšãåå è éã®äº€ææéãé·ããªããŸãã äžæ¹ããã¯ã©ã€ã¢ã³ãã-ãæåã®ãµãŒããŒãæ¥ç¶ã«ã€ããŠè©±ããšãã¯ãããããã€ãããã®ååã«ãããããäœãé 延ã§ã¡ãã£ã¢ã¹ããªãŒã ã埩å ã§ããããããã®æéã¯æžå°ããŸãã
ã©ã®ããã«æ©èœããŸããïŒ WebRTCã¯RTPïŒéåžžã¯UDPçµç±ïŒã䜿çšããŠã¡ãã£ã¢ãéä¿¡ããŸãã ããã¯ããã©ã³ã¹ããŒããä¿¡é Œã§ããªãããšãæå³ããŸãã UDPãã±ããã倱ãããå Žåããã®æ倱ãç¡èŠãããã RTCP NACKãã±ããã䜿çšããŠåéä¿¡ïŒåéä¿¡ïŒãèŠæ±ã§ããŸããéžæã¯ã¢ããªã±ãŒã·ã§ã³ã®è¯å¿ã«ãããŸãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã¯ãåŸç¶ã®ãã¬ãŒã ããã³ãŒãããå¿ èŠããããã©ããã«å¿ããŠããªãŒãã£ãªãã±ããã®æ倱ãç¡èŠããäžéšã®ïŒãã¹ãŠã§ã¯ãªãïŒãããªãã±ããã®åéä¿¡ãèŠæ±ã§ããŸãã
RTPãã±ããã®åéä¿¡ãåäžãµãŒããŒ
ã«ã¹ã±ãŒããããå Žåãåéä¿¡ã¯ããŒã«ã«ãµãŒããŒã«å¶éãããå¯èœæ§ããããŸããã€ãŸããåãµã€ãã§å®è¡ãããŸãã ããšãã°ãã«ãŒãA-S1-S2-Cã§ã¯ãAãšS1ã®éã§ãã±ããã倱ãããå ŽåãS1ã¯ããã«æ°ä»ããåéä¿¡ãèŠæ±ããŸãã S2ãšCã®éã®æ倱ã«äŒŒãŠããŸãããŸãããµãŒããŒéã§ãã±ããã倱ãããå Žåã§ããåä¿¡åŽã¯åéä¿¡ãèŠæ±ããå ŽåããããŸãã
RTPãã±ããã®åéä¿¡ã2å°ã®ãµãŒããŒã NACKã¯ãã±ãããéä¿¡ããçŽåŸã«å°çããããããµãŒããŒ2ã¯ãã±ãã2ãèŠæ±ããªãããšã«æ³šæããŠãã ããã
ã¯ã©ã€ã¢ã³ãã¯ããžãã¿ãããã¡ã䜿çšããŠããããªã®åçãé 延ãããé 延/åéä¿¡ãã±ããã®åä¿¡ã管çããŸãã ãããã¡ãµã€ãºã¯ãããŒãã£éã®äº€ææéã«å¿ããŠåçã«å€åããŸãã ãããããšã®åéä¿¡ãçºçãããšãé 延ãæžå°ãããã®çµæããããã¡ãŒãå°ãããªãå¯èœæ§ããããŸãããã®çµæãå šäœçãªé 延ãæžå°ããŸãã
ç°¡åã«èª¬æãããšãåå è éã®äº€ææéãé·ããªã£ãŠããåå è éã®ã¡ãã£ã¢è»¢éã®é 延ãæžå°ããå¯èœæ§ããããŸãã å®éã«ãã®å¹æãç 究ããããšã¯ãŸã ãããŸããã
ã«ã¹ã±ãŒãSFUã®çŽ¹ä»ïŒJitsi Meet Case
ã¢ã©ãŒã 察 ã¡ãã£ã¢
ã¢ã©ãŒã ãèŠãŠã¿ãŸãããã åœåãããJitsi Meetã¯ã·ã°ããªã³ã°ãµãŒããŒïŒ Jicofo ïŒãšã¡ãã£ã¢ãµãŒããŒ/ SFUã®æŠå¿µãå ±æããŠããŸããã ããã«ãããã«ã¹ã±ãŒããµããŒãã®å°å ¥ãæ¯èŒçç°¡åã«ãªããŸããã ãŸãããã¹ãŠã®ã·ã°ããªã³ã°ããžãã¯ã1ãæã§åŠçã§ããŸãã 第äºã«ãJicofoãšã¡ãã£ã¢ãµãŒããŒéã§æ¢ã«ã·ã°ããªã³ã°ãããã³ã«ããããŸããã æ©èœãå°ãæ¡åŒµããã ãã§æžã¿ãŸããã1ã€ã®ã·ã°ãã«ãµãŒããŒã«æ¥ç¶ãããè€æ°ã®SFUãæ¢ã«ãµããŒãããŠããããã1ã€ã®SFUãå€ãã®ã·ã°ãã«ãµãŒããŒã«æ¥ç¶ããæ©èœãè¿œå ããå¿ èŠããããŸããã
ãã®çµæã2ã€ã®ç¬ç«ãããµãŒããŒããŒã«ãç»å ŽããŸããã1ã€ã¯jicofoã€ã³ã¹ã¿ã³ã¹çšã§ããã1ã€ã¯ã¡ãã£ã¢ãµãŒããŒã€ã³ã¹ã¿ã³ã¹çšã§ããå³ãåç §ããŠãã ããã
ç°ãªãããŒã¿ã»ã³ã¿ãŒéã§ã«ã¹ã±ãŒããçºçããå¯èœæ§ãããAWSã§ãµãŒããŒãæŽçããäŸã
ã·ã¹ãã ã®2çªç®ã®éšåã¯ãããªããžééä¿¡ã§ãã ãã®éšåãã§ããã ãã·ã³ãã«ã«ãããã£ãã®ã§ãããªããžéã«è€éãªä¿¡å·ã¯ãããŸããã ãã¹ãŠã®ã¢ã©ãŒã ã¯jicofoãšjitsi-videobridgeã®éãè¡ãæ¥ããŸãã ããªããžæ¥ç¶ã¯ããªãŒãã£ãª/ãããªããã³ããŒã¿ãªã³ã¯ã¡ãã»ãŒãžã«ã®ã¿äœ¿çšãããŸãã
ãªã¯ããããã³ã«
ãã®çžäºäœçšã管çããããã«ãåçŽãªåºå®é·ããããŒã§RTPãã±ãããã©ããããããã¹ãã¡ãã»ãŒãžãéä¿¡ã§ããOctoãããã³ã«ãæ¡çšããŸããã çŸåšã®å®è£ ã§ã¯ãããªããžã¯ãã«ã¡ãã·ã¥ããããžïŒãã«ã¡ãã·ã¥ïŒã§æ¥ç¶ãããŠããŸãããä»ã®ããããžãå¯èœã§ãã ããšãã°ãäžå€®ãµãŒããŒïŒããªããžã®ã¹ã¿ãŒïŒãŸãã¯åããªããžã®ããªãŒæ§é ã䜿çšããŸãã
説æïŒOctoããããŒã§ã©ãããã代ããã«ãRTPããããŒæ¡åŒµã䜿çšããŠãçŽç²ãªïŒSïŒRTPã®ããªããžéã§ãããŒãäœæã§ããŸãã Octoã®å°æ¥ã®ããŒãžã§ã³ã§ã¯ããã®ã¢ãããŒãã䜿çšã§ããŸãã
2çªç®ã®èª¬æïŒOctoã¯äœã®æå³ããããŸããã æåã¯äžå€®ãµãŒããŒã䜿çšãããã£ããããã¿ã³ãæãåºããŸããã ãã®ããããããžã§ã¯ãã®ååã衚瀺ãããŸããã
ãªã¯ãããããŒåœ¢åŒ
Jitsiã®çšèªã§ã¯ãããªããžãè€æ°ã®ããªããžãšã®äŒè°ã®äžéšã§ããå Žåãè¿œå ã®Octoãã£ãã«ïŒå®éã«ã¯ããªãŒãã£ãªçšãšãããªçšã®1ã€ã®ãã£ãã«ïŒããããŸãã ãã®ãã£ãã«ã¯ãä»ã®ããªããžãšã®éã§ã¡ãã£ã¢ãéåä¿¡ããŸãã åããªããžã«ã¯Octoã®ç©ºãããŒãïŒããã©ã«ãã§ã¯4096ïŒãå²ãåœãŠãããŠãããããè€æ°ã®äŒè°ãåŠçããã«ã¯[äŒè°ID]ãã£ãŒã«ããå¿ èŠã§ãã
çŸæç¹ã§ã¯ããããã³ã«ã«ã¯çµã¿èŸŒã¿ã®ã»ãã¥ãªãã£ã¡ã«ããºã ããªãããã®è²¬ä»»ãäžäœã¬ãã«ã«å§ä»»ããŠããŸãã ããã¯è¿ãå°æ¥è¡ãããšã§ããããããŸã§ã®ãšãããããªããžã¯å®å šãªãããã¯ãŒã¯ïŒããšãã°ãå¥åã®AWS VPCã€ã³ã¹ã¿ã³ã¹ïŒã«ããå¿ èŠããããŸãã
åææŸé
Simulcastã¯ãååå è ãç°ãªããããã¬ãŒãã§è€æ°ã®ã¡ãã£ã¢ã¹ããªãŒã ãéä¿¡ã§ããããã«ããããªããžã¯å¿ èŠãªã¡ãã£ã¢ã¹ããªãŒã ã決å®ããã®ã«åœ¹ç«ã¡ãŸãã ãããæ£ããæ©èœããããã«ããã¹ãŠã®ãµã€ãã«ãã£ã¹ãã¹ããªãŒã ãããªããžéã§è»¢éããŸãã ããã«ãããããŒã«ã«ããªããžãæ°ããã¹ããªãŒã ãèŠæ±ããå¿ èŠããªããããã¹ããªãŒã ããã°ããåãæ¿ããããšãã§ããŸãã ãã ããããã¯ãããªããžéãã©ãã£ãã¯ã®èŠ³ç¹ããæé©ã§ã¯ãããŸããã äžéšã®ã¹ã¬ããã¯ãã£ãã«äœ¿çšããããç®çã®ãªã垯åå¹ ã®ã¿ãããŒãããŸãã
ã¢ã¯ãã£ãã¡ã³ããŒã®éžæ
ãŸããäŒè°ã®ã¢ã¯ãã£ããªåå è /è¬æŒè ã賌èªããæ©äŒã欲ããã£ãã ç°¡åã§ããããšãå€æããŸãããååå è ã«ã¡ã€ã³åå è ãç¬ç«ããŠæ±ºå®ããããŒã«ã«ã¯ã©ã€ã¢ã³ãã«éç¥ããããã«æããŸããã ããã¯ã決å®ãæ°åè¡ãããããšãæå³ããŸãããè²»çšããããããããã€ãã®ãã€ã³ããç°¡çŽ åã§ããŸãïŒããšãã°ãã©ã®ããªããžãDSIãæ åœããã¡ãã»ãŒãžã«ãŒãã£ã³ã°ãå¿é ããå¿ èŠããããã決å®ããå¿ èŠã¯ãããŸããïŒã
æ©ã®éžæ
çŸåšã®å®è£ ã§ã¯ããã®ã¢ã«ãŽãªãºã ã¯åçŽã§ãã æ°ããåå è ãäŒè°ã«åå ãããšããJicofoã¯èªåã«å²ãåœãŠãããªããžã決å®ããå¿ èŠããããŸãã ããã¯ãåå è ã®å°åãšããªããžã®æ··éã«åºã¥ããŠè¡ãããŸãã åãå°åã«ç¡æã®æ©ãããå Žåã¯ãæå®ãããŸãã ãã以å€ã®å Žåãä»ã®ããªããžã䜿çšãããŸãã
Octoã®è©³çŽ°ã«ã€ããŠã¯ã ããã¥ã¡ã³ããåç §ããŠãã ããã
ã«ã¹ã±ãŒãSFUãå±éãã
ãããã€ã«ã¯ãAmazon AWSã®ãã·ã³ã䜿çšããŸããã 6ã€ã®å°åã«ãµãŒããŒïŒã¢ã©ãŒã ãšã¡ãã£ã¢ïŒããããŸããã
- us-east-1ïŒããŒã¹ããŒãžãã¢å·ïŒ;
- us-west-2ïŒãªã¬ãŽã³ïŒ;
- eu-west-1ïŒã¢ã€ã«ã©ã³ãïŒ;
- eu-central-1ïŒãã©ã³ã¯ãã«ãïŒ;
- ap-se-1ïŒã·ã³ã¬ããŒã«ïŒ;
- ap-se-2ïŒã·ãããŒïŒã
ã¡ã³ããŒå°åã決å®ããããã«ãå°çåç §ãããHAProxyã€ã³ã¹ã¿ã³ã¹ã䜿çšããŸããã meet.jit.siãã¡ã€ã³ã¯Route53ã«ãã£ãŠç®¡çãããHAProxyã€ã³ã¹ã¿ã³ã¹ã«è§£æ±ºãããŸããããã«ãããéä¿¡ããããªã¯ãšã¹ãã®HTTPããããŒã«ãªãŒãžã§ã³ãè¿œå ãããŸãã ããããŒã¯ã
config.deploymentInfo.userRegion
å€æ°ã®å€ãšããŠåŸã§äœ¿çšãããŸãããã®å€æ°ã¯ã
/config.js
ãã¡ã€ã«ã®ãããã§ã¯ã©ã€ã¢ã³ãã§äœ¿çšã§ããŸãã
jitsiã€ã³ã¿ãŒãã§ãŒã¹ã¯ã蚺æãšãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ããã«ã䜿çšãããŠããããªããžã®æ°ãšç¹å®ã®ãŠãŒã¶ãŒãæ¥ç¶ãããŠãããŠãŒã¶ãŒã瀺ããŸãã ããŒã«ã«ãããªã®å·Šäžé ã«ã«ãŒãœã«ãåããããšããµãŒããŒã®ç·æ°ãšæ¥ç¶ããŠãããµãŒããŒã衚瀺ãããŸãã åæ§ã«ã2çªç®ã®åå è ã®ãã©ã¡ãŒã¿ãŒã確èªã§ããŸãã ãŸãããã©ãŠã¶ãšå¯Ÿè©±è ã®ãã©ãŠã¶éã®äº€ææéã確èªã§ããŸãïŒãã©ã¡ãŒã¿E2E RTTïŒã
誰ãã©ã®ãµãŒããŒã«æ¥ç¶ãããŠãããã確èªããããšã§ãã«ã¹ã±ãŒãã䜿çšãããŠãããã©ããã確èªã§ããŸãã
ãããã«
Octoã¯ããšããšA / Bãã¹ããšããŠç»å ŽããŸããã æåã®çµæã¯è¯ãã£ãã®ã§ãOctoã¯èª°ã§ãå©çšã§ããŸãã ãŸã å€ãã®ãã©ãã£ãã¯ãééããããã©ãŒãã³ã¹ã詳ãã調ã¹ãŠããŸãã ãŸãããããã®éçºã䜿çšããŠãããã«å€§ããªäŒè°ããµããŒãããããšãèšç»ãããŠããŸãïŒ1ã€ã®SFUã§ã¯äžååãªå ŽåïŒã