@@ -14,48 +14,45 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
1414{
1515 int nRVLen = 0 ;
1616 int nSDLen = 0 ;
17- XCHAR tszRVBuffer[4096 ];
18- XCHAR tszSDBuffer[4096 ];
19- LPCXSTR lpszOPTIONStr = _X (" OPTIONS" );
20- LPCXSTR lpszDESCRIBEStr = _X (" DESCRIBE" );
21- LPCXSTR lpszSETUPStr = _X (" SETUP" );
22- RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam;
17+ XCHAR tszRVBuffer[4096 ] = {};
18+ XCHAR tszSDBuffer[4096 ] = {};
19+ RTSPPROTOCOL_REQUEST st_RTSPRequest = {};
20+ RTSPPROTOCOL_RESPONSE st_RTSPResponse = {};
2321
24- memset (tszRVBuffer, ' \0 ' , sizeof (tszRVBuffer));
25- memset (tszSDBuffer, ' \0 ' , sizeof (tszSDBuffer));
26- memset (&st_HDRParam, ' \0 ' , sizeof (RFCCOMPONENTS_HTTP_HDRPARAM));
22+ RTSPProtocol_REQParse_Request (&st_RTSPRequest, pSt_HTTPParam->tszHttpMethod , pSt_HTTPParam->tszHttpUri , pSt_HTTPParam->tszHttpVer , ppptszListHdr, nListCount);
2723
28- st_HDRParam.nHttpCode = 200 ; // HTTP CODE码
29- st_HDRParam.bIsClose = true ; // 收到回复后就关闭
30-
31- if (0 == _tcsxnicmp (pSt_HTTPParam->tszHttpMethod , lpszOPTIONStr, _tcsxlen (pSt_HTTPParam->tszHttpMethod )))
24+ st_RTSPResponse.nCode = 200 ;
25+ st_RTSPResponse.nCSeq = st_RTSPRequest.nCseq ;
26+ if (ENUM_RTSPPROTOCOL_METHOD_TYPE_OPTIONS == st_RTSPRequest.enMethod )
3227 {
3328 // OPTIONS rtsp://10.0.1.89:554/480p.264 RTSP/1.0
3429 XCHAR tszPushAddr[MAX_PATH];
3530 XCHAR tszSMSAddr[MAX_PATH];
3631
3732 memset (tszPushAddr, ' \0 ' , sizeof (tszPushAddr));
3833 memset (tszSMSAddr, ' \0 ' , sizeof (tszSMSAddr));
34+
35+ ModuleHelp_Rtsp_GetSMSAddr (st_RTSPRequest.tszUrl , tszSMSAddr);
3936 if (!ModuleSession_PushStream_FindStream (tszSMSAddr, tszPushAddr))
4037 {
41- ModuleProtocol_Packet_Comm (tszRVBuffer, &nRVLen, NULL , 404 , " not found " ) ;
42- HttpProtocol_Server_SendMsgEx (xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen );
38+ st_RTSPResponse. nCode = 404 ;
39+ RTSPProtocol_REPPacket_Response ( tszSDBuffer, &nSDLen, &st_RTSPResponse );
4340 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
4441 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" RTSP:%s,请求拉流的URL参数不正确:%s,错误:%lX" ), lpszClientAddr, tszSMSAddr, ModuleSession_GetLastError ());
4542 return false ;
4643 }
47- RTSPPROTOCOL_REQUEST st_RTSPRequest ;
48- RTSPPROTOCOL_OPTIONS st_RTSPOPtion ;
49-
50- memset (&st_RTSPRequest, ' \0 ' , sizeof (RTSPPROTOCOL_REQUEST)) ;
51- memset (&st_RTSPOPtion, 0x01 , sizeof (RTSPPROTOCOL_OPTIONS)) ;
52-
53- RTSPProtocol_CoreParse_Parse (&st_RTSPRequest, lpszMsgBuffer, nMsgLen);
54- RTSPProtocol_CorePacket_Option (tszSDBuffer, &nSDLen, &st_RTSPOPtion, st_RTSPRequest. nCseq );
44+ st_RTSPResponse. st_OPTion . bAnnounce = true ;
45+ st_RTSPResponse. st_OPTion . bDescribe = true ;
46+ st_RTSPResponse. st_OPTion . bOptions = true ;
47+ st_RTSPResponse. st_OPTion . bPlay = true ;
48+ st_RTSPResponse. st_OPTion . bSetup = true ;
49+ st_RTSPResponse. st_OPTion . bTeardown = true ;
50+
51+ RTSPProtocol_REPPacket_Response (tszSDBuffer, &nSDLen, &st_RTSPResponse );
5552 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
5653 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" RTSP:%s,请求OPTION选项成功,请求的拉流ID:%s" ), lpszClientAddr, tszSMSAddr);
5754 }
58- else if (0 == _tcsxnicmp (pSt_HTTPParam-> tszHttpMethod , lpszDESCRIBEStr, _tcsxlen (pSt_HTTPParam-> tszHttpMethod )) )
55+ else if (ENUM_RTSPPROTOCOL_METHOD_TYPE_DESCRIBE == st_RTSPRequest. enMethod )
5956 {
6057 // DESCRIBE rtsp://10.0.1.89:554/480p.264 RTSP/1.0
6158 XCHAR tszPushAddr[MAX_PATH];
@@ -66,100 +63,81 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
6663 memset (tszSMSAddr, ' \0 ' , sizeof (tszSMSAddr));
6764 memset (&st_AVInfo, ' \0 ' , sizeof (XENGINE_PROTOCOL_AVINFO));
6865
66+ ModuleHelp_Rtsp_GetSMSAddr (st_RTSPRequest.tszUrl , tszSMSAddr);
6967 if (!ModuleSession_PushStream_FindStream (tszSMSAddr, tszPushAddr))
7068 {
71- ModuleProtocol_Packet_Comm (tszRVBuffer, &nRVLen, NULL , 404 , " not found " ) ;
72- HttpProtocol_Server_SendMsgEx (xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen );
69+ st_RTSPResponse. nCode = 404 ;
70+ RTSPProtocol_REPPacket_Response ( tszSDBuffer, &nSDLen, &st_RTSPResponse );
7371 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
7472 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" RTSP:%s,请求拉流的URL参数不正确:%s,错误:%lX" ), lpszClientAddr, tszSMSAddr, ModuleSession_GetLastError ());
7573 return false ;
7674 }
77- RTSPPROTOCOL_REQUEST st_RTSPRequest;
78- memset (tszSDBuffer, ' \0 ' , sizeof (tszSDBuffer));
79-
80- RTSPProtocol_CoreParse_Parse (&st_RTSPRequest, lpszMsgBuffer, nMsgLen);
8175 ModuleSession_PushStream_GetAVInfo (tszPushAddr, &st_AVInfo);
8276
8377 int nSPSLen = 0 ;
8478 int nPPSLen = 0 ;
85- XBYTE tszSPSBuffer[512 ];
86- XBYTE tszPPSBuffer[512 ];
87-
88- memset (tszSPSBuffer, ' \0 ' , sizeof (tszSPSBuffer));
89- memset (tszPPSBuffer, ' \0 ' , sizeof (tszPPSBuffer));
90-
79+ XBYTE tszSPSBuffer[512 ] = {};
80+ XBYTE tszPPSBuffer[512 ] = {};
9181 AVHelp_Parse_VideoHdr (st_AVInfo.st_VideoInfo .tszVInfo , st_AVInfo.st_VideoInfo .nVLen , ENUM_XENGINE_AVCODEC_VIDEO_TYPE_H264, NULL , tszSPSBuffer, tszPPSBuffer, NULL , NULL , &nSPSLen, &nPPSLen, NULL , NULL );
92-
9382 XNETHANDLE xhSDPToken = 0 ;
9483 __int64x nSessionID = 0 ;
95- RfcComponents_SDPPacket_Create (&xhSDPToken);
96- RfcComponents_SDPPacket_Owner (xhSDPToken, _X (" -" ), nSessionID, _X (" 0.0.0.0" ));
97- RfcComponents_SDPPacket_Session (xhSDPToken, tszSMSAddr);
98- RfcComponents_SDPPacket_KeepTime (xhSDPToken);
84+ SDPProtocol_Packet_Create (&xhSDPToken);
85+ SDPProtocol_Packet_Owner (xhSDPToken, _X (" XEngine" ), nSessionID, _X (" 0.0.0.0" ));
86+ SDPProtocol_Packet_Session (xhSDPToken, tszSMSAddr);
87+ SDPProtocol_Packet_KeepTime (xhSDPToken);
88+ SDPProtocol_Packet_Control (xhSDPToken, -1 );
9989 // 配置视频属性
100- RfcComponents_SDPPacket_AddMedia (xhSDPToken, _X (" video" ), 96 );
101- RFCCOMPONENTS_SDPPROTOCOL_MEDIAVIDEO st_SDPMediaVideo;
102- memset (&st_SDPMediaVideo, ' \0 ' , sizeof (RFCCOMPONENTS_SDPPROTOCOL_MEDIAVIDEO));
90+ int nListCount = 0 ;
91+ XCHAR** pptszAVList;
92+ BaseLib_OperatorMemory_Malloc ((XPPPMEM)&pptszAVList, 1 , 64 );
93+ _tcsxcpy (pptszAVList[0 ], " 96" );
10394
104- st_SDPMediaVideo. nTrackID = 1 ;
105- st_SDPMediaVideo. st_RTPMap . nCodecNumber = 96 ;
106- st_SDPMediaVideo. st_RTPMap . nSampleRate = 90000 ;
107- strcpy ( st_SDPMediaVideo. st_RTPMap . tszCodecName , _X ( " H264 " ));
95+ SDPProtocol_Packet_AddMedia (xhSDPToken, _X ( " video " ), _X ( " RTP/AVP " ), &pptszAVList, 1 ) ;
96+
97+ STREAMMEDIA_SDPPROTOCOL_MEDIAINFO st_SDPMediaVideo ;
98+ memset (& st_SDPMediaVideo, ' \0 ' , sizeof (STREAMMEDIA_SDPPROTOCOL_MEDIAINFO ));
10899
109100 st_SDPMediaVideo.st_FmtpVideo .nFrameRate = st_AVInfo.st_VideoInfo .nFrameRate ;
110101 st_SDPMediaVideo.st_FmtpVideo .nPacketMode = 1 ;
111102 st_SDPMediaVideo.st_FmtpVideo .tszLeaveId [0 ] = tszSPSBuffer[0 ];
112103 st_SDPMediaVideo.st_FmtpVideo .tszLeaveId [1 ] = tszSPSBuffer[1 ];
113104 st_SDPMediaVideo.st_FmtpVideo .tszLeaveId [2 ] = tszSPSBuffer[2 ];
114- st_SDPMediaVideo.st_FmtpVideo .nFrameXSize = st_AVInfo.st_VideoInfo .nWidth ;
115- st_SDPMediaVideo.st_FmtpVideo .nFrameYSize = st_AVInfo.st_VideoInfo .nHeight ;
116105
117106 OPenSsl_Codec_Base64 ((LPCXSTR)tszSPSBuffer, st_SDPMediaVideo.st_FmtpVideo .tszSPSBase , &nSPSLen, true );
118107 OPenSsl_Codec_Base64 ((LPCXSTR)tszPPSBuffer, st_SDPMediaVideo.st_FmtpVideo .tszPPSBase , &nPPSLen, true );
119- RfcComponents_SDPPacket_AttrVideo (xhSDPToken, &st_SDPMediaVideo);
108+
109+ st_SDPMediaVideo.nTrackID = 0 ;
110+ st_SDPMediaVideo.st_RTPMap .nChannel = 2 ;
111+ st_SDPMediaVideo.st_RTPMap .nSampleRate = 90000 ;
112+ _tcsxcpy (st_SDPMediaVideo.st_RTPMap .tszCodecName , _X (" H264" ));
113+ SDPProtocol_Packet_VideoFmt (xhSDPToken, 96 , &st_SDPMediaVideo);
114+ SDPProtocol_Packet_Control (xhSDPToken, 0 );
120115 // 配置音频属性
121- RfcComponents_SDPPacket_AddMedia (xhSDPToken, _X (" audio" ), 97 );
116+ _tcsxcpy (pptszAVList[0 ], _X (" 98" ));
117+ SDPProtocol_Packet_AddMedia (xhSDPToken, _X (" audio" ), _X (" RTP/AVP" ), &pptszAVList, 1 );
118+
119+ STREAMMEDIA_SDPPROTOCOL_MEDIAINFO st_SDPMediaAudio;
120+ memset (&st_SDPMediaAudio, ' \0 ' , sizeof (STREAMMEDIA_SDPPROTOCOL_MEDIAINFO));
122121
123- RFCCOMPONENTS_SDPPROTOCOL_MEDIAAUDIO st_SDPMediaAudio;
124- memset (&st_SDPMediaAudio, ' \0 ' , sizeof (RFCCOMPONENTS_SDPPROTOCOL_MEDIAAUDIO));
125- st_SDPMediaAudio.nTrackID = 2 ;
126- st_SDPMediaAudio.st_RTPMap .nCodecNumber = 97 ;
127- strcpy (st_SDPMediaAudio.st_RTPMap .tszCodecName , _X (" mpeg4-generic" ));
122+ AVHelp_Parse_AACInfo ((const XBYTE*)st_AVInfo.st_AudioInfo .tszAInfo , st_AVInfo.st_AudioInfo .nALen , &st_SDPMediaAudio.st_RTPMap .nChannel , &st_SDPMediaAudio.st_RTPMap .nSampleRate , &st_SDPMediaAudio.st_FmtpAudio .nProfileID , &st_SDPMediaAudio.st_FmtpAudio .nConfig );
123+
124+ st_SDPMediaAudio.nTrackID = 1 ;
125+ _tcsxcpy (st_SDPMediaAudio.st_RTPMap .tszCodecName , _X (" mpeg4-generic" ));
128126
129- AVHelp_Parse_AACInfo ((const XBYTE *)st_AVInfo.st_AudioInfo .tszAInfo , st_AVInfo.st_AudioInfo .nALen , &st_SDPMediaAudio.st_RTPMap .nChannel , &st_SDPMediaAudio.st_RTPMap .nSampleRate , &st_SDPMediaAudio.st_FmtpAudio .nProfileID , &st_SDPMediaAudio.st_FmtpAudio .nConfig );
130127 st_SDPMediaAudio.st_FmtpAudio .nDeltaLen = 3 ;
131128 st_SDPMediaAudio.st_FmtpAudio .nIndexLen = 3 ;
132129 st_SDPMediaAudio.st_FmtpAudio .nSizeLen = 13 ;
133- strcpy (st_SDPMediaAudio.st_FmtpAudio .tszMode , " AAC-hbr" );
134- RfcComponents_SDPPacket_AttrAudio (xhSDPToken, &st_SDPMediaAudio);
130+ _tcsxcpy (st_SDPMediaAudio.st_FmtpAudio .tszMode , " AAC-hbr" );
131+ SDPProtocol_Packet_AudioFmt (xhSDPToken, 98 , &st_SDPMediaAudio);
132+ SDPProtocol_Packet_Control (xhSDPToken, 1 );
135133
136- RfcComponents_SDPPacket_GetPacket (xhSDPToken, tszRVBuffer, &nRVLen);
137- RfcComponents_SDPPacket_Destory (xhSDPToken);
138- RTSPProtocol_CorePacket_Describe (tszSDBuffer, &nSDLen, pSt_HTTPParam->tszHttpUri , tszRVBuffer, st_RTSPRequest.nCseq );
134+ SDPProtocol_Packet_GetPacket (xhSDPToken, tszRVBuffer, &nRVLen);
135+ SDPProtocol_Packet_Destory (xhSDPToken);
139136 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
140137 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" RTSP:%s,请求DESCRIBE选项成功,请求的拉流ID:%s" ), lpszClientAddr, tszSMSAddr);
141138 }
142- else if (0 == _tcsxnicmp (pSt_HTTPParam->tszHttpMethod , lpszSETUPStr, _tcsxlen (pSt_HTTPParam->tszHttpMethod )))
143- {
144- // rtsp://127.0.0.1:554/live/qyt/trackID=0 RTSP/1.0 only tcp
145- RTSPPROTOCOL_REQUEST st_RTSPRequest;
146- RTSPPROTOCOL_SETUP st_RTSPSetup;
147-
148- memset (&st_RTSPRequest, ' \0 ' , sizeof (RTSPPROTOCOL_REQUEST));
149- memset (&st_RTSPSetup, ' \0 ' , sizeof (RTSPPROTOCOL_SETUP));
150-
151- st_RTSPSetup.nClientRTPPort = 0 ;
152- st_RTSPSetup.nClientRTCPPort = 1 ;
153- RTSPProtocol_CoreParse_Parse (&st_RTSPRequest, lpszMsgBuffer, nMsgLen);
154-
155- RTSPProtocol_CorePacket_Setup (tszSDBuffer, &nSDLen, _X (" " ), &st_RTSPSetup, st_RTSPRequest.nCseq );
156- XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
157- XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" RTSP:%s,请求SETUP选项成功" ), lpszClientAddr);
158- }
159139 else
160140 {
161- ModuleProtocol_Packet_Comm (tszRVBuffer, &nRVLen, NULL , 500 , " not support" );
162- HttpProtocol_Server_SendMsgEx (xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
163141 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
164142 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" 拉流端:%s,请求的类型不支持:%s" ), lpszClientAddr, pSt_HTTPParam->tszHttpMethod );
165143 return false ;
0 commit comments