RTMP (Real Time Messaging Protocol)とは
RTMP(Real Time Messaging Protocol)は、アドビ(旧マクロメディア)が開発した、主に
Adobe Flash Playerとサーバー間で音声、動画、データをストリーミング伝送するためのプロトコルです。このプロトコルの仕様は公開されており、様々な実装が存在します。
RTMPの主な種類
RTMPには、用途やセキュリティ要件に応じて複数のバリエーションが存在します。
RTMP (素のプロトコル): TCP上で動作し、デフォルトポートは1935番です。
RTMPS: HTTPSを使用し、SSLで暗号化されたセキュアなプロトコルです。
RTMPE: ディフィー・ヘルマン鍵共有に基づき暗号化されますが、中間者攻撃のリスクがあるため、RTMPSの利用が推奨されます。
RTMPT: HTTPでカプセル化されたRTMPで、RTMP、RTMPS、RTMPEを内包できます。
pRTMP: Primetime DRMで保護されたRTMPです。
RTMPの利用
当初、RTMPはFlash Videoの再生に広く利用されていましたが、Adobe LiveCycle Data Services ESなどの他のアプリケーションでも活用されています。しかし、HTML5への移行が進み、Flashの利用が減少したため、動画配信におけるRTMPの利用は減少傾向にあります。
RTMPの技術的な詳細
RTMP(RTMFPを除く)はTCPをベースとしており、持続的な接続を利用することで、HTTPと比較して低遅延の通信を実現します。スムーズなストリーム配信とデータ効率を高めるため、ストリームはフラグメント(断片)に分割され、そのサイズはクライアントとサーバー間で動的に調整されます。デフォルトでは、音声は64バイト、動画およびその他のデータは128バイトのフラグメントサイズが使用されます。
複数のストリームのフラグメントは多重化され、単一の接続上で送られます。データチャンクが大きい場合、フラグメントヘッダーは1バイトに収まるため、オーバーヘッドは比較的小さいです。実際には、個々のフラグメントがインターリーブされるのではなく、パケットレベルで多重化が行われます。複数のアクティブなチャンネルが、それぞれの帯域、遅延、QoS(Quality of Service)要件を満たすようにRTMPパケットが構成されます。
RTMPは、独立して動作する複数のチャンネルを定義しており、各チャンネルでパケットが送受信されます。例えば、RPCリクエスト/レスポンス、動画ストリーム、オーディオストリーム、帯域外制御メッセージなどのチャンネルが存在します。通常のRTMPセッションでは、これらの複数のチャンネルが同時にアクティブになります。
RTMPデータがエンコードされる際、パケットヘッダーが生成されます。このヘッダーには、送信チャンネルのID、タイムスタンプ(必要に応じて)、パケットペイロードのサイズなどが含まれます。ヘッダーに続き、実際のペイロードデータが続きます。このペイロードは、現在のフラグメントサイズに基づいて分割されて送信されます。
より上位のレイヤーでは、RTMPはMP3、AAC、Flash Videoなどのメディア形式をサポートし、Action Message Format (AMF)を使用してリモートプロシージャコールを実行できます。これらのRPCサービスは非同期で処理され、リアルタイム通信を必要としません。
HTTPトンネリング (RTMPT)
RTMPTでは、RTMPデータはHTTPでカプセル化され、クライアントからサーバーの80番ポート(HTTPのデフォルト)に送信されます。HTTPヘッダーの分だけ、RTMPTのメッセージは非トンネル化RTMPよりも大きくなりますが、ファイアウォールでHTTP/HTTPS以外の通信がブロックされている環境でも利用可能です。
このプロトコルでは、POSTリクエストのボディにAMFメッセージを含める形でデータが送信されます。
例:
POST /open/1 HTTP/1.1
これは接続を開始するためのリクエストです。
RTMPクライアントソフトウェア
最も一般的なRTMPクライアントはAdobe Flash Playerであり、RTMPサーバーから音声や動画を再生するために使用されます。オープンソースのメディアプレーヤーでは、Xbmcが部分的にRTMPをサポートしていますが、RTMPEには対応していません。
RTMPサーバーソフトウェア
以下はRTMPを実装している主なサーバーソフトウェアのリストです。
Adobe Media Server
Adobe LiveCycle Data Services
Amazon S3 & Amazon Cloudfront (RTMPサポート)
haXeVideo
Helix Universal Server
Onlinelib VCS Video Communication Server
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)
RTMPはTCP上で動作しますが、
Real Time Media Flow Protocol (RTMFP)はUDP上で動作するストリーミングプロトコルで、ボイスチャットやビデオチャットに使用されます。crtmpserverの研究者によって、RTMFPプロトコルのリバースエンジニアリングが行われています。
Blue5というプロジェクトでは、RTMPEとRTMFPのオープンソース実装を目指しています。
参照
Adobe Developer page - RTMP
OSFlash - RTMP OS