Real Time Messaging Protocol

Real Time Messaging Protocol (RTMP) とは、Adobe が開発している、Adobe Flash プレーヤーとサーバーの間で、音声・動画・データをやりとりするストリーミングのプロトコル。元々は Macromedia が開発していて、Adobe に買収された。プロトコルの仕様は公開されている[1]

RTMP プロトコルは多数の変種がある。

  1. RTMP (素のプロトコル) - TCP 上で動き、デフォルトのポート番号は1935
  2. RTMPS - HTTPS を使い、SSL で暗号化されたプロトコル
  3. RTMPE - ディフィー・ヘルマン鍵共有に基づき暗号化されたRTMP。設計に欠陥があり、中間者攻撃が可能という脆弱性が存在する[2][3]ため、RTMPSを使う方が望ましい[3]
  4. RTMPT - HTTP で包んだ物。RTMP, RTMPS, RTMPE を含めることができる。
  5. pRTMP - Primetime DRMのかかったRTMP。

RTMP の主要な利用法は Flash Video を再生することだが、Adobe LiveCycle Data Services ES など、他のアプリケーションにも使用されている。

WebコンテンツでHTML5への移行が進んでFlashが利用されなくなってからは、動画配信もHTTPへの置き換えが進み、RTMPの利用は下火となっている[4]

概要

RTMP (RTMFP を除く) は TCP 上のプロトコルで、持続的接続を使い、(HTTPとの比較で)低レイテンシ通信を実現する。ストリームをスムーズに配信し、できるだけ多くの情報を送れるようにするために、ストリームをフラグメントに分割し、そのサイズはクライアントとサーバーの間で動的に交渉する。デフォルトのフラグメントサイズは音声は64バイト、動画とその他のデータタイプは128バイトである。複数のストリームのフラグメントは、インターリーブされ、単一の接続上に多重化される。データチャンクが十分大きく、フラグメントのヘッダーは1バイトしかないので、オーバーヘッドは小さい。しかしながら、実際は、個々のフラグメントは典型的にはインターリーブされない。代わりに、インターリーブと多重化はパケットレベルで行われ、複数のアクティブなチャンネルが、それぞれの帯域、レイテンシ、Quality of Service が要求を満たすように RTMP パケットが作られる。このようにパケットがインタリーブされるときは、独立に扱われ、フラグメントレベルではインタリーブされない。

RTMP は複数のチャンネルを定義していて、それの上でパケットが送受信され、それぞれは独立に動く。例えば、RPC リクエストとレスポンスを扱うチャンネル、動画ストリームを扱うチャンネル、オーディオストリームを扱うチャンネル、帯域外コントロールメッセージ (フラグメントサイズ交渉など) を扱うチャンネルなどがある。典型的な RTMP のセッションの間では、複数のチャンネルは同時にアクティブになる。RTMP データがエンコードされるとき、パケットヘッダーが生成される。パケットヘッダーは、送信するチャンネルのID、必要なら生成された時刻のタイムスタンプ、パケットペイロードの大きさなどを含む。このヘッダーの後に、実際のペイロード内容が続く。これは、現在のフラグメントサイズに基づき送信される前に分割される。パケットヘッダー自身は決して分割されることはなく、パケットの最初のフラグメントのデータのサイズに含まれない。別の言い方をすると、実際のパケットペイロード(メディアデータ)だけが、分割の対象となる。

より上のレイヤーでは、RTMP は MP3 や AAC や Flash Video を含み、Action Message Format を使いリモートプロシージャコールができる。全てのリモートプロシージャコールサービスは非同期で扱われ、単一のクライアントサーバーリクエストレスポンスモデルが使われ、リアルタイム通信は必要とされない[5]

HTTP トンネリング

RTMP Tunneled (RTMPT) において、RTMP データはカプセル化されて、HTTP で交換され、クライアント(この場合は、メディアプレーヤー)からのデータはサーバーの80番ポート (HTTPのデフォルト)に送られる。

HTTPヘッダーのため、トンネル化されていない RTMP メッセージよりも RTMPT はメッセージが大きくなるが、クライアントがファイアウォールの背後にいて、HTTP や HTTPS 以外の通信がブロックされているようなケースなど、RTMP で通信できないケースでも通信ができる。

プロトコルは、POST のボディに AMF メッセージを含める形で送信される。例としては、

POST /open/1 HTTP/1.1

がコネクションをオープンするのに使われる。

クライアントソフトウェア

最も広く使われている RTMP クライアントは Adobe Flash Player である。RTMP サーバーから音声や動画の再生ができる。

RTMP を部分的にサポートしているオープンソースのメディアプレーヤーは Xbmc があり、原始的な RTMP ストリームをサポートしている。RTMPE はサポートしていない。

サーバーソフトウェア

RTMP を実装しているサーバーの一覧

  • Adobe Media Server
  • Adobe LiveCycle Data Services
  • Amazon S3 & Amazon Cloudfront は RTMP を扱える
  • haXeVideo - プログラミング言語 haXe で書かれたマルチスレッドの FLV ストリーミングサーバー
  • Helix Universal Server
  • Onlinelib VCS Video Communication Server (iPhone サポートを含む)
  • Red5 Media Server - Java で書かれたオープンソースのサーバー
  • Erlyvideo
  • Unreal Media Server
  • Wowza Media Server
  • WebORB Integration Server
  • OneTeam Media Server
  • crtmpserver
  • FreeSWITCH RTMP media streaming
  • Netris iStream Video Server
  • FFmpeg
  • Flazr - Java 実装

RTMFP

詳細は「Real Time Media Flow Protocol」を参照

RTMP は TCP 上で動作するが、Real Time Media Flow Protocol (RTMFP) は UDP 上で動作するストリーミングプロトコル。ボイスチャットビデオチャット用。

  • crtmpserver の研究者が RTMFP プロトコルのリバースエンジニアリングを行っている。
  • Blue5 - RTMPE と RTMFP のオープンソース版を作成するプロジェクト。

参照

  1. ^ Real-Time Messaging Protocol (RTMP) specification | Adobe Developer Connection
  2. ^ Ripping Media Off of the Wire A Step-by-Step Guide P.40 DEF CON 2010年
  3. ^ a b What is RTMPE Wowza Media Systems
  4. ^ 清水俊也. “RTMPの2021年以降の話 ~ Adobe Flash以外の動画配信での使われ方 | DevelopersIO”. クラスメソッド発「やってみた」系技術メディア | DevelopersIO. 2022年7月24日閲覧。
  5. ^ Using RPC services in Flex Data Services 2. オリジナルの2007-04-03時点におけるアーカイブ。. https://web.archive.org/web/20070403192843/http://www.adobe.com/devnet/flex/articles/rpc_service_02.html 2007年4月16日閲覧。. 

外部リンク

  • Adobe Developer page - RTMP - 公式仕様
  • OSFlash - RTMP OS
ファイルフォーマット
プロトコル
ソフトウェア
ビューア
オーサリングツール
サーバソフトウェア
関連項目