SIPとRTP

神の声(専門家からのコメント)により、H.323よりもSIPを追ったほうがいいということなので、早速、SIPについてお勉強。とは言え、SIPって僕の理解では、通信を行うまでのセッションの開始に関するプロトコルなんですが。。。


ということで、Google三昧。
せっかくなので、おいらのネットサーフィン(死語?)のやり方を紹介。
現在、僕は、「Tabbrowser Extensions」という拡張機能を突っ込んだ、FireFoxを使ってWebを見ています。
まず、始めに、Googleを立ち上げて、気になる単語を適当にぽいぽいっと。
んで、検索結果を、中マウスクリックします。この操作により、対象のページがどんどんTabに放り込まれていきます。
ある程度、Tabが溜まったら(溜まりすぎて収拾がつかなくなったら)ざくざく斜め読みします。
気になる単語が出てきたら、最初のGoogleのTabに戻って再検索。(ここで新しいTabを作ってそこで検索すれば、検索の記録も残せてGood)
新しい単語の検索結果を、中マウスでクリックして、どんどん溜め込んで。。。
てなことを繰り返して、どんどん頭の中に単語を増やしていきます。ついでに関連するWebもTabの中に溜まっていきます。んで、斜め読みのついでにじっくり読んだりして。
ということで、今日は、溜め込んだページを一挙公開。って、後でじっくり読むためのリンク集なんだけど。。。
どんな単語で検索してこれらのページにたどりついたのかは、GoogleのTabをぽいぽい消してっちゃったので不明。次回、このような調べもののときには残しておくようにしよう。
今回はリンクがいっぱいあるので、TBができたとしても、TBは無し。
Windows Messenger の音声とビデオ
マイクロソフトのコラム。WindowsMessengerがUPnPでどのように動くかの解説。いまいち。
VoIPで用いられる音声コーデックの詳細
日本キャステム株式会社のページ。SIPの後で、実際に音声データをどのようにやり取りするかの概念がわかる。今回の探索の大当たり。
Windows Messenger の詳細 ‐ 通信のしくみ
MSのTechnet。WindowsMessengerにおけるSIPとの関係。
なんとなく、わかったようなわからんような。
まぁ確かに以前、Messengerを留守番ロボットに繋ぐときに、Messengerプロトコルを読んでるんで、言われてみれば、SIPのページに出てくるフォーマットに似てるかも。HTTPみたいなフォーマットだもんね。
鈴木直美の「Windows Messenger使用記」
~ルータとWindows Messengerの微妙な関係

NATとWindowsMessengerとの関係。先のWindows Messenger の音声とビデオにのりは近い。
ChaiPhone
音声通話をするためのSIPクライアント(ソフトフォン)

JAVAで書かれた音声通話するためのSIPクライアント。とりあえず、動くものがさくさく見られることは重要だ。ここも当たり。
マイクロソフトがIP電話を面白くする!?
~いま注目を集める「SIP」の最新トレンドと概要~

@ITのトレンド解説。ここも大当たり。
ここに書かれていることはとっても重要。他のWebを読むために必要な単語の解説がいっぱい。

SIP自体は、「セッションの開始/変更/終了」の基本的な機能のみしか提供しない。後は、セッション間の通信を安全に行うための暗号化機能である。これには、HTTPと同様にSSL/TLSが用いられる。VoIPで重要な帯域制御やマルチメディア・データのハンドリングなどの機能は、SIPでは標準で提供されない。SIPの利用に当たっては、下記のプロトコルなどと併せて使用することが前提となる。
* RTP(Real-time Transport Protocol):QoS制御
* RTSP(Real-Time Streaming Protocol):ストリーミングメディアの制御
* MEGACO(MEdia GAteway COntrol):PSTNへのゲートウェイの制御
* SDP(Session Description Protocol):マルチメディア・セッションの制御
 SIPでは基本的なセッション制御のみにフォーカスし、ほかのプロトコルでその機能を補う。SIPがシンプルで拡張性が高いのも、このようなプロトコル形態を取っているためである。

このページを読むと、次に調べなければいけない単語がよく見えてくる。
RTSP問い合わせの多い質問(FAQ)
ストリームのアプリで有名なRealNetworksのページ。
やっぱり基本的なところは、こうゆう企業が抑えてるのね。
RTP Real-time Transport Protocol RFC1889
Real Time Transport Protocolとはどんなもん?。ってな解説。実装はともかくとして、それ以前の概念の理解に役立つ。これも大当たり。
Real-Time Transport Protocol
AppleのQuickTimeのページ。RTPの概念について簡単に説明。RTPとRTSPとの違いがざっくり説明されている。UDPとNATについてとか、HTTPトンネリングとかの単語が出現。
Winsock Programmer’s FAQ
第3章: Winsock 中級者向けの議論

UDPの基礎知識。考えてみたら、UDPって使ったこと無いな。
第 8 章 マルチキャスト
RealNetworksのHelix Universal Serverのお話。別にマルチキャストに限った話じゃなくて、大量にデータをストリームしてる、Helixのお話として読める。まだ修行が足らないのか、いまいち理解できず。
IP電話を使うなら知っておきたいパケット制御
@ITの連載:VoIPに耐えるネットワーク構築のページ。大当たり。
上からたどって、ここまでくると、もう、ざくざく読める。
SIPに関しては、実際のメッセージのサンプルでも見れば、もう実装できそうな気分。(気分だけです。できません。世の中そんなに甘くないです。)
実際の音声データの流し方は、RTP(RFC1889/RFC3350)を使う。
G.711が64kbps, G.729が8kbps。ここまでくればこのあたりの用語も結構理解できる。
Microsoft リアルタイム コミュニケーション プロトコルとテクノロジ
Microsoftにおける、SIPやらRTPの実装についての解説。Windowsでの実装を考慮に入れて、さぁどんなことができそうですか?ってなお話に突入できます。
ここでは、SDP(Session Description Protocol)という用語を読み取ることができます。どうもこいつはマルチメディア会議に関するプロトコルの模様。
WindowsXPはXXXXをを提供しますとか、YYYYをサポートしてます。って書いてあるけど、どのレベルでしてるんだろうか。普通にAPIレベルで叩けるのか、それとも何かしらのSDKを入れなきゃ駄目なのか、商品を買わなきゃだめなのか。う~ん。わかったようなわからんような。
SIPって知ってるかい? [Part 2]
2ch掲示板のSIPに関するスレッド。実際にSIPに関して悪戦苦闘している人たちの苦悩を見ることができる。
SIP端末相互接続試験てなイベントがあるらしい。
ってここまで読んで、ふと気がついたけど、俺が働いてる会社にもIP電話設置してあるじゃん。
Speak-Freely
たまたま見つけたVoIPのソフト。
RTPの実装の実例ってところかしらん。
GNU oSIP Library
Brave GNU World – 第39号の中ほどに、GNU oSIP Libraryという記述がある。
Cで書かれた、SIPスタックの模様。コードが読めることは重要。
The GNU oSIP library
んで、そのoSIPの実際のページ。
eXosip:oSIPの上位レイヤのライブラリ
Partysip:SIP Proxy server
linphone:SIP webphone
全部GPL
PartySIP(SIP Proxy Server)サーバ Linux版の設定
PartySIP(SIP Proxy Server)を使用して、Linux版SIPサーバの設定の仕方。
SIPによるVoIP
Windows版のPartySIPの設定とWindows MessengerをクライアントにしてSIPによるVoIPの解説。
動くことは重要だ。
間違いだらけのネットワーク作り(204)2001/11/17
先のSIPによるVoIPの関連サイトからのたどった先。
読めます。よめます。ここまでくれば単語が理解できてます。ここからTOPにたどって、Clear Thinking間違いだらけのネットワーク作り-バックナンバー・インデックスとその抜粋IP電話/Skype研究は情報の宝庫。
SIP(1)
SIP(2)
俺たちの起業という中川氏のBlog内の記事。
無茶苦茶横着して、めちゃくちゃ優秀なプログラマが、動きゃええわの気持ちで作れば3日でSIPから音を流せるらしい。って、もちろん、それまでの資産やら経験やらがすごいんだろうけど。
既に頭の中に単語がそろっているので、以前読んだときにはじぇんじぇん意味がわからんかったのに、今回は意味がわかって読める。おいらも成長しました。
さて、ここまで読んで、VoiceChatに関することで、わかったことは、
最初の接続のところはSIPにすればちょっとHappy。
SIPで、接続、ユーザー一覧とかとってきて、ってところまでは、なんとかなるかも。
結局、音声流すところはRTPてなものを、もうちょっとお勉強しなきゃだめみたい。
RTPでは、パケット破棄および順所(UDPだから)、ジッタ制御とエコー(QoS API?)に関してを考えなきゃいけない。
このあたりの標準化のことを考えて、DirectPlay(Voice)が退役になるのかな。
ということで、このへんのことを都合よくやってくれる、WindowsのAPIまたはその手のライブラリを拾い集める必要がある。Windowsに普通にインストールされてるのでどこまでできるかなぁ。
ちうか、WindowsMessengerでマルチユーザーのVoIPくらい、とっととサポートせぇや。
普通にUDPだと、NATをうまく超えられないので、なんちゃらパンチじゃないけど、UPnPなど、その手の技を考慮する必要があるかも。
そいえば、DirectSoundで圧縮付でキャプチャしてくる機能があったな。
全部自前で書くのは、めんどくせぇ。
Skypeってよくできてるわ。
ということです。
ちと、おなかいっぱい。

「SIPとRTP」への3件のフィードバック

  1. SIPソフトフォン/サーバーは、SIP、SDP、RTP(RTCP)の組み合わせです。
    CodecはG.711でとりあえずやってみると良いです。
    SIPクライアントで言えば、恐らく一番の問題は、セッションよりも遅延や音飛び、NAT、そして相互接続性になるでしょう。
    遅延や音飛びはバッファをうまく利用して解決。
    NATはSTUN、UPnP、OutboutProxy等の組み合わせで回避する方法が取られています。(Skypeも同じです)

  2. OutboutProxy→OutboundProxyでした。
    Media Proxyのことです。
    SIPに関しては、Xten等のクライアントのパケットをスニファすると分かりやすいでしょう。

コメントを残す