RTSP交互流程
C表示rtsp客户端,S表示rtsp服务端
C->S:OPTION request //询问S有哪些指令可用
S->C:OPTION response //S回应信息中包括提供的所有可用指令
C->S:DESCRIBE request //要求得到S提供的媒体初始化描述信息
S->C:DESCRIBE response //S回应媒体初始化描述信息,主要是sdp
C->S:SETUP request //设置会话的属性,以及传输模式,提醒S建立会话
S->C:SETUP response //S建立会话,返回会话标识符,以及会话相关信息
C->S:PLAY request //C请求播放
S->C:PLAY response //S回应该请求的信息
S->C:发送流媒体数据
C->S:TEARDOWN request //C请求关闭会话
S->C:TEARDOWN response //S回应该请求
OPTION方法
- 方法格式如下所示,OPTION方法由客户端发起,格式为:
OPTION URL RTSP版本号
CSeq: CSeq号(每发一条方法加一)
User-Agent:
- 服务端给反馈,格式为:
RTSP版本号 状态码 状态字段
CSeq: 服务端发的CSeq号
Date: 时间 时区
Public: 可用方法
DESCRIBE方法
- DESCRIBE方法由客户端发起,带鉴权的RTSP需要除OPTION方法外每次都发鉴权信息DESCRIBE方法要发送两次,一次是不带鉴权的格式为:
DESCRIBE URL RTSP版本号
CSeq: CSeq号(每发一条方法加一)
User-Agent:
Accept:
- 服务端由于需要鉴权,所以以realm和nonce质询,realm是用户自定义字符串,nonce是包括\0长度为33的随机小写字母和数字组成的字符串
- 格式为:
RTSP版本号 状态码 状态字段
CSeq: 服务端发的CSeq号
Date: 时间 时区
WWW-Authenticate: Digest realm=" ", nonce=""
- 客户端收到第一次DESCRIBE的反馈后发送第二次DESCRIBE方法,并添加鉴权信息
- 格式为:
DESCRIBE URL RTSP版本号
CSeq: CSeq号(每发一条方法加一)
Authorization: Digest username="", realm=" ", nonce="", uri=" ", response=" "
User-Agent:
Accept:
- 服务端根据收到的信息判断鉴权信息是否正确。若不正确,则发送和不带鉴权的反馈一样的反馈。若正确则拼接SDP消息,格式为:
RTSP版本号 状态码 状态字段
CSeq: 服务端发的CSeq号
Date: 时间 时区
Content-Base: URL(用于拼接具体通道号URL的主URL,注意结尾带/)
Content-Type: 客户端发来的Accept
Content-Length: SDP包长度
v=0 //SDP版本号
o=- 1558173732855598 1 IN IP4 192.168.0.46 //[username] [session id] [version] [network type] [address type] [ip address]。 [username]没有,就填-。[session id]填写NTP时间戳。[version]填1。[network type] 一般为IN 。[address type]一般为IP4 。[ip address]填服务端IP地址。
s=IChinaE IPC Camera Stream//[session name ]按照用户自定义需求填写
i=stream1//[session info]按照相机url填写,通道几就写stream几,不同相机url不同
t=0 0//[start time] [end time] 实时流都填0
a=tool:LIVE555 Streaming Media v2010.07.29//a字段是可选字段,这6个a字段除了x-qt-text-inf要根据不同的通道号改变,其他都是固定不变的,也是live555添加的,为了安全起见先固定加上这些字段
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:IChinaE IPC Camera Stream
a=x-qt-text-inf:stream1
m=video 0 RTP/AVP 96//[media] [port] [transport] [fmt list] 。[media] vedio或audio 。[port]先默认填0 。[transport]先默认填RTP/AVP。[fmt list]表示这路数据的编码类型,0-95是已定义好的编码类型,如果是这些类型,则填写相应的编号,否则,填写其他值并在rtpmap中指定编码类型