live555 接收rtsp视频流流程分析
RTSP交互流程
C表示RTSP客户端,S表示RTSP服务端
① C->S: OPTIONrequest
S->C: OPTION response
② C->S: DESCRIBErequest
S->C: DESCRIBE response
③ C->S: SETUPrequest
S->C: SETUP response
④ C->S: PLAYrequest
S->C: PLAY response
S->C: 发送流媒体数据
⑤ C->S: TEARDOWNrequest
S->C: TEARDOWN response
上述的过程是标准的RTSP流程,其中第3步和第4步是必需的。
OpenCore在执行完PLAYER_SET_DATASOURCE,prepare之后,执行PLAYER_INIT时,如果发现datasource是rtsp流,则进入rtsp模块。
OpenCore的RTSP模块实现在Pvrtsp_client_engine_node.cpp中,PVRTSPEngineNode::SendRtspDescribe()描述了连接建立过程中的状态变化过程。
需要注意的时,opencore在发出OPTION request后,并不会等着收response,而是直接发DESCRIBE request,然后才开始收OPTION response和DESCRIBE response。
Live555在RTSPServer.cpp中用RTSPServer::RTSPClientSession::incomingRequestHandler()来处理来自client端的request。
RTSP源码接收端使用样例:
//RtstClientTest.cpp
#include"stdafx.h"
#include"RtspRequest.h"
#include"Rtp.h"
RtspRequest g_RtspRequest;
int_tmain(int argc, _TCHAR* argv[])
{
}