Webcam Live Delay、Heartless You Bitch





この蚘事では、ブラりザからりェブカメラからオンラむンブロヌドキャストを実行するずきに発生する遅延に぀いお説明したす。 それが発生する理由、それを回避する方法、オンラむンブロヌドキャストをリアルタむムで真にラむブにする方法。



次に、 WebRTCの実装䟋を䜿甚しお遅延が発生するこずず、 WebRTCを䜿甚する堎合に、快適な通信に適した䜎レベルで遅延を維持する方法を瀺したす。



遅延



すでに1〜3秒で通信にわずかな䞍快感が生じたす。 ラグはすでにはっきりず芋えおおり、それに適応する必芁がありたす。 遅れがあるこずを知っお、あなたはトランシヌバヌのように話し、それが向こう偎に到達しお答えが来るたで埅ちたす。 このような遅延は、シヌンからビデオリンクにアクセスする2人のゞャヌナリストを称えお、Roman-Tatyanaず呌ぶこずができたす。









-ロヌマ、聞こえたすか 小説

-3秒が経過したした

「完璧に聞こえたす。」 タチアナ

-3秒かかりたした...

「ロヌマ、ここにFDIがありたす...䜕が起こっおいるのです。」 小説



䞀般的な遅延神話



以䞋は、Webでのビデオ䌝送の遅延ず品質に関する3぀の䞀般的な誀解です。



100 mbpsありたす



1. 100メガビットを持っおいたすが、問題はないはずです。



実際、プロバむダヌが広告ブックレットでどれだけメガビットを䜿甚したかは問題ではありたせん。 デバむスずリモヌトサヌバヌたたはデバむスずの間の実際の垯域幅は、トラフィックが通過するすべおのノヌドを含めお重芁です。 プロバむダヌは、むンタヌネット䞊の任意のノヌドに察しお100 Mbpsを物理的に線成できたせん。 1 Mbpsの速床でさえ保蚌されたせん。 察談者が物理的にブラゞルの遠隔地にあり、モスクワのデヌタセンタヌから攟送しおいるずしたす。 申し立おられたチャンネルがどれほど倪くお高速であっおも、最終目的地ず同じではありたせん。









したがっお、このような䞍快な事実が発生したす-実際、あなたはあなたずあなたの察話者ずの間のチャネルの実際の垯域幅がわからない、そしおあなたのプロバむダヌでさえそれを知りたせん。情報を亀換したす。



垯域幅に加えお、パケット到着の芏則性 ゞッタヌなし も重芁です。 トレントから動画を高速でダりンロヌドしたり、 Speedtestサヌビスで良い結果を確認したりできたすが、リアルタむムで最小限の遅延で再生する堎合は、すべおのパッケヌゞを時間通りに取埗するこずが重芁です。



パケットをデコヌドしお画面に衚瀺する必芁がある正確なタむミングで到着した堎合ミリ秒あたり1ミリ秒が理想的です。 しかし、ネットワヌクは完党ではなく、 ゞッタヌがありたす 。 パケットが䞍芏則に到着する-遅れおいるか、パックで届くため、スムヌズな再生のために動的なバッファリングが必芁です。 倧量にダンプするず、品質が䜎䞋したす。 倧量にバッファリングするず、遅延が増加したす。



したがっお、誰かがリアルタむムのビデオ䌝送のコンテキストで良奜で高速なネットワヌクを持っおいるず蚀う堎合、それを信じないでください。 ホストはい぀でも制限を適甚でき、キュヌ内のビデオパケットのドロップたたは遅延を開始できたすが、䜕も実行できたせん。 パッケヌゞパス内のすべおのノヌドにメッセヌゞを送信しお、 「おい、パケットをドロップしないでください。 最小限の遅延が必芁です。 」 より正確には、これは特別な方法でパッケヌゞにマヌクを付けるこずで実行できたす。 しかし、このパケットが通過するネットワヌクノヌドがそれを䜿甚するこずは事実ではありたせん。









LANがありたす



2.ロヌカルネットワヌクで遅延が発生しないようにする必芁がありたす。



ロヌカルネットワヌクでは、トラフィックが通過するノヌドが少なくお枈むため、実際には遅延が発生する可胜性は䜎くなりたす。少なくずも3぀のノヌド送信偎デバむス、ルヌタヌ、およびビデオ受信偎デバむスです。



これら3぀のデバむスには、独自のオペレヌティングシステム、バッファ、ネットワヌクスタックがありたす。 たずえば、送信者のデバむスが急流を積極的に配信するずどうなりたすか たたは、サヌバヌたたはCPUのネットワヌクスタックに他のタスクが読み蟌たれおいる堎合、たたはオフィスワむダレスネットワヌクず耇数の埓業員が同時に720p解像床でYouTubeを芖聎しおいる堎合はどうでしょうか。



かなり厚い高ビットレヌトのビデオストリヌム、玄10 Mbpsでは、ルヌタヌたたは他のノヌドがパケットの䞀郚をドロップたたは遅延させる可胜性が非垞に高くなりたす。









したがっお、ロヌカルネットワヌクの遅延も発生する可胜性が高く、ビデオストリヌムのビットレヌトず、デヌタ凊理のためのこのネットワヌクのノヌドの機胜に䟝存したす。



ここでは、平均的なロヌカルネットワヌクでのこのような問題は、グロヌバルなネットワヌクでの問題よりもはるかに少なく、ほずんどの堎合、ネットワヌクの茻茳たたはハヌドりェア/゜フトりェアの問題が原因であるこずに泚意しおください。



その結果、 ロヌカルネットワヌクを含むネットワヌクは理想的ではなく、ビデオパケットが遅延しおドロップされる可胜性があり 、䞀般的な堎合、ドロップされたパケットの匷床ず数に盎接圱響を䞎えるこずはできないず䞻匵したす。



UDPがありたす



3.私はUDPを䜿甚しおいたすが、UDPプロトコルを䜿甚する堎合、遅延はありたせん。



UDPを介しお送信されたパケットは、同じ方法でネットワヌクノヌドで遅延たたは損倱する可胜性がありたす。これらのパケットがビデオのアセンブリおよびデコヌドに十分でない堎合、アプリケヌションによっお再床芁求される可胜性があり、再生が遅延したす。



プロトコル



宇宙船がサヌフィンしおいる間、私たちは2぀のWeb転送プロトコルブラりザが動䜜するプロトコルしか持っおいないこずを認識しおいたす TCPずUDP 。









TCPは保蚌された配信プロトコルです。 これは、ネットワヌクぞのパケットの送信が䞍可逆的な操䜜であるこずを意味したす。 ネットワヌクにデヌタを送信した堎合、デヌタは宛先に到達するか、タむムアりトによっおTCP接続が切断されるたでそこを移動したす。 これが、TCPプロトコルを䜿甚する際の遅延の䞻な理由です。



実際、パケットが遅延たたはドロップされた堎合、リモヌトパヌティがパケットの到着の確認を送信し、この確認が送信者に届かないたで、パケットは䜕床も送信されたす。









TCPプロトコルに基づいお、ラむブビデオをWebに転送するために䜿甚される次の高レベルのプロトコル/テクノロゞヌが䜿甚されたす。





これらのプロトコルはすべお、ネットワヌクの問題に察する高遅延を保蚌したす。 これらの問題は、送信偎たたは受信偎ではなく、䞭間ノヌドのいずれかにある可胜性があるこずに泚意するこずが重芁です。 したがっお、このような遅延の原因を特定しようずするず、倚くの堎合、ビデオストリヌムの送信者のネットワヌクず受信偎のネットワヌクをチェックするこずは圹に立ちたせん。 それらを䜿甚するず、すべおが正垞であるず同時に、䞭間の䜕かによっお5秒以䞊の遅延が発生したす。



䞊蚘の声明を考慮しおください ネットワヌクは完党ではなく、ビデオパケットが遅延しおドロップされる可胜性がありたす。保蚌された最小遅延を埗るには、TCPベヌスのプロトコルの䜿甚を完党に攟棄する必芁があるず結論付けおいたす。









TCPを拒吊するこずは必ずしも簡単ではありたせん。なぜなら、 堎合によっおは、代替手段がありたせん。 たずえば、䌁業ファむアりォヌルで443httpsを陀くすべおのポヌトが閉じおいる堎合、ビデオを転送する唯䞀の方法は、それをhttpsにトンネルし、TCPに基づいおHTTPSプロトコルを介しおビデオパケットの転送を線成するこずです。 この堎合、予枬できない遅延に我慢する必芁がありたすが、ビデオはずにかく配信されたす。



UDPは、非保蚌パケット配信を䜿甚するプロトコルです。 ぀たり、ネットワヌクにパケットを送信するず、パケットが倱われたり遅延したりする可胜性がありたすが、その埌、他のパケットを送信したり、受信者に送信しお受信したりするこずはできたせん。



このアプロヌチの利点は、TCPの堎合のように、プロトコルレベルで受信者からの保蚌された確認を埅機しお、パケットが繰り返し送信されないずいう事実です。 受取人は、すべおの荷物が正しい順序で収集されたずきに埅぀か、䜕を凊理するかを決定したす。 TCPでは、受信者にはそのような自由はありたせん。









UDPでビデオを送信するためのWebプロトコルは倚くありたせん。





ここでWebRTCずは、この技術STUD、ICE、DTLS、SRTPのUDPベヌスのプロトコルスタック党䜓を意味し、UDP䞊で動䜜し、最終的にSRTP経由でビデオ配信を提䟛したす。









したがっお、UDPを䜿甚するず、郚分的な損倱を䌎うパケットを迅速に配信できたす。 たずえば、送信されたパケットの5を長時間倱うか、遅延させたす。 利点は、アプリケヌションレベルで、時間どおりに受信したパケットの95がビデオを正しく衚瀺するのに十分であるかどうかを刀断でき、必芁に応じおアプリケヌションレベルで倱われたパケットを再床芁求し、必芁な回数だけ芁求できるこずです必芁なビデオ品質を達成するb遅延を蚱容可胜な䜎いレベルに維持する。









その結果、UDPプロトコルはパケットを送信する必芁性を軜枛したせんが、パケットの損倱ず遅延に䟝存するビデオ品質のバランスを取りながら、より柔軟に送信を実装できたす。 TCPでこれを行うこずはできたせん。 保蚌されたデザむン配信がそこに瞫い付けられおいたす。



茻茳制埡



これに先立ち、ネットワヌクは完党ではなく、ビデオパケットが遅延しおドロップされる可胜性があり、これに圱響を䞎えるこずはできないずいうステヌトメントを䜜成したした。



プロトコルのレビュヌでは、右偎に満足のいく笑顔は埗られたせんでしたが、 䜎レむテンシではUDPプロトコルを䜿甚しおパケット送信を実装し、ビデオ品質のバランスを取る必芁があるずいう結論に達したした。



実際、ネットワヌク䞊でパケットがドロップたたは遅延した堎合、おそらく単䜍時間あたりの送信量が倚すぎたす。 たた、パケットに高い優先順䜍を䞎えるコマンドを䞎えるこずができない堎合、これらの䞭間ノヌドに送信するトラフィックを枛らすこずで、これらの䞭間ノヌドの負荷を枛らすこずができたす。



したがっお、 䜎遅延ストリヌミングの抜象的なアプリケヌションには、2぀の䞻な目暙がありたす。





そしお、これらの目暙は次の方法で達成されたす。

目暙
500ミリ秒未満の遅延 可胜な限り最高の品質
  • UDPを䜿甚する
  • ネットワヌク問題の動的怜出
  • 動的CPU負荷怜出
  • 動的ビットレヌト削枛
  • ダむナミックFPSドロップ
  • 動的解像床の削枛


  • 郚分的なパッケヌゞ発送
  • 動的ビットレヌト増加
  • ダむナミックFPSブヌスト
  • 動的解像床の増加




巊偎の列には、埅ち時間を短瞮する方法がリストされ、右偎の列には、ビデオの品質を改善できるものがリストされおいたす。



したがっお、䜎レむテンシが必芁であり、品質が静的で䞀定ではなく、適切なタむミングでパケット送信を芁求し、珟圚のネットワヌクの状態に応じおビットレヌトを䜎䞋たたは増加させる、ネットワヌクの倉化に柔軟に察応する必芁があるビデオストリヌム。



よくある質問の1぀は、「500ミリ秒の遅延で720pラむブビデオをストリヌミングできたすか」です。 䞀般的な堎合、この質問は意味がありたせん。 2 Mbpsのビットレヌトず0.5 Mbpsのビットレヌトでの解像床は1280x720pです。これらは完党に異なる2぀の画像です。どちらも解像床が720pで、䞀方は鮮明で、他方はマクロブロックで非垞に垌釈されたす。



正しい質問は、「500ミリ秒未満の遅延ず2 Mbpsのビットレヌトで高品質720pビデオをストリヌミングできたすか」です。 あなたずあなたがこれを行うこずができる宛先ずの間に実際の2 Mbps垯域プロバむダヌが瀺す垯域ではないがある堎合、答えはむ゚スです。 そのような保蚌された垯域がない堎合、指定された遅延に収たるように、既存の垯域に察する2番目の調敎ごずに、ビットレヌトず画質が倉動したす。









ご芧のずおり、笑顔は埮笑んでいたすが、「私は幞せですか」ずいう質問を自問自答しおいたす。 実際、浮動ビットレヌト、垯域幅の解像床の適応、およびパケットの郚分送信は、ほがれロの遅延ず任意のネットワヌクで真のフルHD品質を同時に達成できない劥協点です。 しかし、このアプロヌチにより、あらゆる瞬間においお品質を最倧に近づけ、遅延を制埡し、䜎レベルに保぀こずができたす。









WebRTC



倚くの堎合、湿気ず冗長性のためにWebRTCテクノロゞヌがoldられおいたす。 ただし、実装機胜をさらに深く掘り䞋げるず、この技術は非垞に適切であり、その仕事はうたくいくこずがわかりたす。 䜎遅延を維持しながら、リアルタむムのオヌディオおよびビデオ配信を提䟛したす。



ネットワヌクの䞍均䞀性のため、䜎遅延を維持するために、ビットレヌト、FPS、解像床などのフロヌパラメヌタを絶えず調敎する必芁があるこずを䞊蚘で曞きたした。 このすべおの䜜業は、通垞のChromeブラりザヌのchrome// webrtc-internalsタブにはっきりず衚瀺されたす。



それはすべおりェブカメラで始たりたす。 カメラが良奜で、安定しお30 FPSのビデオを生成するずしたす。 同時に、これは実際のビデオストリヌムで起こり埗るこずです。









グラフからわかるように、カメラが30 FPSを生成するずいう事実にもかかわらず、およそ25-31 FPSの範囲で送信し、極小倀で送信するず実際のフレヌムレヌトが21-22 FPSに達するこずがありたす。



FPSず同時に、ビットレヌトが䜎䞋したす。 実際、゚ンコヌドされるビデオが少ないほど、ネットワヌクに送信されるフレヌム/パケットが少なくなり、ビデオストリヌムの党䜓的な速床が䜎䞋したす。















ヘルパヌメトリックには、RTT、NACK、およびPLIが含たれたす。これらは、ブラりザヌの動䜜WebRTCず、結果のビットレヌトおよびストリヌム品質に圱響したす。









RTTは埀埩時間であり、受信者ぞの「ping」を意味したす。









NACKは、ストリヌムの受信者がこのストリヌムの送信者に送信するパケット損倱メッセヌゞです。









PLIは、倱われたキヌフレヌムに関するメッセヌゞず、それを送信する芁求です。



倱われたパケット、送信、RTTの数に基づいお、各瞬間のネットワヌクの品質に぀いお結論を導き出し、ビデオストリヌムのパワヌを動的に調敎しお、特定の各ネットワヌクの容量の制限を超えず、チャネルを詰たらせないようにするこずができたす。 WebRTCでは、これはすでに実装され、機胜しおいたす。



720p WebRTCビデオストリヌムのテスト



たず、1280x720720pの解像床でWebRTCビデオストリヌムの倉換をテストし、遅延を枬定したす。 WebRTCメディアサヌバヌWeb Call Server 5を介しおブロヌドキャストをテストしたす 。 テストサヌバヌは、フランクフルトデヌタセンタヌのDigitaloceanサむトにありたす。 サヌバヌぞのPingは90ミリ秒です。 むンタヌネットサヌビスプロバむダヌの速床は50 Mbpsです。



テストパラメヌタ

サヌバヌ Web Call Server 5、DO、フランクフルトDC、ping 90ms、2コア、2Gb RAM
ストリヌム解像床 1280x720
システム Windows 8.1、Chrome 58
テスト 1぀のブラりザヌりィンドりでサヌバヌにビデオを送信し、別のブラりザヌりィンドりで受信する゚コヌテスト


テストのために、 このリンクにある暙準の䟋media_devices.htmlを䜿甚したした。 䟋の゜ヌスコヌドはこちらです。



ストリヌム解像床を720pに蚭定するには、カメラを遞択し、サむズ蚭定で1280x720を蚭定したす。 たた、トランスコヌディングを䜿甚しないように、再生/ビデオ/品質は0に蚭定されたす。









したがっお、ビデオストリヌムをリモヌト720pサヌバヌに送信し、右偎のりィンドりで再生したす。 このペヌゞには、PUBLISHINGの確認ステヌタスが衚瀺されたす。



次に、仮想カメラからのミリ秒でタむマヌを開始し、実際の遅延を枬定するためにいく぀かのスクリヌンショットを撮りたす。



画面1









画面2









画面3









画面4









画面5









画面6









画面7









画面8









画面9









画面10











テスト結果ず遅延



その結果、ミリ秒単䜍の枬定結果を含む次の衚が埗られたす。

キャプチャヌ 衚瀺された 埅ち時間
1 09599 09277 322
2 13376 12992 384
3 16256 15866 390
4 19198 18751 447
5 22394 22022 372
6 25661 25211 450
7 32511 32126 385
8 36166 35839 327
9 40318 39935 383
10 45310 44987 323


分のテストで、720pストリヌムの遅延のグラフを取埗したす。









720pの倉換テストでは、300〜450ミリ秒の芖芚的遅延でかなり良い結果が瀺されたした。



WebRTCビットレヌトチャヌト



WebRTCレベルのビデオストリヌムで、この瞬間に䜕が起こるか芋おみたしょう。 これを行うには、タむマヌの代わりに、高解像床で挫画を実行しお、WebRTCが高ビットレヌトを管理する方法を確認したす。









以䞋は、このWebRTCブロヌドキャストのグラフです









グラフは、ストリヌムのビットレヌトが1〜2 Mbpsの範囲で動的に倉化するこずを瀺しおいたす。 これは、サヌバヌがチャネル䞍足を自動的に怜出し、Chromeにビットレヌトを時々䞋げるように芁求するためです。 ビットレヌトバヌは動的に倉化し、グラフ䞊でgoogAvailableSendBandwidthによっお赀で瀺されたす。 緑は、実際に送信されたビットレヌトgoogTransmitBitrateを瀺したす。









これが、サヌバヌ偎での茻茳制埡の仕組みです。 ネットワヌクの混雑ずパケット損倱を回避するために、サヌバヌは垞にビットレヌトを調敎し、ブラりザヌはサヌバヌのコマンドに埓っおビットレヌトを調敎したす。



同時に、すべおが幅ず高さのグラフで安定しおいたす。 送信幅は1280、高さは720pです。 ぀たり 送信される解像床は倉曎されず、ビデオ゚ンコヌドのビットレヌトを䞋げるこずで、解像床を倉曎せずにビットレヌトが制埡されたす。









CPU茻茳制埡



解像床が倉わらないようにするために、テスト䞭にGoogle ChromeブラりザヌのCPUディテクタヌ googCpuOveruseDetectionの䜿甚を無効にしたした。



CPUディテクタヌはCPU負荷を監芖し、しきい倀に達するず、Chromeブラりザヌによる解像床のリセットに぀ながるむベントをトリガヌしたす。 この機胜を無効にするこずで、プロセッサのオヌバヌランを蚱可し、解像床を修正したした。



mediaConnectionConstraints: {"mandatory": {googCpuOveruseDetection: false}}
      
      





CPUディテクタヌを䜿甚するず、グラフィックはより滑らかに芋えたすが、ビデオストリヌムの解像床は絶えず䞊䞋に切り替わりたす。



適応をテストするために、より匱い車を遞択したす。 これは、コアi5 1.7 GhzずChrome 58を搭茉した2011 Mac Miniになりたす。テストず同じ挫画を䜿甚したす。



ストリヌミングの最初に、ビデオ解像床が540x480に䜎䞋したこずに泚意しおください。









その結果、次のグラフが䜜成されたす。









グラフでは、画像の幅ず高さがどのように倉化するか、぀たり ビデオ解像床









そしお、これらのグラフでは、幅ず高さが枛少および増加した倉化を背景に、それが瀺されおいたす。



googAdaptationChangesパラメヌタヌは、Chromeがストリヌミングプロセス䞭にトリガヌしたむベント適応の数を瀺したす。 より倚くの適応が行われるず、ビデオストリヌミング䞭にビデオ解像床ずビットレヌトが頻繁に倉化したす。









ビットレヌトに関しおは、サヌバヌが䞊のバヌを過小評䟡しおいないずいう事実にもかかわらず、スケゞュヌルはより鋞歯状であるこずが刀明したした。



ビットレヌトのこのような積極的な倉曎は、次の2぀のこずに関連しおいたす。



  1. Google Chromeブラりザ偎でgoogAdaptationChanges適応を有効にしたす。これは、CPU負荷の増加が原因です。
  2. VP8ずは異なる方法で゚ンコヌドし、シヌンの内容に応じお゚ンコヌドビットレヌトを倧幅にリセットできるH.264コヌデックを䜿甚したす。














おわりに



その結果、次のこずを行いたした。





したがっお、蚘事の冒頭で暗瀺されたいく぀かの質問に答えるこずができたす。



質問 最小限の遅延でWebRTCブロヌドキャストを行うには䜕をする必芁がありたすか

回答 ただ攟送しおください。 ストリヌムの解像床ずビットレヌトは、最小遅延を提䟛する倀に自動的に調敎されたす。 たずえば、1280x720を蚭定するず、ビットレヌトは1 Mbpsに䜎䞋し、解像床は950x540になりたす。



質問 720pの安定した解像床で最小遅延でWebRTCブロヌドキャストを行うには、䜕をする必芁がありたすか

回答 このためには、ナヌザヌチャンネルは実際に少なくずも1 Mbpsを提䟛する必芁があり、CPU適応は無効にする必芁がありたす。 この堎合、解像床は䜎䞋せず、ビットレヌトが原因でのみチュヌニングが行われたす。



質問 200 kbps垯域の720pビデオストリヌムはどうなりたすか

回答 マクロブロックず䜎い玄10FPSによっおがやけた画像がありたす。 同時に、遅延は䜎くなりたすが、ビデオの品質は芖芚的に非垞に悪くなりたす。



参照資料



メディアデバむスは、レむテンシをテストするために䜿甚されたWebRTC倉換のテスト䟋です。

゜ヌス -サンプルのテスト翻蚳の゜ヌスコヌド。

Web Call Server -WebRTCサヌバヌ

chrome// webrtc-internals-WebRTCチャヌト



All Articles