跳到主要内容

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