view report.tex @ 1:57a52fb8840e

update
author oc
date Tue, 28 Oct 2014 10:31:10 +0900
parents b43c850d62c2
children b59646b8471a
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvips]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
%\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}} 琉球大学主催 工学部情報工学科 中間発表予稿}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\begin{document}
\title{授業やゼミ向けの画面共有システムTreeVNCの設計と実装}
\author{115747H 大城美和 {}{} 指導教員 : 河野真治}
\date{}
\maketitle
\thispagestyle{fancy} 

\section{はじめに}

% TreeVNCが作られた理由
普段授業を行う際、プロジェクタを使用し授業を進めることが多い。この場合、後ろの席から見えにくく、不便を感じることがよくある。そこで、手元のパソコンに画面を出力することによって、この問題は解消される。ゼミ等の発表者が入れ替わる場合には、画面の切り替えをスムーズに行えることで、そこでかかる手間を省くことが出来る。

% 従来の画面共有システムVNCでは、多人数で接続すると画面データ提供側にアクセスが集中し、処理性能が落ちてしまい授業の進行についていかなくなってしまう。画面表示の切り替えの際も、VNCを一度切断し、発表者の画面に接続をし直す必要が出てくる。

% 先行研究
本研究室の卒業生である谷成雄氏が、授業やゼミ向けの画面共有システムであるTreeVNCを開発した。TreeVNCは、クライアントをツリー構造に接続させ、その上から順番にデータを流していくという方法を取り、アクセスを分散させ処理性能が落ちることを防いでいる。画面を切り替える際もボタンひとつで済む様に設計されていて、再接続をする必要がない。

% 現在のTreeVNCの問題
現在のTreeVNCでは、発表内容を画面上でみることは出来るが、遠隔で授業やプレゼンを聴講することができない。


% 新たに実装を行うとかいうことを書いていく


本研究では、TreeVNCに新たな機能の実装を行う。
発表者の声が聴きとりづらい、遠隔から聴講することができないといった問題を解決したい。

そして、参加者同士のコミュニケーションの質を高めたい。


\section{VNCとは}
\section{TreeVNCの実装内容}


\section{デバッグリファクタしてきたこと}
機能向上のためTreeVNCをデバッグし、大幅な変更を加えた。


  \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{新しいこと}
これから実装する予定である、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}

\bibitem{1}

\end{thebibliography}
\end{document}