Real Time Messaging Protocol (RTMP) とは、Adobe が開発している、Adobe Flash プレーヤーとサーバーの間で、音声・動画・データをやりとりするストリーミングのプロトコル。元々は Macromedia が開発していて、Adobe に買収された。プロトコルの仕様は公開されている[1]。
RTMP プロトコルは多数の変種がある。
RTMP (素のプロトコル) - TCP 上で動き、デフォルトのポート番号は1935
RTMPS - HTTPS を使い、SSL で暗号化されたプロトコル
RTMPE - ディフィー・ヘルマン鍵共有に基づき暗号化されたRTMP。設計に欠陥があり、中間者攻撃が可能という脆弱性が存在する[2][3]ため、RTMPSを使う方が望ましい[3]。
RTMPT - HTTP で包んだ物。RTMP, RTMPS, RTMPE を含めることができる。
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]。 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 を実装しているサーバーの一覧 RTMP は TCP 上で動作するが、Real Time Media Flow Protocol (RTMFP) は UDP 上で動作するストリーミングプロトコル。ボイスチャット・ビデオチャット用。
概要
HTTP トンネリング
クライアントソフトウェア
サーバーソフトウェア
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」を参照
⇒crtmpserver の研究者が RTMFP プロトコルのリバースエンジニアリングを行っている。
Blue5
参照^ ⇒Real-Time Messaging Protocol (RTMP) specification 。Adobe Developer Connection
^ Ripping Media Off of the Wire A Step-by-Step Guide
^ a b What is RTMPE
^ 清水俊也. “RTMPの2021年以降の話 ~ Adobe Flash以外の動画配信での使われ方 。DevelopersIO
^ Using RPC services in Flex Data Services 2
表
話
編
歴
Adobe Flash
ファイルフォーマット
ActionScript
Action Message Format
Flash Video
Flash XML Graphics
MXML
Shockwave Flash Component
Shockwave Flash
プロトコル
HTTP Dynamic Streaming
Real Time Messaging Protocol
Real Time Media Flow Protocol
XMLSocket
ソフトウェア
ビューア
Adobe Flash Player
Adobe Flash Lite
Adobe AIR
Gnash
Lightspark
Swfdec
Ruffle
オーサリングツール
Adobe Flash Professional
Apache Flex
Adobe Flash Builder
Adobe Flash Catalyst
Adobe Flash Media Live Encoder
FlashDevelop
OpenLaszlo
サーバソフトウェア
Adobe Media Server
Adobe Flash Cast
関連項目
フラッシュアニメーション
Local Shared Object