RTSP
ストリームのリモコン。記述・準備・再生・停止を、HTTP 風のテキストで。
DESCRIBE
プレイヤーが最初にする質問です。HTTP に似ているのは意図的な設計です。
フレーム全体
HTTP と同じく、行ごとのテキストです。RTSP は再生の制御(記述・準備・再生・停止)だけを担い、映像そのものは別に RTP で流れます。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| メソッド | 0–7 バイト目 | DESCRIBE | クライアントの依頼内容。DESCRIBE =「このストリームの構成を教えて」。ほかに OPTIONS、SETUP、PLAY、PAUSE、TEARDOWN があります。 |
| スペース | 8 バイト目 | 0x20 | 区切り。 |
| URL | 9–35 バイト目 | rtsp://cam.example.com/live | 対象のストリーム。スキームは rtsp://(既定ポート 554)。RTSP は HTTP によく似せてありますが、リクエストをまたいでサーバがセッションを覚える、状態を持つ方式です。 |
| スペース | 36 バイト目 | 0x20 | 区切り。 |
| バージョン | 37–44 バイト目 | RTSP/1.0 | プロトコルのバージョン。 |
| 改行 | 45–46 バイト目 | 0D 0A | リクエスト行の終わり。 |
| CSeq ヘッダ | 47–55 バイト目 | CSeq: 2 | リクエストの通し番号です。サーバが応答にそのまま写すので、クライアントは複数の要求が飛んでいても、答えと質問を対応づけられます。 |
| Accept ヘッダ | 56–80 バイト目 | Accept: application/sdp | クライアントが記述を受け取りたい形式。SDP(Session Description Protocol)は、ストリーム・コーデック・ポートを並べたテキストです。 |
| 空行 | 81–82 バイト目 | 0D 0A | ヘッダの終わり。DESCRIBE にボディはありません。 |
概要
RTSP(Real Time Streaming Protocol)は、プレイヤーが IP カメラやメディアサーバと話すための仕組みです。メッセージは HTTP に似ていますが(リクエスト行・ヘッダ・空行)、セッションを制御します。DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN。サーバはリクエストの間、状態を覚えています。
映像そのものは運びません。PLAY のあと、カメラは SETUP で合意したポートへ RTP パケットを送ります。
基本情報
- トランスポート
- TCP 554 (control)
- メディア
- UDP 上の RTP/RTCP、または TCP に混ぜて
- 符号化
- ASCII テキスト、CRLF 区切り
- メソッド
- OPTIONS DESCRIBE SETUP PLAY PAUSE TEARDOWN
- 記述形式
- SDP
- 規格
- RFC 2326 / RFC 7826 (2.0)
SETUP
メディアの送り先を取り決めます。
フレーム全体
クライアントが UDP ポートを決め、サーバはそこへ RTP を送ります。別の方法として、この同じ TCP 接続の中にメディアを交互に混ぜて流すこともでき、ファイアウォール越えに役立ちます。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| メソッド | 0–4 バイト目 | SETUP | SETUP =「このトラックを受け取る準備をする」。メディアが使うポートなど、トランスポートを取り決めます。 |
| スペース | 5 バイト目 | 0x20 | 区切り。 |
| トラック URL | 6–42 バイト目 | rtsp://cam.example.com/live/trackID=1 | 1 つのトラックの制御 URL(SDP から取得)。映像と音声は別々に準備します。 |
| バージョンと改行 | 43–53 バイト目 | RTSP/1.0 | バージョンと、行の終わり。 |
| CSeq ヘッダ | 54–62 バイト目 | CSeq: 3 | 次のリクエスト番号。 |
| Transport ヘッダ | 63–112 バイト目 | Transport: RTP/AVP;unicast;client_port=5000-5001 | SETUP の核心。「RTP(AVP プロファイル)をユニキャスト UDP で、私のポート 5000(RTP、偶数)と 5001(RTCP、奇数)へ送って」。サーバは自分のポートと Session ID で答えます。 |
| 空行 | 113–114 バイト目 | 0D 0A | ヘッダの終わり。 |
セッション全体
最初の質問から TEARDOWN まで、そして RTP が加わる場所。
やり取りの全体
RTSP はリモコン、RTP は映像そのものです。制御はポート 554 の TCP、メディアは SETUP で決めたポートの UDP を使います。
1このストリームは何?
ポート 554 への TCP 接続の上で、プレイヤーが記述を求めます。
2カメラが自分を説明する
応答のボディに SDP が入っています。2 つのトラック(映像 H.264、音声 AAC)と、その種別・制御 URL。
3映像トラックを準備する
プレイヤーが、RTP と RTCP 用の UDP ポートを提案します。
4セッションが作られる
カメラが確認し、自分のポートと、以後のすべてのリクエストが付ける Session ID を返します。
5送信を始めて
npt=0- は「最初から(ライブなら今から)ずっと」の意味です。
6了解
応答が最初の RTP パケットのシーケンス番号とタイムスタンプを伝え、プレイヤーが同期できます。
7映像が流れる
ここから制御チャネルは静かになります。メディアは取り決めたポートへ、UDP 上の RTP として流れ、隣のポートで RTCP レポートが交わされます。
8停止して後片付け
TEARDOWN でセッションを終えます。カメラは送信を止め、リソースを解放します。
使われる場面
- IP カメラ、防犯カメラ、NVR(おなじみの rtsp://camera/stream の URL)
- メディアサーバ、映像のテスト配信
- ffmpeg・VLC・GStreamer がすべて対応: `ffplay rtsp://...`
つまずきやすい点
- VLC では見えるのにファイアウォール越しで見えないときは、たいてい SETUP の UDP ポートが原因です。プレイヤーを TCP(インターリーブ)に切り替えます。
- カメラは同時セッション数に制限があります。TEARDOWN されずに残ったセッションは、タイムアウトまで新しい視聴者を締め出します。
- ブラウザは RTSP を直接再生できません。ゲートウェイで HLS や WebRTC に変換します。
出典・規格
- RFC 2326: RTSP 1.0
- RFC 7826: RTSP 2.0
- RFC 8866: SDP