14 Examples (例)
14 Examples (例)
以下の例で参照するストリーム記述形式 (RTSL など) は標準ではない。これらの例をそれら形式の参考にしてはならない。
14.1 Media on Demand (Unicast) (オンデマンドメディア, ユニキャスト)
クライアント C がメディアサーバー A (audio.example.com) と V (video.example.com) に映画を要求する。メディア記述は Web サーバー W に保存されている。記述にはプレゼンテーションとすべてのストリーム, 利用可能なコーデック, 動的 RTP ペイロード型, プロトコルスタック, 言語や著作権などの内容情報が含まれる。映画のタイムラインに関する示唆も与えられうる。
この例ではクライアントは映画の最後の部分のみに関心がある。
C->W: GET /twister.sdp HTTP/1.1 Host: www.example.com Accept: application/sdp
W->C: HTTP/1.0 200 OK Content-Type: application/sdp
v=0 o=- 2890844526 2890842807 IN IP4 192.16.24.202 s=RTSP Session m=audio 0 RTP/AVP 0 a=control:rtsp://audio.example.com/twister/audio.en m=video 0 RTP/AVP 31 a=control:rtsp://video.example.com/twister/video
C->A: SETUP rtsp://audio.example.com/twister/audio.en RTSP/1.0 CSeq: 1 Transport: RTP/AVP/UDP;unicast;client_port=3056-3057
A->C: RTSP/1.0 200 OK CSeq: 1 Session: 12345678 Transport: RTP/AVP/UDP;unicast;client_port=3056-3057; server_port=5000-5001
C->V: SETUP rtsp://video.example.com/twister/video RTSP/1.0 CSeq: 1 Transport: RTP/AVP/UDP;unicast;client_port=3058-3059
V->C: RTSP/1.0 200 OK CSeq: 1 Session: 23456789 Transport: RTP/AVP/UDP;unicast;client_port=3058-3059; server_port=5002-5003
C->V: PLAY rtsp://video.example.com/twister/video RTSP/1.0 CSeq: 2 Session: 23456789 Range: smpte=0:10:00-
V->C: RTSP/1.0 200 OK CSeq: 2 Session: 23456789 Range: smpte=0:10:00-0:20:00 RTP-Info: url=rtsp://video.example.com/twister/video; seq=12312232;rtptime=78712811
C->A: PLAY rtsp://audio.example.com/twister/audio.en RTSP/1.0 CSeq: 2 Session: 12345678 Range: smpte=0:10:00-
A->C: RTSP/1.0 200 OK CSeq: 2 Session: 12345678
Range: smpte=0:10:00-0:20:00 RTP-Info: url=rtsp://audio.example.com/twister/audio.en; seq=876655;rtptime=1032181
C->A: TEARDOWN rtsp://audio.example.com/twister/audio.en RTSP/1.0 CSeq: 3 Session: 12345678
A->C: RTSP/1.0 200 OK CSeq: 3
C->V: TEARDOWN rtsp://video.example.com/twister/video RTSP/1.0 CSeq: 3 Session: 23456789
V->C: RTSP/1.0 200 OK CSeq: 3
音声と動画トラックが別サーバーにあり, 開始がわずかにずれ相互にドリフトしうるとしても, クライアントは標準 RTP 手法, 特に RTCP sender reports に含まれるタイムスケールで両者を同期できる。
14.2 Streaming of a Container file (コンテナファイルのストリーミング)
この例では, container file (コンテナファイル) は同一エンドユーザ向けプレゼンテーションに関する複数の連続メディア型を保持する格納実体である。実質的にコンテナファイルは RTSP プレゼンテーションを表し, 各コンポーネントが RTSP ストリームである。このようなプレゼンテーションの保存にコンテナファイルが広く用いられる。コンポーネントは独立ストリームとして運ばれるが, サーバ側でそれらに共通コンテキストを維持することが望ましい。
サーバーが単一のストレージハンドルを開いたままにしやすくなり, サーバーがストリームに優先度を付ける場合も同等に扱える。
著者がクライアントによる選択的取得を防ぎ合成表現を守りたい場合もある。密に束ねられたプレゼンテーションでは, aggregate URL で単一の制御メッセージですべてのストリームを制御できることが望ましい。
以下は単一 RTSP セッションで複数ストリームを制御する例であり, aggregate URL の使用も示す。
クライアント C がメディアサーバー M にプレゼンテーションを要求する。映画はコンテナファイルに格納されている。クライアントはコンテナファイルの RTSP URL を取得済みである。
C->M: DESCRIBE rtsp://foo/twister RTSP/1.0 CSeq: 1
M->C: RTSP/1.0 200 OK CSeq: 1 Content-Type: application/sdp Content-Length: 164
v=0 o=- 2890844256 2890842807 IN IP4 172.16.2.93 s=RTSP Session i=An Example of RTSP Session Usage a=control:rtsp://foo/twister t=0 0 m=audio 0 RTP/AVP 0 a=control:rtsp://foo/twister/audio m=video 0 RTP/AVP 26 a=control:rtsp://foo/twister/video
C->M: SETUP rtsp://foo/twister/audio RTSP/1.0 CSeq: 2 Transport: RTP/AVP;unicast;client_port=8000-8001
M->C: RTSP/1.0 200 OK CSeq: 2 Transport: RTP/AVP;unicast;client_port=8000-8001; server_port=9000-9001 Session: 12345678
C->M: SETUP rtsp://foo/twister/video RTSP/1.0 CSeq: 3 Transport: RTP/AVP;unicast;client_port=8002-8003 Session: 12345678
M->C: RTSP/1.0 200 OK CSeq: 3 Transport: RTP/AVP;unicast;client_port=8002-8003; server_port=9004-9005 Session: 12345678
C->M: PLAY rtsp://foo/twister RTSP/1.0 CSeq: 4 Range: npt=0- Session: 12345678
M->C: RTSP/1.0 200 OK CSeq: 4 Session: 12345678 RTP-Info: url=rtsp://foo/twister/video; seq=9810092;rtptime=3450012
C->M: PAUSE rtsp://foo/twister/video RTSP/1.0 CSeq: 5 Session: 12345678
M->C: RTSP/1.0 460 Only aggregate operation allowed CSeq: 5
C->M: PAUSE rtsp://foo/twister RTSP/1.0 CSeq: 6 Session: 12345678
M->C: RTSP/1.0 200 OK CSeq: 6 Session: 12345678
C->M: SETUP rtsp://foo/twister RTSP/1.0 CSeq: 7 Transport: RTP/AVP;unicast;client_port=10000
M->C: RTSP/1.0 459 Aggregate operation not allowed CSeq: 7
最初の失敗では, クライアントがプレゼンテーションの 1 ストリーム (動画) の一時停止を試みる。サーバーはそのプレゼンテーションでそれを禁止している。2 番目では aggregate URL を SETUP に使えず, ストリームごとにトランスポート設定の制御メッセージが必要である。
Transport ヘッダーの構文を単純に保ち, ファイアウォールがトランスポート情報を解析しやすくする。
14.3 Single Stream Container Files (単一ストリームのコンテナファイル)
一部の RTSP サーバーはすべてのファイルを「コンテナファイル」として扱い, 他はその概念をサポートしない。したがってクライアントはセッション記述のルールに従ってリクエスト URL を用いるべきであり, 一貫した URL が常に使えると仮定すべきではない。マルチストリームサーバーが単一ストリームファイルをどう提供しうるかの例:
Accept: application/x-rtsp-mh, application/sdp
CSeq: 1
S->C RTSP/1.0 200 OK CSeq: 1 Content-base: rtsp://foo.com/test.wav/ Content-type: application/sdp Content-length: 48
v=0 o=- 872653257 872653257 IN IP4 172.16.2.187 s=mu-law wave file i=audio test t=0 0 m=audio 0 RTP/AVP 0 a=control:streamid=0
C->S SETUP rtsp://foo.com/test.wav/streamid=0 RTSP/1.0 Transport: RTP/AVP/UDP;unicast; client_port=6970-6971;mode=play CSeq: 2
S->C RTSP/1.0 200 OK Transport: RTP/AVP/UDP;unicast;client_port=6970-6971; server_port=6970-6971;mode=play CSeq: 2 Session: 2034820394
C->S PLAY rtsp://foo.com/test.wav RTSP/1.0 CSeq: 3 Session: 2034820394
S->C RTSP/1.0 200 OK CSeq: 3 Session: 2034820394 RTP-Info: url=rtsp://foo.com/test.wav/streamid=0; seq=981888;rtptime=3781123
SETUP の URL と PLAY で aggregate URL に戻す点に注意。複数ストリームで集約制御がある場合は自然だが, ストリームが 1 本だけの特例では直感に反する。
この特例では, 次を送る実装に対しサーバーが寛容であることが推奨される:
C->S PLAY rtsp://foo.com/test.wav/streamid=0 RTSP/1.0 CSeq: 3
最悪の場合サーバーは次を返すべきである:
S->C RTSP/1.0 460 Only aggregate operation allowed CSeq: 3
次に対してもサーバー実装が寛容であることが望ましい:
C->S SETUP rtsp://foo.com/test.wav RTSP/1.0 Transport: rtp/avp/udp;client_port=6970-6971;mode=play CSeq: 2
ファイルにストリームが 1 つしかないため, 意味は曖昧ではない。
14.4 Live Media Presentation Using Multicast (マルチキャストによるライブメディア)
メディアサーバー M がマルチキャストアドレスとポートを選ぶ。ここでは Web サーバーが完全な記述へのポインタのみを含み, M が完全な記述を保持すると仮定する。
C->W: GET /concert.sdp HTTP/1.1 Host: www.example.com
W->C: HTTP/1.1 200 OK Content-Type: application/x-rtsl
C->M: DESCRIBE rtsp://live.example.com/concert/audio RTSP/1.0 CSeq: 1
M->C: RTSP/1.0 200 OK CSeq: 1 Content-Type: application/sdp Content-Length: 44
v=0 o=- 2890844526 2890842807 IN IP4 192.16.24.202 s=RTSP Session m=audio 3456 RTP/AVP 0 a=control:rtsp://live.example.com/concert/audio c=IN IP4 224.2.0.1/16
C->M: SETUP rtsp://live.example.com/concert/audio RTSP/1.0 CSeq: 2
Transport: RTP/AVP;multicast
M->C: RTSP/1.0 200 OK CSeq: 2 Transport: RTP/AVP;multicast;destination=224.2.0.1; port=3456-3457;ttl=16 Session: 0456804596
C->M: PLAY rtsp://live.example.com/concert/audio RTSP/1.0 CSeq: 3 Session: 0456804596
M->C: RTSP/1.0 200 OK CSeq: 3 Session: 0456804596
14.5 Playing media into an existing session (既存セッションへのメディア再生)
会議参加者 C がメディアサーバー M にデモテープを既存会議へ再生させたい。C はネットワークアドレスと鍵が会議で既に与えられておりサーバーが選ぶべきでないことを示す。単純な ACK 応答は省略する。
C->M: DESCRIBE rtsp://server.example.com/demo/548/sound RTSP/1.0 CSeq: 1 Accept: application/sdp
M->C: RTSP/1.0 200 1 OK Content-type: application/sdp Content-Length: 44
v=0 o=- 2890844526 2890842807 IN IP4 192.16.24.202 s=RTSP Session i=See above t=0 0 m=audio 0 RTP/AVP 0
C->M: SETUP rtsp://server.example.com/demo/548/sound RTSP/1.0 CSeq: 2 Transport: RTP/AVP;multicast;destination=225.219.201.15; port=7000-7001;ttl=127 Conference: [email protected]%20Starr
M->C: RTSP/1.0 200 OK CSeq: 2 Transport: RTP/AVP;multicast;destination=225.219.201.15;
port=7000-7001;ttl=127 Session: 91389234234 Conference: [email protected]%20Starr
C->M: PLAY rtsp://server.example.com/demo/548/sound RTSP/1.0 CSeq: 3 Session: 91389234234
M->C: RTSP/1.0 200 OK CSeq: 3
14.6 Recording (録画)
会議参加者クライアント C がメディアサーバー M に会議の音声と動画を記録させる。クライアントは ANNOUNCE メソッドで記録セッションのメタ情報をサーバーに提供する。
C->M: ANNOUNCE rtsp://server.example.com/meeting RTSP/1.0 CSeq: 90 Content-Type: application/sdp Content-Length: 121
v=0 o=camera1 3080117314 3080118787 IN IP4 195.27.192.36 s=IETF Meeting, Munich - 1 i=The thirty-ninth IETF meeting will be held in Munich, Germany u=http://www.ietf.org/meetings/Munich.html e=IETF Channel 1 [email protected] p=IETF Channel 1 +49-172-2312 451 c=IN IP4 224.0.1.11/127 t=3080271600 3080703600 a=tool:sdr v2.4a6 a=type:test m=audio 21010 RTP/AVP 5 c=IN IP4 224.0.1.11/127 a=ptime:40 m=video 61010 RTP/AVP 31 c=IN IP4 224.0.1.12/127
M->C: RTSP/1.0 200 OK CSeq: 90
C->M: SETUP rtsp://server.example.com/meeting/audiotrack RTSP/1.0 CSeq: 91 Transport: RTP/AVP;multicast;destination=224.0.1.11; port=21010-21011;mode=record;ttl=127
M->C: RTSP/1.0 200 OK CSeq: 91 Session: 50887676 Transport: RTP/AVP;multicast;destination=224.0.1.11; port=21010-21011;mode=record;ttl=127
C->M: SETUP rtsp://server.example.com/meeting/videotrack RTSP/1.0 CSeq: 92 Session: 50887676 Transport: RTP/AVP;multicast;destination=224.0.1.12; port=61010-61011;mode=record;ttl=127
M->C: RTSP/1.0 200 OK CSeq: 92 Transport: RTP/AVP;multicast;destination=224.0.1.12; port=61010-61011;mode=record;ttl=127
C->M: RECORD rtsp://server.example.com/meeting RTSP/1.0 CSeq: 93 Session: 50887676 Range: clock=19961110T1925-19961110T2015
M->C: RTSP/1.0 200 OK CSeq: 93