SIPでメディアをマルチストリーミングするためのライブラリです。Linuxではカーネル2.6以降で動作します。iOS実装でも実績があります。OSSのRTP/RTSPサーバでは同様の機能を持つgstreamerも有名です。gstreamerはC言語で書いたオブジェクト指向ライブラリで勉強になると思います。Live555を使う公式はこちらです。installテスト用のサーバを起動させます。./testOnDemandRTSPServer次にRTSPクライアント(openRTSP)でサーバに接続します。v2013.09.18)ソースコードリーディングソースのディレクトリごとに簡単に機能を説明します。全体的にはベースとなる基底クラスを継承していくことで様々なメディアに対応する設計になっています。/BasicUsageEnvironment/UsageEnvironment/WindowsAudioInputDevice/groupsock/liveMedia/mediaServer/proxyServer/testProgs/wis-streamer/BasicUsageEnvironmentまずBasicTaskScheduler0.cppではリクエストを待つためのループイベントを呼んでいます。}}SingleStep()はBasicTaskSchedulerクラスにありソケット接続、ファイルディスクリプタ管理をしています。fdの監視はselect()で行っています。&tv_timeToDelay);非同期読み取りイベントのハンドラを割り当てるため、据え置きイベントをスケジュールするために使用されます。セッションクッキー等を生成するhashTableクラスは汎用的なhashテーブルへのインターフェイスです。hashテーブルはUsageEnvironmentクラスにあります。これをサブクラス化することでLLとも連携できます。groupsockGroupsockはmulticastで配信するためのUsageEnvironmentのサブクラスです。multicastで送信するためにソケットをカプセル化しています。select()でfdを監視、ハンドリングしています。inet.cではアドレス操作ルーチン、ServerMediaSession.cではSDPレスポンスの生成、GroupsockHelper.cppはGroupsock.cppの補助クラスで低級関数の処理を担当しています。Protocolの事でSessionの告知や招待、他のMultiMediaSessionを開始するために必要な情報を記述することを目的としています。RTSPのDESCRIBEメソッドに付随させて送信します。IOHandlers.cppではsocketReadHandlerでhandleRead()を呼んでいます。multicastの略で、ソースを特定して運用するマルチキャストを意味していているようです。Multicast)というらしいです。{TunnelEncaps.hhではトンネリング時の処理で使っているみたいです。RTPInterfaceクラスではTCPベースの配信の場合の拡張機能を持っています。}}startNetworkReadingはMultiFramedRTPSourceから呼ばれます。次のタスクをスケジューラに登録する流れとなっています。実際にソケットからreadするためのハンドラーがRTPInterfaceのhandleReadメソッドです。Groupsock::handleRead,RTPInterface::handleReadがそれにあたります。中ではreadSocketを呼んでいます。fromAddress);また、tcpReadHandler1で1byteずつソケットから読み込みます。実際のデータサイズを見て1以上の場合にはRTPデータを読みにいきます。状態を継続し次のデータを読みにいきます。Dataを参照ください。fromAddress);readSocketの中ではrecvfromシステムコールでfromAddressからreadしています。SIPの基本的な機能を担当しています。自分でアプリケーションを作成する場合はliveMedia.hhをincludeする必要があります。RTSPServerクラスではRTSPハンドリング、RTSPレスポンス、ストリーミングファイル設定を行っています。以下の長い宣言で、taskSchedulerにRTSPハンドリングの開始を通知しています。fReclamationTestSeconds(reclamationTestSeconds)リクエストのRTSPメソッド判定やレスポンス生成はRTSPClientConnectionクラスで行っています。実際にRTSPリクエストをParseしているのがRTSPCommonクラスのparseRTSPRequestStringメソッドです。resultCmdNameにはRTSPメソッドが格納され,戻り値のparseSucceededがTrueの場合はresponseを生成していきます。DESCRIBEのハンドリングの場合にDigest認証のチェックが入ります。True;authDBの設定がある場合は,以下で認証の処理に入ります。break;authenticationOK内で認証情報を含んだヘッダを探すparseAuthorizationHeaderを呼んでいます。参照し判定しています。一度HTTPトンネリングのチェックが入ります。HTTPトンネリングであるかはparseHTTPRequestStringメソッドで判定しています。acceptStr);sessionCookieとacceptStrはポインタでデータを渡しています。parseHTTPRequestStringメソッドでは以下のようにヘッダフィールドを検索するlookForHeaderでその値を取得しsessionCookieとacceptStrに代入しています。