Codecs/RTMPTSpecification

RTMPT 仕様

ここでは、Red5 オープンソース Flash Server によって実装されている RTMPT トンネリングプロトコルについて説明します。このドキュメントは Macromedia による公式の仕様「ではなく」、RTMPT を使ったソフトウェアを記述する人々の役に立つことを期待して書かれたものである点に注意してください。

RTMPT とは、大まかに言えば、POST リクエストを使ってクライアントからサーバーに送信される RTMP プロトコルの HTTP ラッパーです。HTTP 接続が非持続的な性質を持っているため、RTMPT では、更新がないかどうかクライアントが定期にポーリングを行って、サーバーまたはほかのクライアントによって生成されたイベントについての通知を受け取る必要があります。

RTMPT セッションのライフタイム中は、以下で説明する 4 つのリクエストタイプをサーバーに送信できます。

URL

オープンする URL の形式は次のとおりです。

 http://server/<comand>/[<client>/]<index>

<command>

RTMPT リクエストタイプを表します (下記を参照)。

<client>

リクエストを実行するクライアントの ID を指定します (確立済みのセッションでのみ送信されます)。

<index>

不足するパッケージの検出に使われると推定される連番です。

リクエスト / レスポンス

すべての HTTP リクエストには、共通するプロパティがいくつかあります。

  • いずれも HTTP 1.1 POST を使用します。
  • Content-Type は application/x-fcs です。
  • ネットワークのオーバーヘッドを減らすため、接続はクライアントとサーバーがキープアライブする必要があります。

HTTP レスポンスにも、共通するプロパティがいくつかあります。

  • Content-Type は application/x-fcs です。
  • すべての確立されたセッションで、レスポンスデータの先頭バイトは、クライアントのポーリング間隔を制御し、値が高ければ高いほど、ポーリングリクエストは少なくなります。

ポーリング間隔

サーバーは、データが返された後、常に値 0x01 から開始し、10 個の空の応答の後、値を増やします。最大の間隔 (delay) は 0x21 で、この場合、2 つのリクエスト間の遅延は約 0.5 秒になります。

Red5 は現在、次のような刻みで遅延を増やします: 0x01, 0x03, 0x05, 0x09, 0x11, 0x21

初期接続 (コマンド "open")

これは、サーバー上にクライアントを登録して新しいセッションを開始するためにサーバーに送信される最初のリクエストです。サーバーは一意の ID (通常は数字) で応答し、クライアントは以後のすべてのリクエストでこの ID を使用します。

注: 応答にはポーリング間隔の値は含まれていません!正常に接続すると、URL で使われる連番はリセットされます。

クライアント更新 (コマンド "send")

RTMP を使ってクライアントがサーバーに送信するデータには、単純に HTTP ヘッダーがプリフィックスとして付けられ、それ以外はまったく手を加えられずに送信されます。

サーバーは、ポーリング間隔を制御する 1 バイト、および利用可能な場合には RTMP データを含む HTTP レスポンスで応答します。

ポーリングリクエスト (コマンド "idle")

クライアントがサーバーに送信するデータがそれ以上ない場合、クライアントは、ストリーミングデータや、共有オブジェクトなどのイベントを受け取るために、更新がないかどうかポーリングを行う必要があります。

セッションの切断 (コマンド "close")

クライアントが接続を終了する場合は "close" コマンドを送信し、サーバーはこれに対し、0x00 で応答します。