IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> RTSP协议 -> 正文阅读

[网络协议]RTSP协议

简介

RTSP协议即实时流协议(Real TIme Streaming Protocol,RTSP)是一种网络应用协议,用以控制流媒体服务器。流数据本身的传输不是RTSP的任务,大多数RTSP服务器使用实时传输协议(RTP)和实时传输控制协议(RTCP)结合媒体流传输。

RTSP由RealNetworks公司,NetScape公司和哥伦比亚大学开发。

RTSP与HTTP

虽然RTSP协议在某些方面与HTTP类似,RTSP定义了控制多媒体播放控制顺序。HTTP是无状态的,但是RTSP是具有状态的,当需要跟踪会话时使用标识符。RTSP和HTTP一样使用TCP来维护端到端的链接,大多数RTSP控制消息由客户端发送到服务器,一些命令从服务器到客户端传播。RTSP协议使用554端口,http使用80端口。

RTSP消息

RTSP的消息有两大类,一是请求消息,一个是回应消息,两种消息的格式不同。

请求的消息格式如下:

方法 URI RTSP版本 CR LF

消息头 CR LF CR LF

消息体 CR LF

其中方法包括OPTIONS回应中所有的命令

响应的格式消息如下:

RTSP版本 状态码 解释 CR LF

消息头 CR LF CR LF

消息体 CR LF

其中RTSP版本一般都是RTSP/1.0,状态码200表示成功,对应的状态码说明如下:

分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

RTSP中定义的方法有如下

rtsp中定义的方法有:OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER ,SET_PARAMETER

下面是RTSP的基本请求(C代表客户端,S代表服务端)

OPTIONS请求,OPTIONS请求返回服务器将接受的请求类型

C->S : 
	OPTIONS rtsp://example.com/media.mp4 RTSP/1.0
	CSeq: 1
	Require: implicit-play
	Proxy-Require: gzipped-messages
S->C:
	RTSP/1.0 200 OK
	CSeq: 1
	Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

DESCRIBE请求,DESCRIBE请求包括RTSPURL (rtsp://)以及可以处理的回复数据类型。该回复包括呈现描述,通常以会话描述协议SDP格式。其中,演示文稿描述列出了使用汇总网址控制的媒体流。在典型的情况下,每个音频和视频都有一个媒体流

C->S: 
	DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 2

S->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-8001

S->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播放请求,请求播放一个或者所有媒体流,如果媒体流暂停,则在暂停点恢复播放。

C->S: 
	  PLAY rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 4
      Range: npt=5-20
      Session: 12345678

S->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暂停请求暂时停止一个或所有媒体流,通过PLAY请求恢复播放。

C->S: 
	  PAUSE rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 5
      Session: 12345678

S->C: 
	  RTSP/1.0 200 OK
      CSeq: 5
      Session: 12345678

RECORD记录请求,用于记录一系列媒体数据,时间戳反映开始时间和结束时间。

C->S: 
	  RECORD rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 6
      Session: 12345678

S->C: 
	  RTSP/1.0 200 OK
      CSeq: 6
      Session: 12345678

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 31

S->C: 
	  RTSP/1.0 200 OK
      CSeq: 7

TEARDOWN 停止发布流请求,该请求用于停止所有媒体流。并释放服务器上所有与会话相关的数据

C->S: 
	  TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 8
      Session: 12345678

S->C: 
	  RTSP/1.0 200 OK
      CSeq: 8

GET_PARAMETER 获取参数请求,请求检索URI中指定的流的参数。

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
      jitter

C->S: 
	  RTSP/1.0 200 OK
      CSeq: 9
      Content-Length: 46
      Content-Type: text/parameters

      packets_received: 10
      jitter: 0.3838

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: barstuff

S->C: 
	  RTSP/1.0 451 Invalid Parameter
      CSeq: 10
      Content-length: 10
      Content-type: text/parameters

      barparam

REDIRECT 重定向请求,该请求通知客户端必须链接到另一个服务器位置上。

S->C: 
	  REDIRECT rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 11
      Location: rtsp://bigserver.com:8001
      Range: clock=19960213T143205Z-

RTSP的重要字段参数

  1. Accept: 用于指定客户端可以接受的媒体描述信息类型。比如: Accept: application/rtsl, application/sdp;level=2
  2. Bandwidth: 用于描述客户端可用的带宽值。
  3. CSeq: 指定了RTSP请求回应对的序列号,在每个请求或回应中都必须包括这个头字段。对每个包含一个给定序列号的请求消息,都会有一个相同序列号的回应消息。
  4. Rang: 用于指定一个时间范围,可以使用SMPTE、NTP或clock时间单元。
  5. Session: Session头字段标识了一个RTSP会话。Session ID 是由服务器在SETUP的回应中选择的,客户端一当得到Session ID后,在以后的对Session 的操作请求消息中都要包含Session ID.
  6. Transport: Transport头字段包含客户端可以接受的转输选项列表,包括传输协议,地址端口,TTL等。服务器端也通过这个头字段返回实际选择的具体选项。如: Transport: RTP/AVP;multicast;ttl=127;mode=“PLAY”, RTP/AVP;unicast;client_port=3456-3457;mode=“PLAY”

PS:

SDP的格式如下

v=<version>
o=<username> <session id> <version> <network type> <address type> <address>
s=<session name>
i=<session description>
u=<URI>
e=<email address>
p=<phone number>
c=<network type> <address type> <connection address>
b=<modifier>:<bandwidth-value>
t=<start time> <stop time>
r=<repeat interval> <active duration> <list of offsets from start-time>
z=<adjustment time> <offset> <adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <transport> <fmt list>

v = (协议版本)
o = (所有者/创建者和会话标识符)
s = (会话名称)
i = * (会话信息)
u = * (URI 描述)
e = * (Email 地址)
p = * (电话号码)
c = * (连接信息)
b = * (带宽信息)
z = * (时间区域调整)
k = * (加密密钥)
a = * (0 个或多个媒体属性行)

参考:

https://zh.wikipedia.org/wiki/%E5%8D%B3%E6%99%82%E4%B8%B2%E6%B5%81%E5%8D%94%E5%AE%9A

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:44:27  更:2021-09-14 13:46:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/21 6:52:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码