Skip to content

Commit fb53b7b

Browse files
committed
added:audio and video rtp rtsp supported
1 parent 0772e98 commit fb53b7b

File tree

12 files changed

+238
-31
lines changed

12 files changed

+238
-31
lines changed

XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,10 @@ typedef struct tag_XEngine_ServiceConfig
7171
struct
7272
{
7373
bool bEnable;
74-
int nRTPPort;
75-
int nRTCPPort;
74+
int nVRTPPort;
75+
int nVRTCPPort;
76+
int nARTPPort;
77+
int nARTCPPort;
7678
}st_PullRtsp;
7779
}st_XPull;
7880
struct

XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,10 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
138138
pSt_ServerConfig->st_XPull.st_PullFlv.bEnable = st_PullFlv["bEnable"].asBool();
139139

140140
pSt_ServerConfig->st_XPull.st_PullRtsp.bEnable = st_PullRtsp["bEnable"].asBool();
141-
pSt_ServerConfig->st_XPull.st_PullRtsp.nRTPPort = st_PullRtsp["nRTPPort"].asInt();
142-
pSt_ServerConfig->st_XPull.st_PullRtsp.nRTCPPort = st_PullRtsp["nRTCPPort"].asInt();
141+
pSt_ServerConfig->st_XPull.st_PullRtsp.nVRTPPort = st_PullRtsp["nVRTPPort"].asInt();
142+
pSt_ServerConfig->st_XPull.st_PullRtsp.nVRTCPPort = st_PullRtsp["nVRTCPPort"].asInt();
143+
pSt_ServerConfig->st_XPull.st_PullRtsp.nARTPPort = st_PullRtsp["nARTPPort"].asInt();
144+
pSt_ServerConfig->st_XPull.st_PullRtsp.nARTCPPort = st_PullRtsp["nARTCPPort"].asInt();
143145

144146
pSt_ServerConfig->st_XPull.st_PullHls.bEnable = st_PullHls["bEnable"].asBool();
145147
//日志配置

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,4 +331,52 @@ extern "C" bool ModuleHelp_Rtsp_GetSession(LPCXSTR lpszClientID, XCHAR* ptszSess
331331
意思:是否成功
332332
备注:
333333
*********************************************************************/
334-
extern "C" bool ModuleHelp_Rtsp_SetSsrc(LPCXSTR lpszClientID, LPCXSTR lpszSsrcStr, bool bVideo = true);
334+
extern "C" bool ModuleHelp_Rtsp_SetSsrc(LPCXSTR lpszClientID, LPCXSTR lpszSsrcStr, bool bVideo = true);
335+
/********************************************************************
336+
函数名称:ModuleHelp_Rtsp_GetSsrc
337+
函数功能:获取一个RTSP关联的SSRC
338+
参数.一:lpszClientID
339+
In/Out:In
340+
类型:常量字符指针
341+
可空:N
342+
意思:输入要处理的客户端ID
343+
参数.二:ptszSsrcStr
344+
In/Out:In
345+
类型:字符指针
346+
可空:N
347+
意思:输出关联的SSRC
348+
参数.三:bVideo
349+
In/Out:In
350+
类型:逻辑型
351+
可空:Y
352+
意思:输入关联的类型
353+
返回值
354+
类型:逻辑型
355+
意思:是否成功
356+
备注:
357+
*********************************************************************/
358+
extern "C" bool ModuleHelp_Rtsp_GetSsrc(LPCXSTR lpszClientID, XCHAR* ptszSsrcStr, bool bVideo = true);
359+
/********************************************************************
360+
函数名称:ModuleHelp_Rtsp_GetTrack
361+
函数功能:获取RTSP的TRACKID类型
362+
参数.一:lpszClientID
363+
In/Out:In
364+
类型:常量字符指针
365+
可空:N
366+
意思:输入要处理的客户端ID
367+
参数.二:nTrackID
368+
In/Out:In
369+
类型:整数型
370+
可空:N
371+
意思:输入TRACKID
372+
参数.三:pbVideo
373+
In/Out:Out
374+
类型:逻辑型指针
375+
可空:Y
376+
意思:输出是视频还是音频
377+
返回值
378+
类型:逻辑型
379+
意思:是否成功
380+
备注:
381+
*********************************************************************/
382+
extern "C" bool ModuleHelp_Rtsp_GetTrack(LPCXSTR lpszClientID, int nTrackID, bool* pbVideo);

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Rtsp/ModuleHelp_Rtsp.cpp

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ bool CModuleHelp_Rtsp::ModuleHelp_Rtsp_GetSession(LPCXSTR lpszClientID, XCHAR* p
276276
}
277277
/********************************************************************
278278
函数名称:ModuleHelp_Rtsp_SetSsrc
279-
函数功能:设置一个RTSP的RTP关联的SSRC
279+
函数功能:设置一个RTSP关联的SSRC
280280
参数.一:lpszClientID
281281
In/Out:In
282282
类型:常量字符指针
@@ -318,4 +318,94 @@ bool CModuleHelp_Rtsp::ModuleHelp_Rtsp_SetSsrc(LPCXSTR lpszClientID, LPCXSTR lps
318318
_tcsxcpy(stl_MapIterator->second.tszASsrc, lpszSsrcStr);
319319
}
320320
return true;
321+
}
322+
/********************************************************************
323+
函数名称:ModuleHelp_Rtsp_GetSsrc
324+
函数功能:获取一个RTSP关联的SSRC
325+
参数.一:lpszClientID
326+
In/Out:In
327+
类型:常量字符指针
328+
可空:N
329+
意思:输入要处理的客户端ID
330+
参数.二:ptszSsrcStr
331+
In/Out:In
332+
类型:字符指针
333+
可空:N
334+
意思:输出关联的SSRC
335+
参数.三:bVideo
336+
In/Out:In
337+
类型:逻辑型
338+
可空:Y
339+
意思:输入关联的类型
340+
返回值
341+
类型:逻辑型
342+
意思:是否成功
343+
备注:
344+
*********************************************************************/
345+
bool CModuleHelp_Rtsp::ModuleHelp_Rtsp_GetSsrc(LPCXSTR lpszClientID, XCHAR* ptszSsrcStr, bool bVideo /* = true */)
346+
{
347+
ModuleHelp_IsErrorOccur = false;
348+
349+
unordered_map<string, RTSPPROTOCOL_CLIENTINFO>::iterator stl_MapIterator = stl_MapRTSPClient.find(lpszClientID);
350+
if (stl_MapIterator == stl_MapRTSPClient.end())
351+
{
352+
ModuleHelp_IsErrorOccur = true;
353+
ModuleHelp_dwErrorCode = ERROR_MODULE_HELP_RTSP_NOTFOUND;
354+
return false;
355+
}
356+
357+
if (bVideo)
358+
{
359+
_tcsxcpy(ptszSsrcStr,stl_MapIterator->second.tszVSsrc);
360+
}
361+
else
362+
{
363+
_tcsxcpy(ptszSsrcStr,stl_MapIterator->second.tszASsrc);
364+
}
365+
return true;
366+
}
367+
/********************************************************************
368+
函数名称:ModuleHelp_Rtsp_GetTrack
369+
函数功能:获取RTSP的TRACKID类型
370+
参数.一:lpszClientID
371+
In/Out:In
372+
类型:常量字符指针
373+
可空:N
374+
意思:输入要处理的客户端ID
375+
参数.二:nTrackID
376+
In/Out:In
377+
类型:整数型
378+
可空:N
379+
意思:输入TRACKID
380+
参数.三:pbVideo
381+
In/Out:Out
382+
类型:逻辑型指针
383+
可空:Y
384+
意思:输出是视频还是音频
385+
返回值
386+
类型:逻辑型
387+
意思:是否成功
388+
备注:
389+
*********************************************************************/
390+
bool CModuleHelp_Rtsp::ModuleHelp_Rtsp_GetTrack(LPCXSTR lpszClientID, int nTrackID, bool* pbVideo)
391+
{
392+
ModuleHelp_IsErrorOccur = false;
393+
394+
unordered_map<string, RTSPPROTOCOL_CLIENTINFO>::iterator stl_MapIterator = stl_MapRTSPClient.find(lpszClientID);
395+
if (stl_MapIterator == stl_MapRTSPClient.end())
396+
{
397+
ModuleHelp_IsErrorOccur = true;
398+
ModuleHelp_dwErrorCode = ERROR_MODULE_HELP_RTSP_NOTFOUND;
399+
return false;
400+
}
401+
402+
if (nTrackID == stl_MapIterator->second.nVTrackID)
403+
{
404+
*pbVideo = true;
405+
}
406+
else
407+
{
408+
*pbVideo = false;
409+
}
410+
return true;
321411
}

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Rtsp/ModuleHelp_Rtsp.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class CModuleHelp_Rtsp
3838
bool ModuleHelp_Rtsp_SetSession(LPCXSTR lpszClientID, LPCXSTR lpszSessionStr);
3939
bool ModuleHelp_Rtsp_GetSession(LPCXSTR lpszClientID, XCHAR *ptszSessionStr);
4040
bool ModuleHelp_Rtsp_SetSsrc(LPCXSTR lpszClientID, LPCXSTR lpszSsrcStr, bool bVideo = true);
41+
bool ModuleHelp_Rtsp_GetSsrc(LPCXSTR lpszClientID, XCHAR *ptszSsrcStr, bool bVideo = true);
42+
bool ModuleHelp_Rtsp_GetTrack(LPCXSTR lpszClientID, int nTrackID, bool* pbVideo);
4143
protected:
4244
private:
4345
unordered_map<string, RTSPPROTOCOL_CLIENTINFO> stl_MapRTSPClient;

XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,6 @@ EXPORTS
2020
ModuleHelp_Rtsp_GetClient
2121
ModuleHelp_Rtsp_SetSession
2222
ModuleHelp_Rtsp_GetSession
23-
ModuleHelp_Rtsp_SetSsrc
23+
ModuleHelp_Rtsp_SetSsrc
24+
ModuleHelp_Rtsp_GetSsrc
25+
ModuleHelp_Rtsp_GetTrack

XEngine_Source/XEngine_ModuleHelp/pch.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,12 @@ extern "C" bool ModuleHelp_Rtsp_GetSession(LPCXSTR lpszClientID, XCHAR * ptszSes
102102
extern "C" bool ModuleHelp_Rtsp_SetSsrc(LPCXSTR lpszClientID, LPCXSTR lpszSsrcStr, bool bVideo)
103103
{
104104
return m_HelpRtsp.ModuleHelp_Rtsp_SetSsrc(lpszClientID, lpszSsrcStr, bVideo);
105+
}
106+
extern "C" bool ModuleHelp_Rtsp_GetSsrc(LPCXSTR lpszClientID, XCHAR * ptszSsrcStr, bool bVideo)
107+
{
108+
return m_HelpRtsp.ModuleHelp_Rtsp_GetSsrc(lpszClientID, ptszSsrcStr, bVideo);
109+
}
110+
extern "C" bool ModuleHelp_Rtsp_GetTrack(LPCXSTR lpszClientID, int nTrackID, bool* pbVideo)
111+
{
112+
return m_HelpRtsp.ModuleHelp_Rtsp_GetTrack(lpszClientID, nTrackID, pbVideo);
105113
}

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientMethod.cpp

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
144144
ModuleHelp_Rtsp_CreateClient(lpszClientAddr, 0, 1);
145145

146146
st_RTSPResponse.nPLen = nRVLen;
147+
_tcsxcpy(st_RTSPResponse.tszConBase, st_RTSPRequest.tszUrl);
148+
st_RTSPResponse.st_AdditionalOPtions.bDynamicRate = true;
149+
st_RTSPResponse.st_AdditionalOPtions.bRetransmit = true;
150+
147151
RTSPProtocol_REPPacket_Response(tszSDBuffer, &nSDLen, &st_RTSPResponse);
148152
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
149153
XEngine_Network_Send(lpszClientAddr, tszRVBuffer, nRVLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
@@ -162,13 +166,25 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
162166
st_RTSPResponse.st_TransportInfo.st_ClientPorts.nRTPPort = st_RTSPRequest.st_TransportInfo.st_ClientPorts.nRTPPort;
163167
st_RTSPResponse.st_TransportInfo.st_ClientPorts.nRTCPPort = st_RTSPRequest.st_TransportInfo.st_ClientPorts.nRTCPPort;
164168

165-
st_RTSPResponse.st_TransportInfo.st_ServerPorts.nRTPPort = 0;
166-
st_RTSPResponse.st_TransportInfo.st_ServerPorts.nRTCPPort = 1;
167-
_tcsxcpy(st_RTSPResponse.st_TransportInfo.tszSSRCStr, _X("0000002"));
169+
bool bVideo = false;
170+
ModuleHelp_Rtsp_GetTrack(lpszClientAddr, st_RTSPRequest.st_ChannelInfo.nChannelNumber, &bVideo);
171+
if (bVideo)
172+
{
173+
st_RTSPResponse.st_TransportInfo.st_ServerPorts.nRTPPort = st_ServiceConfig.st_XPull.st_PullRtsp.nVRTPPort;
174+
st_RTSPResponse.st_TransportInfo.st_ServerPorts.nRTCPPort = st_ServiceConfig.st_XPull.st_PullRtsp.nVRTCPPort;
175+
}
176+
else
177+
{
178+
st_RTSPResponse.st_TransportInfo.st_ServerPorts.nRTPPort = st_ServiceConfig.st_XPull.st_PullRtsp.nARTPPort;
179+
st_RTSPResponse.st_TransportInfo.st_ServerPorts.nRTCPPort = st_ServiceConfig.st_XPull.st_PullRtsp.nARTCPPort;
180+
}
181+
BaseLib_OperatorHandle_CreateStr(st_RTSPResponse.st_TransportInfo.tszSSRCStr, 8, 1);
182+
ModuleHelp_Rtsp_SetSsrc(lpszClientAddr, st_RTSPResponse.st_TransportInfo.tszSSRCStr, bVideo);
168183

184+
169185
RTSPProtocol_REPPacket_Response(tszSDBuffer, &nSDLen, &st_RTSPResponse);
170186
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
171-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("RTSP:%s,请求SETUP选项成功,请求的拉流ID:%s"), lpszClientAddr);
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);
172188
}
173189
else
174190
{

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Hdr.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,10 @@ extern XHANDLE xhJT1078Heart;
115115
extern XHANDLE xhJT1078Pkt;
116116
extern XHANDLE xhJT1078Pool;
117117
//RTSP的UDP网络
118-
extern XHANDLE xhRTPSocket;
119-
extern XHANDLE xhRTCPSocket;
118+
extern XHANDLE xhVRTPSocket;
119+
extern XHANDLE xhVRTCPSocket;
120+
extern XHANDLE xhARTPSocket;
121+
extern XHANDLE xhARTCPSocket;
120122
//配置文件
121123
extern XENGINE_SERVICECONFIG st_ServiceConfig;
122124
//调试

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Network.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,12 +139,20 @@ void CALLBACK Network_Callback_SRTLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket,
139139
XEngine_Network_Close(lpszClientAddr, hSocket, false, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT);
140140
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SRT客户端:%s,离开了服务器"), lpszClientAddr);
141141
}
142-
//UDP
143-
void CALLBACK Network_Callback_RTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
142+
//RTSP
143+
void CALLBACK Network_Callback_VideoRTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
144144
{
145145

146146
}
147-
void CALLBACK Network_Callback_RTCPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
147+
void CALLBACK Network_Callback_VideoRTCPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
148+
{
149+
150+
}
151+
void CALLBACK Network_Callback_AudioRTPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
152+
{
153+
154+
}
155+
void CALLBACK Network_Callback_AudioRTCPRecv(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszRecvMsg, int nMsgLen, XPVOID lParam)
148156
{
149157

150158
}

0 commit comments

Comments
 (0)