# HG changeset patch # User riono # Date 1590607212 -32400 # Node ID 8a2cb927e4ebd91792aabfc1945ca044e062e503 # Parent 209be9c6243aa3e7a00b540cdc3701f046ef2372 update Slide diff -r 209be9c6243a -r 8a2cb927e4eb Slide/fig/Blocking.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Slide/fig/Blocking.svg Thu May 28 04:20:12 2020 +0900 @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 209be9c6243a -r 8a2cb927e4eb Slide/fig/ConnectMulticast.pdf Binary file Slide/fig/ConnectMulticast.pdf has changed diff -r 209be9c6243a -r 8a2cb927e4eb Slide/fig/UpdateRectangle.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Slide/fig/UpdateRectangle.svg Thu May 28 04:20:12 2020 +0900 @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 209be9c6243a -r 8a2cb927e4eb Slide/fig/microsoft-teams.png Binary file Slide/fig/microsoft-teams.png has changed diff -r 209be9c6243a -r 8a2cb927e4eb Slide/fig/msteams.png Binary file Slide/fig/msteams.png has changed diff -r 209be9c6243a -r 8a2cb927e4eb Slide/fig/smteamstest.png Binary file Slide/fig/smteamstest.png has changed diff -r 209be9c6243a -r 8a2cb927e4eb Slide/fig/zoom.png Binary file Slide/fig/zoom.png has changed diff -r 209be9c6243a -r 8a2cb927e4eb Slide/sigos_slide.html --- a/Slide/sigos_slide.html Wed May 27 19:41:51 2020 +0900 +++ b/Slide/sigos_slide.html Thu May 28 04:20:12 2020 +0900 @@ -12,7 +12,7 @@ /* @theme example */div#p>svg>foreignObject>section{background-image:url("fig/logo.svg");background-position:right 3% bottom 2%;background-repeat:no-repeat;background-attachment:5%;background-size:20% auto} -/* @theme 99gzzvt6ac4s61e6sl5l87ocjamog5frb2x1mfgpl */div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}
+/* @theme t8am89286pc3les3uhbbp1pv95gh4p12xsvb2dmd9kl */div#p>svg>foreignObject>section[data-marpit-advanced-background=background]{display:block!important;padding:0!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=background]:before,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:after,div#p>svg>foreignObject>section[data-marpit-advanced-background=content]:before{display:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]{all:initial;display:flex;flex-direction:row;height:100%;overflow:hidden;width:100%}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container][data-marpit-advanced-background-direction=vertical]{flex-direction:column}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split]>div[data-marpit-advanced-background-container]{width:var(--marpit-advanced-background-split,50%)}div#p>svg>foreignObject>section[data-marpit-advanced-background=background][data-marpit-advanced-background-split=right]>div[data-marpit-advanced-background-container]{margin-left:calc(100% - var(--marpit-advanced-background-split, 50%))}div#p>svg>foreignObject>section[data-marpit-advanced-background=background]>div[data-marpit-advanced-background-container]>figure{all:initial;background-position:center;background-repeat:no-repeat;background-size:cover;flex:auto;margin:0}div#p>svg>foreignObject>section[data-marpit-advanced-background=content],div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo]{background:transparent!important}div#p>svg>foreignObject>section[data-marpit-advanced-background=pseudo],div#p>svg[data-marpit-svg]>foreignObject[data-marpit-advanced-background=pseudo]{pointer-events:none!important}div#p>svg>foreignObject>section[data-marpit-advanced-background-split]{width:100%;height:100%}

Multicast Wifi VNCの実装と評価

  • 安田 亮 @@ -27,91 +27,101 @@
-
+

画面配信システムの活用

-
  • コロナ禍によりリモートワークが推進され、ビデオ通話ソフトウェアの重要性が高まっている
  • リモートワークではPCの画面共有を行って、情報を共有することも多い
  • ビデオ通話ソフトウェアとしてはZoomやMicrosoft Teamsなどが挙げられる
-

(zoomとteamsの画像)

+
message +message
-
+

画面配信システムの活用

    -
  • 既存のソフトウェアではカメラを利用したビデオ通話に重点を置いて開発されており、PC画面を共有するとぼやけてしまう
  • +
  • 既存のソフトウェアではカメラを利用したビデオ通話に重点を置いて開発されており、PC画面を共有すると画面がぼやけてしまう
  • ビデオ通話にはそれぞれのサービスのサーバを経由しなければならない
-
+

画面配信システムの活用

-
  • 画面配信システムTreeVNCは、自身のPC画面を他者のPCと共有できるソフトウェアである
  • -
  • +
  • javaで書かれているためOSに依存せず利用可能
  • +
  • 画面共有に特化しているため、画面データをロスなく共有可能
  • +
  • 木構造のオーバーレイネットワークをLAN上で構成しPC同士でP2P通信を行う
-
-

TreeVNCの講義等での活用

-
    -
  • 講義では先生のPC画面を手元のPCで見ることで、コマンドを手元で打ち間違えや、メモを取る際にPCのみに集中を向けることができるようになった
  • -
  • ゼミにおいてもコードをつなげるために移動する必要がなく、各自の席で発表者の画面を見ることができる
  • -
  • 以上のようにTreeVNCは従来のプロジェクタなどよりも利便性が高い
  • -
-
-
+

本研究の概要

  • 画面配信は送信するデータ量が多いため、TreeVNCでは無線接続の場合、画面配信の遅延が大きくなってしまう
  • 現在のTreeVNCのデータ転送方法だと、無線接続で送信するには大きすぎる
  • -
  • 本研究ではMulticastの導入としてBlockingによるデータの分割を実装した
  • +
  • 本研究ではMulticastの導入のためBlockingによるデータの分割を実装した
  • +
  • Multicast通信のシステム構築の動作確認を行う
-
+

VNC

  • VNC(Virtual Network Computing)は、RFB(Remote Frame Buffer)プロトコルを用いてPCの遠隔操作を行うことを目的としたリモートデスクトップソフトウェア
  • サーバー側とクライアント側に分かれており、起動したサーバーにクライアントが接続することで遠隔操作を可能にしている
  • 全てのNodeが一台のサーバーに接続するため負担が大きい
-
message
+
message
-
+

TreeVNCとは

  • TreeVNCは本研究室で開発している画面配信システム
  • 木構造の接続方式によりNode間で画像データのやりとりを行う
  • 各ノードが2回ずつ画像データをコピーすることで配信側の負荷を分散し、大人数での画面配信が可能
-
message
+
message
-
+

UpdateRectangleによる画面更新

    -
  • RFB (Remote Frame Buffer) プロトコルを利用し、自身の画面をネットワークを通じて送信し他者の画面に表示する
  • -
  • クライアントに送信するデータは画面全てではなく、変更があった部分のFrameBufferを送る
  • -
  • 配信PC画面の変更があった部分のみをRFBで、UpdateRectangleとしてマルチキャストで一度のみ送信する
  • +
  • RFBプロトコルを利用し、自身の画面をネットワークを通じて送信し他者の画面に表示する
  • +
  • Multicastの場合、配信PC画面の変更があった部分のみをRFBで、UpdateRectangleとして一度のみ送信する
  • +
  • Packet lossが起こる可能性もあるため、一定期間で全画面送信を行っている
  • +
+
message
+
+
+

UpdateRectangleによる画面更新

+
  • RFBプロトコルでは画像データをRectangleで送信しているため、UpdateRectangleとして送信されるPacketには複数のRectangleが入るような構成をとっている
-
message
+
message
-
+

Multicastの問題点

  • wifiのMulticast Paketの最大サイズは64KBである
  • HDや4Kの画面を更新するためのサイズは大きい
      -
    • 4Kディスプレイの場合8MB(画素数) x 8Byte(色情報)で64MB
    • +
    • 4Kディスプレイの場合8MB(画素数) x (8B x 3B)(色情報)で192MB
  • -
  • 送信データの圧縮と64KB毎のパケット変換が必要
  • +
  • 送信データの圧縮と64KB毎のPacket変換が必要
-
+

Blockingの考察

    -
  • 64KBのパケットに収めるため、ZRLEEで圧縮する前にBlockingを行い、Rectangleの再構成を行う
  • +
  • 圧縮された画像データをそのままクライアントへ送信していた +
      +
    • 64KBのPacketに収めるため送信前の圧縮データを解凍し、Rectangleの再構成を行う
    • +
    • 再構成を行ったあとクライアントへデータを送信する
    • +
    +
  • +
+
+
+

Blockingの考察

+
  • ZRLEを解凍したデータのRectangleは以下のような状況になっていると考えられ、Phaseで区別する
    • 行の途中から行の最後まで  Phase0
    • @@ -120,107 +130,99 @@
-
message
+
message
-
+

Blockingの考察

    -
  • 最大3つのRectangleの再構成を行いつつ、ZRLEEで変換を行いパケットの構成をする
  • -
  • Packetの先頭にはmessageIDなどが格納されているPacke Headerがある
  • +
  • 最大3つのRectangleの再構成を行いつつ、ZRLEEで変換を行いPacketの構成をする
  • +
  • Packetの先頭にはmessageIDなどが格納されているPacket Headerがある
  • 各RectangleにはRectangleのx,y座標や圧縮されたデータ長などが格納されているRectangle Headerを持っている
-
message
+
message
-
+

圧縮方式

  • zlibには以下の3つの圧縮方法が存在する
      -
    • NO FLUSH : Stream に格納されたデータを最高率で 圧縮を行う。Stream にある入力データが規定量に満た ない場合は圧縮されない
    • -
    • SYNC FLUSH : これまでに Stream に格納されたデー タの圧縮を行う。ただし圧縮率が低下する可能性がある
    • -
    • FULL FLUSH : SYNC FLUSH 同様、これまでに Stream に格納されたデータの圧縮を行う。異なる点 はこれまでの辞書情報がリセットされるため、圧縮率 が極端に低くなる可能性がある
    • +
    • NO_FLUSH : Stream に格納されたデータを最高率で 圧縮を行う。Stream にある入力データが規定量に満た ない場合は圧縮されない
    • +
    • SYNC_FLUSH : これまでに Stream に格納されたデー タの圧縮を行う。ただし圧縮率が低下する可能性がある
    • +
    • FULL_FLUSH : SYNC_FLUSH 同様、これまでに Stream に格納されたデータの圧縮を行う。異なる点 はこれまでの辞書情報がリセットされるため、圧縮率 が極端に低くなる可能性がある
-
+

圧縮方法

    +
  • Streamに格納されたデータがどのTileかを把握できないためNO_FLUSHは利用不可 +
    • 1TileごとにSYNC_FLUSHを行なっている
    • -
    • 行末ではFULL_FLUSHを行う
    • +
    • 行末ではFULL_FLUSを行う
    • NO_FLUSHを利用していないためデータの圧縮率は下がる
    • -
    -
-
-

その他の実装

-
    -
  • TreeVNCのBuildに使用している、Gradleを4.8から6.1へのバージョンアップ対応
  • -
  • java9以降非推奨だったRetinaAIPの更新対応
  • -
  • デバッグオプションの修正
  • -
-
-
-

まとめ

-
    -
  • -

    WifiでBlockingを用いて、Multicast paketを利用する手法についての考察と実装を行なった

    -
      -
    • Wifiの速度とMulticastの信頼性が高ければ実用的である可能性がある
    • -
    -
  • -
  • -

    TreeVNCのBuildやAPIのバージョンアップ対応、デバッグオプション修正を行なった

    -
  • -
  • -

    今後の課題

    -
      -
    • Multicast通信の実装
    • -
    • WifiのMulticast paket lossは接続環境や状況に依存すると思われるためさらなる実験が必要
    • -
    • Node接続時の有線接続と無線接続の判断、区別処理の実装
    • -
    • SYNC_FLUSHを使っているため圧縮率が低下しているため、圧縮率の向上についての考察
    • +
    • 画面上のデータのロスなく圧縮・解凍を行っている
+
message
+
+
+

Multicast用のシステム構築

+
    +
  • 画面配信を受けるためにRoot Nodeへ接続を行う
  • +
  • 新しいNodeは画面配信の初期メッセージを受け取るために、木構造に配置される
  • +
  • 画面配信はRoot NodeからのMulticastによって更新される
  • +
+
message
+
+
+

Multicast時の共有画面切り替え

+
    +
  • 画面共有を行いたいNodeが木構造よりRoot Nodeにリクエストを送信する
  • +
  • Root Nodeはリクエストを行ってきたNodeをVNCサーバとして接続する
  • +
  • Root Nodeは木構造の管理を行っているリストよりVNCサーバに対応している番号を削除し、木構造を再構成
  • +
  • 画面配信のためのinitDataを木構造より送信する
  • +
+
+
+

WAN上での動作

+
    +
  • wifi用にブロッキングの実装を行ったが、WAN上でも有効なプロトコルとなった
  • +
  • WAN上でもオーバーレイネットワークを構築できるような機能を追加することで、画面配信が可能になる
  • +
  • 音声についても、画面データより音のデータは小さいため同時に配信可能であると考える
  • +
+
+
+

実装の現状

+
    +
  • IPv4とIPv6の両方でMulticastを実行するとJavaのlibraryの段階で失敗してしまう
  • +
  • IPv4で接続した際にクライアントが1台のみしか接続できない
  • +
  • コロナ禍により十分な実験を行うことができていない
  • +
+
+
+

まとめ

+
    +
  • WifiでMulticastを実現するためのPacket分割を行うBlockingと、Multicastを行うオーバーレイネットワークの実装を行った
  • +
  • 実装によりMulticastでの画面配信は実用的であると推測できる
  • +
  • 社会情勢によりWAN上での動作の実装も視野に実験と開発を行っていく
  • +

- 講義やゼミではプロジェクタを使用して、先生が用意した資料を見ることが多い。その際接続不良など、物理的アクシデントが起きる恐れがある -- 画面配信システムで代用する場合がある。画面配信システムのとしてはAppleTVやUstreamなどが挙げられる - - AppleTVは画面共有先がTVに限定されている - - Ustreamは画面の切り替えを行うことができない - -<center><img src="https://i.imgur.com/5lT1RZ9.png" alt="message" width="200" height="200"> -<img src="https://i.imgur.com/qpeYXUl.png" alt="message" width="200" height="150"></center>

- 画面配信システムTreeVNCは、自身のPC画面を他者のPCと共有できるソフトウェアである -- javaで書かれているためOSに依存せず、物理的な制約なしに使用可能 -- TreeVNCを使用することで、参加者は手元のPCを使用しながら講義を受ける事が可能になる。切り替えの際も、ボタン1つで共有する画面の切替を可能としている

## RFBプロトコルのエンコードタイプ -- ZRLEとはRFBプロトコルでサポートされているエンコードタイプの1つ -- zlib圧縮、タイリング、run lengthエンコードを組み合わせている - -<center><img src="https://i.imgur.com/CdGCftg.png" alt="message" width="500" height="350"></center> - ---- - -## RFBプロトコルのエンコードタイプ -- 解凍に必要な辞書を書き出すことができないため、途中からデータを受け取ると正確に解凍できなくなる - -<center><img src="https://i.imgur.com/VxeaTMD.png" -alt="message" width="500" height="350"></center> - ---- - -## TreeVNCの画像データ圧縮方法 -- ZRLEを応用したZRLEEを使用している -- 辞書の書き出しを行えるようにし、データを途中から受け取っても解凍することが可能 -- ZRLEを一度解凍し、辞書を書き出して再圧縮を行う - - -<center><img src="https://i.imgur.com/VxeaTMD.png" alt="message" width="500" height="400"></center> - ----

## paket lossする可能性 +

ロスレス!! +サーバーレス!!

上部4Byteはパケットのヘッダー +それ以降はrectangleのヘッダー

図の説明特に緑の部分 +rectangle headerを入れる必要がある +ずらす必要がある

## paket lossする可能性 - wifiのMulticast paketは確実に送信されることが保証されておらず、paket lossする可能性がある - その対策としては以下の2つが取れる - 何もしない、定期的に全画面のデータが送信されるため問題ないと考える - 再送要求を行う、処理が複雑であることが予想される -- 現状では定期的に全画面のデータを送信しており、十分実用に耐えると考える