WebRTCçšã®ã¡ãã£ã¢ãµãŒããŒã®å±éã«ã¯ãã¹ã±ãŒãªã³ã°ãã€ãŸã 1ã€ã®ãµãŒããŒã䜿çšããã ãã§ãªãããã¹ãŠã®äŒè°ãŠãŒã¶ãŒã®é
延ãæé©åããŸãã ãXäŒè°ã®ãã¹ãŠã®ãŠãŒã¶ãŒããµãŒããŒYã«éä¿¡ããããšãã粟ç¥ã®åçŽãªã·ã£ãŒãã£ã³ã°ã¯ç°¡åã«æ°Žå¹³ã«ã¹ã±ãŒãªã³ã°ã§ããŸãããé
延ã®ç¹ã§ã¯æé©ãšã¯ã»ã©é ãã§ãã ãŠãŒã¶ãŒã«è¿ãã ãã§ãªããçžäºæ¥ç¶ãããŠãããµãŒããŒéã§äŒè°ãé
åžããããšã¯ãäž¡æ¹ã®åé¡ã®è§£æ±ºçã®ããã«æããŸãã ä»æ¥ãç§ãã¡ã¯Jitsiã®Boris Grozevããã®è©³çŽ°ãªè³æã®ç¿»èš³ãæºåããŸããïŒã«ã¹ã±ãŒãSFUã®åé¡ãã¢ãããŒãã®èª¬æãšããã€ãã®å°é£ãããã³å®è£
ã®è©³çŽ°ã Voximplantã®äŒè°ã§
ãSFUã䜿çšããŠãããšèšã䟡å€ã
ãããŸã ã çŸåšãSFUã®ã«ã¹ã±ãŒãã«åãçµãã§ãããæ¥å¹Žã¯ãã©ãããã©ãŒã ã«è¡šç€ºãããäºå®ã§ãã
ããŠã¹ãã¥ãŒãã³ã 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ã§ã¯äžååãªå ŽåïŒã