概要
ボイスチャットシステムでは、サーバーとクライアントとの通信にTCPを用いています。
以下では、クライアントからサーバーへの情報の流れと、
サーバーからクライアントへの情報の流れそれぞれについて解説します。
なお、ボイスチャットシステムでは、独自の方式で音声データを符号化しています。
後半では音声フォーマットについても、解説しています。
(注意)このシステムは実験用であるため、TCPポート番号は定めていません
(ユーザの権限で設定できるようにしてあります)。
したがって、実際に動作させるためには、サーバーとクライアントの双方でポート番号を一致させる必要があります。
クライアントからサーバーへ
クライアントがサーバーに対して行う動作は、ログイン、ログアウト、メッセージの投稿、音声データの送信などです。
これらの操作を実現するために、必要最小限なプロトコルを設定しました。
表1に、それらのプロトコルを示します。
クライアントがサーバーに対して送る情報は7種類です。
(表1)クライアントからサーバーへ送られる情報
| 操作 |
通信内容 |
備考 |
| ログイン |
login:<参加名><CR><LF>
<CR><LF>
|
<参加名>でログインします |
| 参加者情報の取得 |
Who are login?<CR><LF>
<CR><LF>
|
ログインメンバのリストを要求します |
| メッセージの投稿 |
Message:<投稿メッセージ><CR><LF>
<CR><LF>
|
<投稿メッセージ>を投稿します |
| 発言の開始信号 |
Voice Start<CR><LF>
<CR><LF>
|
発言開始の合図です |
| 音声データ |
Voice Data:<音声データ><CR><LF>
<CR><LF>
|
<音声データ>を送信します 音声データについては音声フォーマットへ |
| 発言の終了信号 |
Voice Stop<CR><LF>
<CR><LF>
|
発言終了の合図です |
| ログアウト |
logout<参加名><CR><LF>
<CR><LF>
|
ログアウトします |
サーバーからクライアントへ
サーバーがクライアントに対して行う動作は、ログインの許可、ログアウトの承認、投稿メッセージの紹介などです。
これらの操作を実現するためのプロトコルは表2のようになります。
サーバーがクライアントに対して送る情報は10種類です。
(表2)サーバーからクライアントへ送られる情報
| 操作 |
通信内容 |
備考 |
| ログイン成功 |
login succeeded<CR><LF>
ID:<ID No.>
VoicePass:<音声送信パスワード>
|
IDと音声送信パスワードが送られます
(UDP通信で設計したときの名残。使われません!)
|
| ログイン失敗 |
login failed<CR><LF>
<CR><LF>
|
ログインできなかったことを通知します |
| 入室メンバ |
Member login<CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
<CR><LF>
|
新規メンバ<参加名>が入室したことを知らせます |
| 退室メンバ |
Member login<CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
<CR><LF>
|
メンバ<参加名>が退室したことを知らせます |
| メッセージの投稿 |
Message:<投稿メッセージ><CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
<CR><LF>
|
メンバ<参加名>が<投稿メッセージ>を投稿したことを知らせます |
| 参加者情報 |
Member Size:<人数><CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
・・・
<CR><LF>
|
参加者のリストが与えられます |
| 発言者情報 |
Member Size:<人数><CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
ID:<ID No.><CR><LF>
Name:<参加名><CR><LF>
・・・
<CR><LF>
|
現在の発言者リストが与えられます |
| 音声データ |
Voice Data:<音声データ><CR><LF>
<CR><LF>
|
<音声データ>を送信します 音声データについては音声フォーマットへ |
| ログアウト成功 |
logout succeeded<CR><LF>
<CR><LF>
|
ログアウト成功を知らせます |
| 強制ログアウト |
disconnected<CR><LF>
<CR><LF>
|
強制的にログアウトさせるときに使います |
音声フォーマット
本来、音声はTCPで伝送するものではありませんが、
ここでは実験段階ということもあり、TCPで送信することにしました。
音声のフォーマットは、次のようになります。
- サンプリング周期 8kHz
- 量子化ビット数 6bit
- モノラル
6ビットのデータはPCMで与えられるのですが、
これをそのままTCPで転送するわけには行かないので、
次のような変換を行っています。
| 変換前 |
変換後 |
| 0〜9 |
'0'〜'9' |
| 10〜35 |
'a'〜'z' |
| 36〜61 |
'A'〜'Z' |
| 62, 63 |
'+', '-' |
したがって、転送される音声のデータは次のようになっています。
Voice Data:xzvxAxzBDFzxvEBvzxGvCzFvwEBD・・・<CR><LF>
<CR><LF>
Voice Data:の後に続くデータは128バイトです。
128バイトをブロック単位として音声伝送を行っています。
|