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[])
{
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
}