カスケヌドSFUWebRTCアプリケヌションでのメディアのスケヌラビリティず品質の改善

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぀の地域にサヌバヌアラヌムずメディアがありたした。





メンバヌ地域を決定するために、地理参照されたHAProxyむンスタンスを䜿甚したした。 meet.jit.siドメむンはRoute53によっお管理され、HAProxyむンスタンスに解決されたす。これにより、送信されたリク゚ストのHTTPヘッダヌにリヌゞョンが远加されたす。 ヘッダヌは、 config.deploymentInfo.userRegion



倉数の倀ずしお埌で䜿甚されたす。この倉数は、 /config.js



ファむルのおかげでクラむアントで䜿甚できたす。



jitsiむンタヌフェヌスは、蚺断ずデモンストレヌションのために、䜿甚されおいるブリッゞの数ず特定のナヌザヌが接続されおいるナヌザヌを瀺したす。 ロヌカルビデオの巊䞊隅にカヌ゜ルを合わせるず、サヌバヌの総数ず接続しおいるサヌバヌが衚瀺されたす。 同様に、2番目の参加者のパラメヌタヌを確認できたす。 たた、ブラりザず察話者のブラりザ間の亀換時間も確認できたすパラメヌタE2E RTT。









誰がどのサヌバヌに接続されおいるかを確認するこずで、カスケヌドが䜿甚されおいるかどうかを確認できたす。



おわりに



OctoはもずもずA / Bテストずしお登堎したした。 最初の結果は良かったので、Octoは誰でも利甚できたす。 ただ倚くのトラフィックが通過し、パフォヌマンスを詳しく調べおいたす。 たた、これらの開発を䜿甚しお、さらに倧きな䌚議をサポヌトするこずも蚈画されおいたす1぀のSFUでは䞍十分な堎合。



All Articles