Skip to content

Commit 5ee0b7c

Browse files
committed
update:support rtsp play and down option
1 parent b135b06 commit 5ee0b7c

File tree

2 files changed

+72
-8
lines changed

2 files changed

+72
-8
lines changed

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientMethod.cpp

Lines changed: 70 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,8 @@ int main(int argc, char** argv)
472472
}
473473
NetCore_UDPXCore_RegisterCallBackEx(xhVRTPSocket, Network_Callback_VideoRTPRecv);
474474
NetCore_UDPXCore_RegisterCallBackEx(xhVRTCPSocket, Network_Callback_VideoRTCPRecv);
475-
NetCore_UDPXCore_RegisterCallBackEx(xhVRTPSocket, Network_Callback_AudioRTPRecv);
476-
NetCore_UDPXCore_RegisterCallBackEx(xhVRTCPSocket, Network_Callback_AudioRTCPRecv);
475+
NetCore_UDPXCore_RegisterCallBackEx(xhARTPSocket, Network_Callback_AudioRTPRecv);
476+
NetCore_UDPXCore_RegisterCallBackEx(xhARTCPSocket, Network_Callback_AudioRTCPRecv);
477477
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动RTSP视频RTP端口:%d 和视频RTCP端口:%d,以及音频的RTP端口:%d 和RTCP端口:%d 成功"), st_ServiceConfig.st_XPull.st_PullRtsp.nVRTPPort, st_ServiceConfig.st_XPull.st_PullRtsp.nVRTCPPort, st_ServiceConfig.st_XPull.st_PullRtsp.nARTPPort, st_ServiceConfig.st_XPull.st_PullRtsp.nARTCPPort);
478478
}
479479

0 commit comments

Comments
 (0)