实时流协议

✍ dations ◷ 2024-12-23 05:05:36 #应用层协议,串流

实时流协议(Real Time Streaming Protocol,RTSP)是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。媒体服务器的客户端发布VCR命令,例如播放,录制和暂停,以便于实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)的媒体流。

流数据本身的传输不是RTSP的任务。大多数RTSP服务器使用实时传输协议(RTP)和实时传输控制协议(RTCP)结合媒体流传输。然而,一些供应商实现专有传输协议。例如,RealNetworks公司的RTSP服务器软件也使用RealNetworks的专有实时数据传输(RDT)。

RTSP由RealNetworks公司,Netscape公司 和哥伦比亚大学开发,第一稿于1996年提交给IETF。由互联网工程任务组(IETF)的多方多媒体会话控制工作组(MMUSIC WG)进行了标准化,并于1998年发布为RFC 2326。 RTSP 2.0 于2016年发布为RFC 7826,作为RTSP 1.0的替代品。RTSP 2.0基于RTSP 1.0,但除了基本的版本协商机制之外不向后兼容。

虽然在某些方面与HTTP类似,RTSP定义了控制多媒体播放控制顺序。虽然HTTP是无状态的,但RTSP具有状态; 当需要跟踪并发会话时使用标识符。像HTTP一样,RTSP使用TCP来维护端到端连接,而大多数RTSP控制消息由客户端发送到服务器,一些命令沿着另一个方向(即从服务器到客户端)传播。

这里提供了基本的RTSP请求。一些典型的HTTP请求,如OPTIONS请求也可用。默认传输端口为554 ,该端口同时应用于TCP和UDP,但后者很少用于控制请求。

C->S:  OPTIONS rtsp://example.com/media.mp4 RTSP/1.0       CSeq: 1       Require: implicit-play       Proxy-Require: gzipped-messagesS->C:  RTSP/1.0 200 OK       CSeq: 1       Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
DESCRIBE 请求
DESCRIBE请求包括RTSP URL(rtsp:// ...)以及可以处理的回复数据类型。该回复包括呈现描述,通常以会话描述协议(SDP)格式。其中,演示文稿描述列出了使用汇总网址控制的媒体流。在典型的情况下,每个音频和视频都有一个媒体流。
C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 2S->C: RTSP/1.0 200 OK      CSeq: 2      Content-Base: rtsp://example.com/media.mp4      Content-Type: application/sdp      Content-Length: 460      m=video 0 RTP/AVP 96      a=control:streamid=0      a=range:npt=0-7.741000      a=length:npt=7.741000      a=rtpmap:96 MP4V-ES/5544      a=mimetype:string;"video/MP4V-ES"      a=AvgBitRate:integer;304018      a=StreamName:string;"hinted video track"      m=audio 0 RTP/AVP 97      a=control:streamid=1      a=range:npt=0-7.712000      a=length:npt=7.712000      a=rtpmap:97 mpeg4-generic/32000/2      a=mimetype:string;"audio/mpeg4-generic"      a=AvgBitRate:integer;65790      a=StreamName:string;"hinted audio track"
SETUP 请求
SETUP请求指定如何传输单个媒体流。这必须在发送PLAY请求之前完成。请求包含媒体流URL和传输说明符。该说明符通常包括用于接收RTP数据(音频或视频)的本地端口,另一个用于RTCP数据(元信息))。服务器回复通常会确认所选参数,并填写缺少的部分,例如服务器选择的端口。必须在发送聚合播放请求之前,使用SETUP配置每个媒体流。
C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0      CSeq: 3      Transport: RTP/AVP;unicast;client_port=8000-8001S->C: RTSP/1.0 200 OK      CSeq: 3      Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCD      Session: 12345678
Play 播放请求
Play 播放请求 将导致播放一个或所有媒体流。可以通过发送多个播放请求来堆叠播放请求。URL可以是聚合URL(播放所有媒体流)或单个媒体流URL(仅播放该流)。可以指定范围。如果没有指定范围,流将从头开始播放,并播放到最后,或者如果流暂停,则在暂停点恢复播放。
C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 4      Range: npt=5-20      Session: 12345678S->C: RTSP/1.0 200 OK      CSeq: 4      Session: 12345678      RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012
PAUSE 暂停请求
PAUSE 暂停请求 暂时停止一个或所有媒体流,因此稍后可以通过播放请求恢复。请求包含聚合或媒体流URL。PAUSE请求中的范围参数指定何时暂停。当省略范围参数时,暂停会立即无限期地发生。
C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 5      Session: 12345678S->C: RTSP/1.0 200 OK      CSeq: 5      Session: 12345678
RECORD 记录请求
RECORD 该方法根据呈现描述开始记录一系列媒体数据。时间戳反映开始和结束时间(UTC)。如果没有给定时间范围,请使用演示文稿描述中提供的开始或结束时间。如果会话已经开始,请立即开始录制。服务器决定是否将记录的数据存储在请求URI或其他URI下。如果服务器不使用请求URI,则响应应为201,并包含描述请求状态并引用新资源的实体以及Location头。
C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 6      Session: 12345678S->C: RTSP/1.0 200 OK      CSeq: 6      Session: 12345678
ANNOUNCE 发布请求
ANNOUNCE 发布方法有两个目的:

从客户端发送到服务器时,ANNOUNCE将请求URL标识的演示文稿或媒体对象的描述发布到服务器。当从服务器发送到客户端时,ANNOUNCE会实时更新会话描述。如果新的媒体流被添加到演示文稿中(例如,在实时演示中),则应该再次发送整个演示文稿描述,而不仅仅是附加的组件,以便可以删除组件。(下面邮箱'#'号替换成'@')

C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 7      Date: 23 Jan 1997 15:35:06 GMT      Session: 12345678      Content-Type: application/sdp      Content-Length: 332      v=0      o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4      s=SDP Seminar      i=A Seminar on the session description protocol      u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps      e=mjh#isi.edu (Mark Handley)      c=IN IP4 224.2.17.12/127      t=2873397496 2873404696      a=recvonly      m=audio 3456 RTP/AVP 0      m=video 2232 RTP/AVP 31S->C: RTSP/1.0 200 OK      CSeq: 7
TEARDOWN 停止发布流请求
TEARDOWN 请求用于终止会话。它停止所有媒体流,并释放所有与会话相关的数据在服务器上。
C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 8      Session: 12345678S->C: RTSP/1.0 200 OK      CSeq: 8
GET_PARAMETER 获取参数请求
GET_PARAMETER 请求检索在URI中指定的呈现或流的参数的值。答复和回复的内容留给实施。没有实体的GET_PARAMETER可能用于测试客户端或服务器活动(“ping”)。
S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 9      Content-Type: text/parameters      Session: 12345678      Content-Length: 15      packets_received      jitterC->S: RTSP/1.0 200 OK      CSeq: 9      Content-Length: 46      Content-Type: text/parameters      packets_received: 10      jitter: 0.3838
SET_PARAMETER 设置参数请求
SET_PARAMETER 此方法请求设置由URI指定的演示文稿或流的参数值。
C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 10      Content-length: 20      Content-type: text/parameters      barparam: barstuffS->C: RTSP/1.0 451 Invalid Parameter      CSeq: 10      Content-length: 10      Content-type: text/parameters      barparam
REDIRECT 重定向请求
REDIRECT 请求通知客户端它必须连接到另一个服务器位置。它包含强制性头文件位置,表示客户端应发出该URL的请求。它可能包含参数Range,它指示重定向何时生效。如果客户端希望继续发送或接收此URI的媒体,则客户端必须向指定的主机发出针对当前会话的TEARDOWN请求和新会话的SETUP。
S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 11      Location: rtsp://bigserver.com:8001      Range: clock=19960213T143205Z-
嵌入式(交错式)二进制数据
某些防火墙设计和其他情况可能会强制服务器交叉RTSP方法和流数据。通常应避免这种交错,除非有必要,因为它会使客户端和服务器操作复杂化,并增加额外的开销。交叉二进制数据只能在RTSP通过TCP传输时使用。诸如RTP数据包之类的流数据由ASCII码符号(24个十六进制)封装,后跟一个字节的信道标识符,后面是封装二进制数据的长度,以二进制字节为单位,以网络字节顺序排列。流数据紧随其后,没有CRLF,但包括上层协议头。每个$块只包含一个上层协议数据单元,例如一个RTP包。
C->S: SETUP rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 3      Transport: RTP/AVP/TCP;interleaved=0-1S->C: RTSP/1.0 200 OK      CSeq: 3      Date: 05 Jun 1997 18:57:18 GMT      Transport: RTP/AVP/TCP;interleaved=0-1      Session: 12345678C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0      CSeq: 4      Session: 12345678S->C: RTSP/1.0 200 OK      CSeq: 4      Session: 12345678      Date: 05 Jun 1997 18:59:15 GMT      RTP-Info: url=rtsp://example.com/media.mp4;      seq=232433;rtptime=972948234S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}S->C: $\001{2 byte length}{"length" bytes  RTCP packet}

速率适配

使用RTP和RTCP的RTSP允许实现速率适配。

相关

  • 爿部,为汉字索引中的部首之一,康熙字典214个部首中的第九十个(四划的则为第三十个)。就中文而言,爿部归于四划部首。爿部只以左方为部字;而无其他部首可用者也会将部首归为爿部。1
  • 水獭水獭是一类水栖、肉食性的哺乳动物,在动物分类学中属于亚科级别,称为水獭亚科(Lutrinae),现存七个属及十三个物种。水獭亚科动物分布于全球各地。红树林的水獭生长在欧亚大陆,美洲
  • 黎德寿黎德寿(越南语:Lê Ðức Thọ,1911年10月14日-1990年10月13日),或译为黎得寿,原名潘廷启(Phan Đình Khải),越南政治人物、军人、革命家、外交官,前越南社会主义共和国和越南共产党
  • 伊利哈姆·阿利耶夫伊利哈姆·盖达尔·奥格雷·阿利耶夫(阿塞拜疆语:İlham Heydər oğlu Əliyev‎,1961年12月24日-),阿塞拜疆商人、政治家,新阿塞拜疆党领袖,前阿塞拜疆总统盖达尔·阿利耶夫之子,曾
  • 鲁道夫·闵可夫斯基鲁道夫·闵可夫斯基(德语:Rudolph Minkowski,1895年5月28日-1976年1月4日),生于阿尔萨斯斯特拉斯堡,德裔美籍天文学家,著名数学家赫尔曼·闵可夫斯基的侄子,他的父亲为生物化学家奥斯
  • 外岛外岛是指中华民国现今实际统治国土里比离岛更远的岛屿,例如在台湾本岛旁的澎湖群岛是离岛,福建省的金门群岛、马祖列岛则是外岛。驻守在外岛和离岛的中华民国国军官兵所领的加
  • 应用气象学应用气象学(英语:applied meteorology),是指研究有关专业与气象条件的相互关系及气象学应用于有关专业所形成的各专业气象学的统称。该学科将气象数据、分析、预测技术应用到实
  • 李渔李渔(1611年9月13日-1680年2月12日),初名仙侣,后改名渔,字谪凡,号笠翁,后人常称之蟹仙。明末清初文学家、戏曲家、园林建筑设计师,曾经评定四大奇书,祖籍浙江省兰溪县(今浙江省兰溪市)夏
  • 鼓浪屿公共租界鼓浪屿公共租界是中国在清末到民国时期的2个公共租界之一(另外一个公共租界是上海公共租界)。在鸦片战争期间,英军占领了鼓浪屿岛,直到1845年才撤军。1843年后,厦门根据《中英南
  • 猪血猪血是指猪的血液。在世界各地都有人类食用猪血的例子。在中国,满族,藏族,蒙古族人民有食用血肠的习惯,在欧洲和美国,也有人制作各式各样的血肠,血肠制作成分包含猪血。猪血也被人