收到180响应时建立dialog叫做早期对话(early dialog),收到2XX的应答开始才是真正的dialog建立。
当然,这个代理可以有多个代理,其实也就就是多了代理服务器之间的转发过程,如下图:上级=sip+源设备
1sip代理或下级向sip服务器发送REGISTER请求+sip编号+IP+端口
2sip服务器回复401+unauthorized
3sip代理或下级向sip服务器发送REGISTER请求+sip编号+IP+端口
4sip服务器回复200
1以message的方法发送一段xml文本,主要通过Catalog命令和DeviceID发送,获取设备,
2设备收到后,马上回复200
3还会回复设备相关信息给服务器
4服务器收到后回复200,给设备
流程描述如下:
a) 1:媒体流接收者向 SIP 服务器发送 Invite 消息,消息头域中携带 Subject 字段,表明点播的视频源 ID、分辨率、媒体流接收者 ID、接收端媒体流序列号等参数,SDP 消息体中 s 字段为“Play”代表实时点播;
b) 2:SIP 服务器收到 Invite 请求后,通过三方呼叫控制建立媒体服务器和媒体流发送者之间的媒体连接。向媒体服务器发送 Invite 消息,此消息不携带 SDP 消息体;
c) 3:媒体服务器收到 SIP 服务器的 Invite 请求后,回复 200 OK 响应,携带 SDP 消息体,消息体中描述了媒体服务器接收媒体流的 IP、端口、媒体格式等内容;
d) 4:SIP 服务器收到媒体服务器返回的 200 OK 响应后,向媒体流发送者发送 Invite 请求,请求中携带消息 3 中媒体服务器回复的 200 OK 响应消息体,并且修改 s 字段为“Play”代表实时点播,增加 y 字段描述 SSRC 值,f 字段描述媒体参数;
e) 5:媒体流发送者收到 SIP 服务器的 Invite 请求后,回复 200 OK 响应,携带 SDP 消息体,消息体中描述了媒体流发送者发送媒体流的 IP、端口、媒体格式、SSRC 字段等内容;
f) 6:SIP 服务器收到媒体流发送者返回的 200 OK 响应后,向媒体服务器发送ACK 请求,请求中携带消息 5 中媒体流发送者回复的 200 OK 响应消息体,完成与媒体服务器的 Invite 会话建立过程;
g) 7:SIP 服务器收到媒体流发送者返回的 200 OK 响应后,向媒体流发送者发送 ACK 请求,请求中不携带消息体,完成与媒体流发送者的 Invite 会话建立过程;
h) 8:完成三方呼叫控制后,SIP 服务器通过 B2BUA 代理方式建立媒体流接收者和媒体服务器之间的媒体连接。在消息 1 中增加 SSRC 值,转发给媒体服务器;
i) 9:媒体服务器收到 Invite 请求,回复 200 OK 响应,携带 SDP 消息体,消息体中描述了媒体服务器发送媒体流的 IP、端口、媒体格式、SSRC 值等内容;
j) 10:SIP 服务器将消息 9 转发给媒体流接收者;
k) 11:媒体流接收者收到 200 OK 响应后,回复 ACK 消息,完成与 SIP 服务器的 Invite 会话建立过程;
l) 12:SIP 服务器将消息 11 转发给媒体服务器,完成与媒体服务器的 Invite 会话建立过程;
m) 13:媒体流接收者向 SIP 服务器发送 BYE 消息,断开消息 1、10、11 建立的同媒体流接收者的 Invite 会话;
n) 14:SIP 服务器收到 BYE 消息后回复 200 OK 响应,会话断开;
o) 15:SIP 服务器收到 BYE 消息后向媒体服务器发送 BYE 消息,断开消息 8、9、12 建立的同媒体服务器的 Invite 会话;
p) 16:媒体服务器收到 BYE 消息后回复 200 OK 响应,会话断开;
q) 17:SIP 服务器向媒体服务器发送 BYE 消息,断开消息 2、3、6 建立的同媒体服务器的 Invite会话;
r) 18:媒体服务器收到 BYE 消息后回复 200 OK 响应,会话断开;
s) 19:SIP 服务器向媒体流发送者发送 BYE 消息,断开消息 4、5、7 建立的同媒体流发送者的Invite 会话;
t) 20:媒体流发送者收到 BYE 消息后回复 200 OK 响应,会话断开。
message(recordinfo+deviceID+time)->200
设备端xml类型码流发给服务器,发完后以bye结束,服务器回复200
a) 1:源设备向 SIP 服务器发送设备控制命令,设备控制命令采用 MESSAGE 方法携带;
b) 2:SIP 服务器收到命令后返回 200 OK;
c) 3:SIP 服务器向目标设备转发设备控制命令,设备控制命令采用 MESSAGE 方法携带;
d) 4:目标设备收到命令后返回 200 OK;
e) 5:目标设备向 SIP 服务器发送设备控制响应命令,设备控制响应命令采用 MESSAGE 方法携带;
f) 6:SIP 服务器收到命令后返回 200 OK;
g) 7:SIP 服务器向源设备转发设备控制响应命令,设备控制响应命令采用 MESSAGE 方法携带;
h) 8:目标设备收到命令后返回 200 OK应该是设备吧……也有可能是虚拟的,软件模拟的……
汗……
sip服务器,笼统的说,可以实现注册用户功能,建立sip通话功能,等等。比如你用xlite或者sjphone打电话,那个是客户端,当你注册一个compte的时候你的客户端就发送sip协议注册到sip服务器上。通话也是同样原理,至于stun之类的不了解需要你自己查。
要在windows或者linux平台下开发基于SIP的软电话,需要以下软件
服务器端软件: 注册多个客户端到服务器上,可以进行通话测试
SIP客户端软件 :主要用于测试,可以对别人已经完成的客户端进行抓包,以比对自己程序的发包数据
SIP协议栈: 基于某个现成的SIP协议栈来开发会加快开发进度
RTP栈 :传输语言或者视频数据的协议栈
抓包测试工具: 调试网络程序最有效的办法
以下介绍这些软件主要以开源软件为主
一 服务器端软件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)