跳到主要内容

14 Examples (示例)

14 Examples (示例)

以下示例涉及的流描述格式 (如 RTSL) 并非标准。这些示例不得用作那些格式的参考。

14.1 Media on Demand (Unicast) (点播媒体, 单播)

客户端 C 向媒体服务器 A (audio.example.com) 与 V (video.example.com) 请求影片。媒体描述存于 Web 服务器 W。媒体描述包含演示及其所有流的描述, 含可用编解码器, 动态 RTP payload types (负载类型), 协议栈, 以及语言或版权限制等内容信息。也可给出影片时间线指示。

本例中客户端仅对影片最后一段感兴趣。

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 (聚合 URL) 通过单条控制消息控制所有流。

以下示例展示用单个 RTSP 会话控制多条流, 并演示 aggregate URLs 的用法。

客户端 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

第一次失败时, 客户端尝试暂停演示中的一条流 (本例为视频)。该演示被服务器禁止单独暂停。第二次失败时, 聚合 URL 不得用于 SETUP, 需按流分别发控制消息以建立传输参数。

这使 Transport 头部语法保持简单, 便于防火墙解析传输信息。

14.3 Single Stream Container Files (单流容器文件)

部分 RTSP 服务器可能将所有文件都视为 "容器文件", 而另一些可能不支持该概念。因此客户端 SHOULD 按会话描述中的规则使用请求 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 命令中回到聚合 URL 的差异。多流且为聚合控制时完全合理, 但在仅有一条流的特例下不够直观。

此特例建议服务器对发送以下实现的客户端宽容:

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

因文件中仅单流, 语义并无歧义。

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