# HG changeset patch # User oc # Date 1414459870 -32400 # Node ID 57a52fb8840eecd2a840c4f6e2ab6a81c9fa1447 # Parent b43c850d62c2ce3fe3e3057ea16b1076702877a4 update diff -r b43c850d62c2 -r 57a52fb8840e report.tex --- a/report.tex Mon Oct 27 19:46:41 2014 +0900 +++ b/report.tex Tue Oct 28 10:31:10 2014 +0900 @@ -18,8 +18,8 @@ \pagestyle{empty} \begin{document} -\title{題名} -\author{学籍番号 氏名 {}{} 指導教員 : 指導教員名} +\title{授業やゼミ向けの画面共有システムTreeVNCの設計と実装} +\author{115747H 大城美和 {}{} 指導教員 : 河野真治} \date{} \maketitle \thispagestyle{fancy} @@ -41,28 +41,91 @@ % 新たに実装を行うとかいうことを書いていく - - 本研究では、TreeVNCに新たな機能の実装を行う。 発表者の声が聴きとりづらい、遠隔から聴講することができないといった問題を解決したい。 そして、参加者同士のコミュニケーションの質を高めたい。 + \section{VNCとは} \section{TreeVNCの実装内容} +\section{デバッグリファクタしてきたこと} +機能向上のためTreeVNCをデバッグし、大幅な変更を加えた。 -\section{デバッグリファクタしてきたこと} - \subsection{コマンドの流れ} - \subsection{木を登る通信と下る通信} - \subsection{treeManagerが何をmanageしているのか、中身} - \subsection{共有した画面を消す} + + \subsection{port番号の構造を変更した} + TreeVNCに接続しているnodeすべてがport番号を保持するように設計し直した。nodeがTreeVNCに接続する際に、使用されていないport番号を探し、そのport番号を保持する。 + TreeVNCには、子nodeからrootへと送信するmessageがある(Screen Change Request, lost Parent等)。今まではこれらmessageを、nodeからrootへ直接messageを送信していた。その際、node側では送信専用・root側では受信専用のportを固定の番号で開き、使用していた。 + 今回設計し直したことによって、messageのやり取りの際、余計な通信経路を作る必要がなくあった。そして、port番号が重複してしまうことがなくなったので、パソコン1台でTreeVNCを複数立ち上げることが出来るようになった。 + + + \subsection{有線と無線でtreeが構成するように変更した} + + 有線と無線で違う木構造を形成するように設計し直した。 + + 無線での接続の場合、有線と比べてデータの受け渡しの速度が落ちる。 + 有線nodeと無線nodeを同じ木構造に接続すると、無線のnodeがデータ送受信のボトルネックになってしまう可能性がある。 + + TreeVNCは、rootがnodeListというリストを持って木構造を管理している。 + 有線と無線で違う木構造を形成する場合、このnodeListをネットワークインターフェース毎に作成しておく。 + 新しいnodeを接続する場合、nodeのネットワークインターフェースを取得し、どのnodeListに登録されるかを決める。 + こうすることによって、有線と無線で別の木構造を形成することが出来る。 + + + + \subsection{ビデオフィードバックを消した} + 自分の画面を共有した時、viewerを閉じるようにした。 + + 自分の画面を共有した時にviewerを閉じていないと、ビデオフィードバックが起こり、その画面が他ユーザに共有されてしまう。今までだとviewerを最小化する必要があった。 + + + + \subsection{子nodeの再接続時に落ちるバグを取った} + lostparent時、nodeの再接続が必要となる場合がある。死んだ親nodeとの接続は切れており、新しい親nodeとの再接続を行う。その際、ReceiverTaskスレッドという画面データを受け取るスレッドが動作したままであった。そのため、再接続時に画面データがずれ、エラーが起こっていた。接続時には一度ReceiverTaskスレッドを止め、接続が確立した際にスレッドを立ち上げるという処理を追加した。 + + + \subsection{checkDelayの再実装} + checkDelayでは、木構造を伝ったデータの受け渡しの速度を計測するための実装である。 + 画面データの送信は、構成された木構造を伝って行われている。画面データは生成された木を下ってnodeに到達し、nodeはそのデータを使って画面に画像データを出力している。checkDelayをその画像データと共にnodeに送信し、受信したnodeは木を登ってrootへとcheckDelayReplyを返信するように実装した。checkDelayを送信した時間と、checkDelayReplyを受信した時間を2で割ることによって、木を伝う速度がわかる。 + このcheckDelayを利用し、木構造の段数毎の遅延の発生を測定、そして今後のデバッグ作業にも役立てていく。 + + + \subsection{細かいデバッグ作業} + 使われていないメソッドを削除する、メソッドを適切な名前に変更する、デバッグ時にどのスレッドが動いているのかがわかるように各スレッドに名前を付ける等といった、細かいデバッグ作業を行った。 + + \section{新しいこと} - \subsection{checkDelayの再実装} +これから実装する予定である、TreeVNCの新しい機能を以下に記述する。 + + + \subsection{音声データの共有} + TreeVNCに、画像データと共に音声データを追加する。この機能を追加することによって、遠隔からでもプレゼンや授業に参加出来る。 + + + \subsection{画面の大きさを固定する} + 画面の大きさを画面共有する側で指定出来るようにする。 + 現在のTreeVNCは、画面データ全体を送信している。これでは共有する人によって画面サイズが違い、発表者毎に表示する大きさを手元で変えなければならない。 + 画面サイズをHDサイズ(1920x1080)に固定すれば、この手間を省くことが出来る。 + + + \subsection{画面の大きさを共有する側で変更できる} + どの画面を共有するのかを共有する側で指定出来るようにする。マルチディスプレイを共有する場合、2つの画面が共有されてしまい、本来共有する必要のないデータまで送信することになる。 + 共有する側に枠を用意し、この枠の大きさの画面データを共有するといった実装を考えている。 + + \section{今後の課題} + \subsection{大きいデータを送ってしまうとデータが詰まってしまう} + 全画面書き換えが立て続けに起こってしまった場合、データの受け渡し処理で遅延が発生する。 + 解決策として、VNCServerから一定以上のデータが連続して送られてくる場合、いくつかのデータは無視し、その中で最新のデータのみを出力するといった実装を行う。 + \subsection{errorメッセージがroot側に出力されてしまう} + clientで起こったエラーがroot側に表示されてしまうという問題がある。 + どのclientのエラーかを検出した後は、そのclientのIDを取得し、木構造を下へと降りる。 + 下へと降る間に、IDが一致したnodeでそのerrorを出力するような実装を行う。 + \begin{thebibliography}{9}