@@ -89,9 +89,6 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
8989 SDPProtocol_Packet_KeepTime (xhSDPToken);
9090 SDPProtocol_Packet_OptionalRange (xhSDPToken);
9191 SDPProtocol_Packet_Control (xhSDPToken, -1 );
92- // 创建SESSION
93- BaseLib_OperatorHandle_CreateStr (st_RTSPResponse.tszSession );
94- ModuleHelp_Rtsp_SetSession (lpszClientAddr, st_RTSPResponse.tszSession );
9592 // 配置视频属性
9693 int nListCount = 0 ;
9794 XCHAR** pptszAVList;
@@ -142,6 +139,9 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
142139 SDPProtocol_Packet_GetPacket (xhSDPToken, tszRVBuffer, &nRVLen);
143140 SDPProtocol_Packet_Destory (xhSDPToken);
144141 ModuleHelp_Rtsp_CreateClient (lpszClientAddr, 0 , 1 );
142+ // 创建SESSION
143+ BaseLib_OperatorHandle_CreateStr (st_RTSPResponse.tszSession , 12 );
144+ ModuleHelp_Rtsp_SetSession (lpszClientAddr, st_RTSPResponse.tszSession );
145145
146146 st_RTSPResponse.nPLen = nRVLen;
147147 _tcsxcpy (st_RTSPResponse.tszConBase , st_RTSPRequest.tszUrl );
@@ -181,15 +181,79 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
181181 BaseLib_OperatorHandle_CreateStr (st_RTSPResponse.st_TransportInfo .tszSSRCStr , 8 , 1 );
182182 ModuleHelp_Rtsp_SetSsrc (lpszClientAddr, st_RTSPResponse.st_TransportInfo .tszSSRCStr , bVideo);
183183
184-
185184 RTSPProtocol_REPPacket_Response (tszSDBuffer, &nSDLen, &st_RTSPResponse);
186185 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
187- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" RTSP:%s,请求SETUP选项成功,请求的设置的TRACKID:%s,客户端RTP端口:%d,客户端RTCP端口:%d" ), lpszClientAddr, st_RTSPRequest.st_ChannelInfo .nChannelNumber , st_RTSPRequest.st_TransportInfo .st_ClientPorts .nRTPPort , st_RTSPRequest.st_TransportInfo .st_ClientPorts .nRTCPPort );
186+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" RTSP:%s,请求SETUP选项成功,请求的设置的TRACKID:%d,客户端RTP端口:%d,客户端RTCP端口:%d" ), lpszClientAddr, st_RTSPRequest.st_ChannelInfo .nChannelNumber , st_RTSPRequest.st_TransportInfo .st_ClientPorts .nRTPPort , st_RTSPRequest.st_TransportInfo .st_ClientPorts .nRTCPPort );
187+ }
188+ else if (ENUM_RTSPPROTOCOL_METHOD_TYPE_PLAY == st_RTSPRequest.enMethod )
189+ {
190+ XCHAR tszKeyStr[MAX_PATH];
191+ XCHAR tszPushAddr[MAX_PATH];
192+ XCHAR tszSMSAddr[MAX_PATH];
193+ XENGINE_PROTOCOL_AVINFO st_AVInfo;
194+
195+ memset (tszPushAddr, ' \0 ' , sizeof (tszPushAddr));
196+ memset (tszSMSAddr, ' \0 ' , sizeof (tszSMSAddr));
197+ memset (&st_AVInfo, ' \0 ' , sizeof (XENGINE_PROTOCOL_AVINFO));
198+
199+ BaseLib_OperatorString_GetKeyValue ((*ppptszParamList)[1 ], " =" , tszKeyStr, tszSMSAddr);
200+
201+ if (!ModuleSession_PushStream_FindStream (tszSMSAddr, tszPushAddr))
202+ {
203+ st_RTSPResponse.nCode = 404 ;
204+ RTSPProtocol_REPPacket_Response (tszSDBuffer, &nSDLen, &st_RTSPResponse);
205+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
206+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" RTSP:%s,请求拉流的URL参数不正确:%s,错误:%lX" ), lpszClientAddr, tszSMSAddr, ModuleSession_GetLastError ());
207+ return false ;
208+ }
209+ ModuleSession_PushStream_GetAVInfo (tszPushAddr, &st_AVInfo);
210+
211+ st_RTSPResponse.st_Range .bNPTTime = true ;
212+ _tcsxcpy (st_RTSPResponse.tszSession , st_RTSPRequest.tszSession );
213+
214+ st_RTSPResponse.nRTPCount = 2 ;
215+ BaseLib_OperatorMemory_Malloc ((XPPPMEM)&st_RTSPResponse.ppSt_RTPInfo , 2 , sizeof (RTSPPROTOCOL_RTPINFO));
216+
217+ XCHAR tszSSRCVideo[128 ] = {};
218+ XCHAR tszSSRCAudio[128 ] = {};
219+ ModuleHelp_Rtsp_GetSsrc (lpszClientAddr, tszSSRCVideo, true );
220+ ModuleHelp_Rtsp_GetSsrc (lpszClientAddr, tszSSRCAudio, false );
221+ // 创建RTP包管理器
222+ RTPProtocol_Packet_Insert (tszSSRCVideo, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_H264);
223+ RTPProtocol_Packet_Insert (tszSSRCAudio, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_AAC);
224+
225+ RTPProtocol_Packet_SetTime (tszSSRCVideo, st_AVInfo.st_VideoInfo .nFrameRate );
226+ RTPProtocol_Packet_SetTime (tszSSRCAudio, st_AVInfo.st_AudioInfo .nSampleRate );
227+
228+ RTPProtocol_Packet_GetTime (tszSSRCVideo, &st_RTSPResponse.ppSt_RTPInfo [0 ]->nNTPTime );
229+ RTPProtocol_Packet_GetTime (tszSSRCAudio, &st_RTSPResponse.ppSt_RTPInfo [1 ]->nNTPTime );
230+ RTPProtocol_Packet_GetCSeq (tszSSRCVideo, &st_RTSPResponse.ppSt_RTPInfo [0 ]->nCSeq );
231+ RTPProtocol_Packet_GetCSeq (tszSSRCAudio, &st_RTSPResponse.ppSt_RTPInfo [1 ]->nCSeq );
232+
233+ _xstprintf (st_RTSPResponse.ppSt_RTPInfo [0 ]->tszURLStr , _X (" %s/trackID=0" ), st_RTSPRequest.tszUrl );
234+ _xstprintf (st_RTSPResponse.ppSt_RTPInfo [1 ]->tszURLStr , _X (" %s/trackID=1" ), st_RTSPRequest.tszUrl );
235+
236+ RTSPProtocol_REPPacket_Response (tszSDBuffer, &nSDLen, &st_RTSPResponse);
237+ XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
238+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" RTSP:%s,请求PLAY选项成功,会话ID:%s,视频SSRC:%s,音频SSRC:%s" ), lpszClientAddr, st_RTSPRequest.tszSession , tszSSRCVideo, tszSSRCAudio);
239+ }
240+ else if (ENUM_RTSPPROTOCOL_METHOD_TYPE_TEARDOWN == st_RTSPRequest.enMethod )
241+ {
242+ XCHAR tszSSRCVideo[128 ] = {};
243+ XCHAR tszSSRCAudio[128 ] = {};
244+
245+ ModuleHelp_Rtsp_GetSsrc (lpszClientAddr, tszSSRCVideo, true );
246+ ModuleHelp_Rtsp_GetSsrc (lpszClientAddr, tszSSRCAudio, false );
247+ RTPProtocol_Packet_Delete (tszSSRCVideo);
248+ RTPProtocol_Packet_Delete (tszSSRCAudio);
249+
250+ ModuleHelp_Rtsp_DeleteClient (lpszClientAddr);
251+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" RTSP:%s,请求关闭选项成功,会话ID:%s,视频SSRC:%s,音频SSRC:%s," ), lpszClientAddr, st_RTSPRequest.tszSession , tszSSRCVideo, tszSSRCAudio);
188252 }
189253 else
190254 {
191255 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
192- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 拉流端 :%s,请求的类型不支持:%s" ), lpszClientAddr, pSt_HTTPParam->tszHttpMethod );
256+ XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" RTSP :%s,请求的类型不支持:%s" ), lpszClientAddr, pSt_HTTPParam->tszHttpMethod );
193257 return false ;
194258 }
195259 return true ;
0 commit comments