RTSP协议
RTSP(实时流协议)的工作原理涉及多个关键组件和步骤,以下是对其工作原理的详细解释:
-
建立连接
- 客户端请求:客户端(如媒体播放器)向服务器发送RTSP请求,以建立与服务器的连接。这个请求通常包含一些必要的信息,如媒体流的URL、客户端支持的协议版本等。
- 服务器响应:服务器接收到客户端的请求后,会返回一个响应。这个响应可能包含服务器的状态信息、支持的协议版本、媒体流的描述等信息。
-
会话管理
- 会话标识:一旦连接建立,客户端和服务器之间就会建立一个RTSP会话。每个会话由一个唯一的会话标识符标识,用于区分不同的会话。
- 状态维护:在会话期间,客户端和服务器需要维护会话的状态,如当前播放的位置、暂停状态等。
-
流媒体控制
- 命令交互:客户端可以通过发送RTSP命令来控制媒体流的播放。这些命令包括PLAY(播放)、PAUSE(暂停)、TEARDOWN(拆除会话)等。
- 服务器响应:服务器接收到客户端的命令后,会根据命令的类型和当前会话的状态返回相应的响应。例如,如果客户端发送PLAY命令,服务器可能会开始传输媒体数据;如果发送PAUSE命令,服务器可能会暂停媒体数据的传输。
-
数据传输
- 使用RTP/RTCP:虽然RTSP本身不负责媒体数据的传输,但它通常与RTP(实时传输协议)和RTCP(RTP控制协议)一起使用。RTP用于传输实际的媒体数据(如音频和视频),而RTCP则用于传输控制信息,如媒体同步信息。
- 数据流控制:通过RTSP,客户端可以控制媒体数据的传输速率、格式等参数,以满足不同的应用需求。
-
会话终止
- 发送TEARDOWN命令:当客户端完成媒体流的播放或需要关闭连接时,它会向服务器发送TEARDOWN命令。
- 服务器响应:服务器接收到TEARDOWN命令后,会释放与该会话相关的资源,并关闭与客户端的连接。
总的来说,RTSP协议通过定义一套基于文本的命令和响应机制,实现了对实时流媒体的控制和管理。它依赖于底层的传输协议(如TCP或UDP)来确保数据的可靠传输,并通过与会话描述协议(SDP)等其他协议的结合使用,提供了灵活且强大的流媒体传输解决方案。
p2p协议
客户端流程 出自www.cnblogs.com/ssyfj/p/148…
1.本机A默认状态STATUS_INIT,当本机A创建Socket之后,准备与服务器建立连接,状态变为STATUS_LOGIN
2.本机A与服务端通过PROTO_LOGIN_REQ请求建立联系,服务端记录本机的id和地址ip和端口信息,返回PROTO_LOGIN_ACK确认消息给本机
3.本机A收到PROTO_LOGIN_ACK确认消息后,状态变为STATUS_CONNECT,开始为建立p2p连接做准备,发送PROTO_CONNECT_REQ请求给服务器,服务端接收到本A端PROTO_CONNECT_REQ消息后,服务器回送PROTO_CONNECT_ACK确认消息和对端的地址信息给本机A,本机A状态变为STATUS_P2P_CONNECT状态。
4.服务端接收到本A端PROTO_CONNECT_REQ消息后,发送PROTO_NOTIFY_REQ请求(保护本端的地址信息)到对端B。对端B接收到PROTO_NOTIFY_REQ请求后,回送PROTO_NOTIFY_ACK确认消息给服务器,此时对端B状态变为STATUS_P2P_CONNECT。
注意:如果无法建立P2P连接,则双方的状态停留在STATUS_P2P_CONNECT状态,可以通过服务器进行转发。而不需要进行p2p通信!
5.对端状态为STATUS_P2P_CONNECT后,发生PROTO_P2P_CONNECT_REQ请求消息给本机端,打通对端-(NAT端口)-->本机。
6.对端状态为STATUS_P2P_CONNECT后,发生PROTO_P2P_CONNECT_REQ请求消息给对端,打通本机端(NAT端口)--->对端。
注意:5、6是异步存在的!!
7.当客户端接收到PROTO_P2P_CONNECT_REQ或者PROTO_P2P_CONNECT_ACK消息,本机状态的状态变为STATUS_MESSAGE。
之后可以正常的进行p2p通信!!!