Skip to content

Commit 2e6caf2

Browse files
committed
added:ice user and pass for webrtc of configure
added:ice info set and get for pull session modify:webrtc insert pull stream
1 parent 148b26b commit 2e6caf2

File tree

9 files changed

+204
-9
lines changed

9 files changed

+204
-9
lines changed

XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ typedef struct tag_XEngine_ServiceConfig
9090
}st_PullRtsp;
9191
struct
9292
{
93+
XCHAR tszICEUser[MAX_PATH];
94+
XCHAR tszICEPass[MAX_PATH];
9395
XCHAR tszCertStr[MAX_PATH];
9496
XCHAR tszKeyStr[MAX_PATH];
9597
XCHAR tszCsrStr[MAX_PATH];

XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
155155
pSt_ServerConfig->st_XPull.st_PullHls.nTime = st_PullHls["nTime"].asInt();
156156
_tcsxcpy(pSt_ServerConfig->st_XPull.st_PullHls.tszHLSPath, st_PullHls["tszHLSPath"].asCString());
157157

158+
_tcsxcpy(pSt_ServerConfig->st_XPull.st_PullWebRtc.tszICEUser, st_PullWebRtc["tszICEUser"].asCString());
159+
_tcsxcpy(pSt_ServerConfig->st_XPull.st_PullWebRtc.tszICEPass, st_PullWebRtc["tszICEPass"].asCString());
158160
_tcsxcpy(pSt_ServerConfig->st_XPull.st_PullWebRtc.tszCertStr, st_PullWebRtc["tszCertStr"].asCString());
159161
_tcsxcpy(pSt_ServerConfig->st_XPull.st_PullWebRtc.tszKeyStr, st_PullWebRtc["tszKeyStr"].asCString());
160162
_tcsxcpy(pSt_ServerConfig->st_XPull.st_PullWebRtc.tszCsrStr, st_PullWebRtc["tszCsrStr"].asCString());

XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ typedef struct
2424
}STREAMMEDIA_PUBLISHINFO;
2525
typedef struct
2626
{
27+
struct
28+
{
29+
XCHAR tszICEUser[MAX_PATH];
30+
XCHAR tszICEPass[MAX_PATH];
31+
XCHAR tszHMacStr[MAX_PATH];
32+
}st_WEBRtc;
2733
XCHAR tszSMSAddr[MAX_PATH];
2834
XCHAR tszPushAddr[MAX_PATH];
2935
int nFLVTag;
@@ -124,6 +130,64 @@ extern "C" bool ModuleSession_PullStream_GetPushAddr(LPCXSTR lpszClientAddr, XCH
124130
*********************************************************************/
125131
extern "C" bool ModuleSession_PullStream_GetStreamType(LPCXSTR lpszClientAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE* penStreamType);
126132
/********************************************************************
133+
函数名称:ModuleSession_PullStream_RTCSet
134+
函数功能:设置RTC流的信息
135+
参数.一:lpszClientAddr
136+
In/Out:In
137+
类型:常量字符指针
138+
可空:N
139+
意思:输入要处理的客户端
140+
参数.二:lpszICEUser
141+
In/Out:In
142+
类型:常量字符指针
143+
可空:N
144+
意思:输入ICE用户
145+
参数.三:lpszICEPass
146+
In/Out:In
147+
类型:常量字符指针
148+
可空:N
149+
意思:输入ICE密码
150+
参数.四:lpszHMacStr
151+
In/Out:In
152+
类型:常量字符指针
153+
可空:N
154+
意思:输入HMAC的SHA值
155+
返回值
156+
类型:逻辑型
157+
意思:是否成功
158+
备注:
159+
*********************************************************************/
160+
extern "C" bool ModuleSession_PullStream_RTCSet(LPCXSTR lpszClientAddr, LPCXSTR lpszICEUser, LPCXSTR lpszICEPass, LPCXSTR lpszHMacStr);
161+
/********************************************************************
162+
函数名称:ModuleSession_PullStream_RTCGet
163+
函数功能:获取RTC流的信息
164+
参数.一:lpszClientAddr
165+
In/Out:In
166+
类型:常量字符指针
167+
可空:N
168+
意思:输入要处理的客户端
169+
参数.二:ptszICEUser
170+
In/Out:In
171+
类型:字符指针
172+
可空:N
173+
意思:输出ICE用户
174+
参数.三:ptszICEPass
175+
In/Out:In
176+
类型:字符指针
177+
可空:N
178+
意思:输出ICE密码
179+
参数.四:ptszHMacStr
180+
In/Out:In
181+
类型:字符指针
182+
可空:N
183+
意思:输出HMAC的SHA值
184+
返回值
185+
类型:逻辑型
186+
意思:是否成功
187+
备注:
188+
*********************************************************************/
189+
extern "C" bool ModuleSession_PullStream_RTCGet(LPCXSTR lpszClientAddr, XCHAR* ptszICEUser = NULL, XCHAR* ptszICEPass = NULL, XCHAR* ptszHMacStr = NULL);
190+
/********************************************************************
127191
函数名称:ModuleSession_PullStream_Delete
128192
函数功能:删除一个拉流端
129193
参数.一:lpszClientAddr

XEngine_Source/XEngine_ModuleSession/ModuleSession_PullStream/ModuleSession_PullStream.cpp

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,111 @@ bool CModuleSession_PullStream::ModuleSession_PullStream_GetStreamType(LPCXSTR l
267267
return true;
268268
}
269269
/********************************************************************
270+
函数名称:ModuleSession_PullStream_RTCSet
271+
函数功能:设置RTC流的信息
272+
参数.一:lpszClientAddr
273+
In/Out:In
274+
类型:常量字符指针
275+
可空:N
276+
意思:输入要处理的客户端
277+
参数.二:lpszICEUser
278+
In/Out:In
279+
类型:常量字符指针
280+
可空:N
281+
意思:输入ICE用户
282+
参数.三:lpszICEPass
283+
In/Out:In
284+
类型:常量字符指针
285+
可空:N
286+
意思:输入ICE密码
287+
参数.四:lpszHMacStr
288+
In/Out:In
289+
类型:常量字符指针
290+
可空:N
291+
意思:输入HMAC的SHA值
292+
返回值
293+
类型:逻辑型
294+
意思:是否成功
295+
备注:
296+
*********************************************************************/
297+
bool CModuleSession_PullStream::ModuleSession_PullStream_RTCSet(LPCXSTR lpszClientAddr, LPCXSTR lpszICEUser, LPCXSTR lpszICEPass, LPCXSTR lpszHMacStr)
298+
{
299+
Session_IsErrorOccur = false;
300+
301+
st_Locker.lock_shared();
302+
auto stl_MapIterator = stl_MapClient.find(lpszClientAddr);
303+
if (stl_MapIterator == stl_MapClient.end())
304+
{
305+
Session_IsErrorOccur = true;
306+
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
307+
st_Locker.unlock_shared();
308+
return false;
309+
}
310+
311+
_tcsxcpy(stl_MapIterator->second->st_WEBRtc.tszICEUser, lpszICEUser);
312+
_tcsxcpy(stl_MapIterator->second->st_WEBRtc.tszICEPass, lpszICEPass);
313+
_tcsxcpy(stl_MapIterator->second->st_WEBRtc.tszHMacStr, lpszHMacStr);
314+
st_Locker.unlock_shared();
315+
return true;
316+
}
317+
/********************************************************************
318+
函数名称:ModuleSession_PullStream_RTCGet
319+
函数功能:获取RTC流的信息
320+
参数.一:lpszClientAddr
321+
In/Out:In
322+
类型:常量字符指针
323+
可空:N
324+
意思:输入要处理的客户端
325+
参数.二:ptszICEUser
326+
In/Out:In
327+
类型:字符指针
328+
可空:N
329+
意思:输出ICE用户
330+
参数.三:ptszICEPass
331+
In/Out:In
332+
类型:字符指针
333+
可空:N
334+
意思:输出ICE密码
335+
参数.四:ptszHMacStr
336+
In/Out:In
337+
类型:字符指针
338+
可空:N
339+
意思:输出HMAC的SHA值
340+
返回值
341+
类型:逻辑型
342+
意思:是否成功
343+
备注:
344+
*********************************************************************/
345+
bool CModuleSession_PullStream::ModuleSession_PullStream_RTCGet(LPCXSTR lpszClientAddr, XCHAR* ptszICEUser /* = NULL */, XCHAR* ptszICEPass /* = NULL */, XCHAR* ptszHMacStr /* = NULL */)
346+
{
347+
Session_IsErrorOccur = false;
348+
349+
st_Locker.lock_shared();
350+
auto stl_MapIterator = stl_MapClient.find(lpszClientAddr);
351+
if (stl_MapIterator == stl_MapClient.end())
352+
{
353+
Session_IsErrorOccur = true;
354+
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
355+
st_Locker.unlock_shared();
356+
return false;
357+
}
358+
359+
if (NULL != ptszICEUser)
360+
{
361+
_tcsxcpy(ptszICEUser, stl_MapIterator->second->st_WEBRtc.tszICEUser);
362+
}
363+
if (NULL != ptszICEPass)
364+
{
365+
_tcsxcpy(ptszICEPass, stl_MapIterator->second->st_WEBRtc.tszICEPass);
366+
}
367+
if (NULL != ptszHMacStr)
368+
{
369+
_tcsxcpy(ptszHMacStr, stl_MapIterator->second->st_WEBRtc.tszHMacStr);
370+
}
371+
st_Locker.unlock_shared();
372+
return true;
373+
}
374+
/********************************************************************
270375
函数名称:ModuleSession_PullStream_GetList
271376
函数功能:获取用户列表
272377
参数.一:pppSt_PullList

XEngine_Source/XEngine_ModuleSession/ModuleSession_PullStream/ModuleSession_PullStream.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class CModuleSession_PullStream
2020
bool ModuleSession_PullStream_GetSMSAddr(LPCXSTR lpszClientAddr, XCHAR* ptszSMSAddr);
2121
bool ModuleSession_PullStream_GetPushAddr(LPCXSTR lpszClientAddr, XCHAR* ptszPushAddr);
2222
bool ModuleSession_PullStream_GetStreamType(LPCXSTR lpszClientAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE* penStreamType);
23+
bool ModuleSession_PullStream_RTCSet(LPCXSTR lpszClientAddr, LPCXSTR lpszICEUser, LPCXSTR lpszICEPass, LPCXSTR lpszHMacStr);
24+
bool ModuleSession_PullStream_RTCGet(LPCXSTR lpszClientAddr, XCHAR* ptszICEUser = NULL, XCHAR* ptszICEPass = NULL, XCHAR* ptszHMacStr = NULL);
2325
bool ModuleSession_PullStream_Delete(LPCXSTR lpszClientAddr);
2426
bool ModuleSession_PullStream_PublishDelete(LPCXSTR lpszClientAddr);
2527
bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount);

XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ EXPORTS
77
ModuleSession_PullStream_GetSMSAddr
88
ModuleSession_PullStream_GetPushAddr
99
ModuleSession_PullStream_GetStreamType
10+
ModuleSession_PullStream_RTCSet
11+
ModuleSession_PullStream_RTCGet
1012
ModuleSession_PullStream_Delete
1113
ModuleSession_PullStream_PublishDelete
1214
ModuleSession_PullStream_GetList

XEngine_Source/XEngine_ModuleSession/pch.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ extern "C" bool ModuleSession_PullStream_GetStreamType(LPCXSTR lpszClientAddr, E
4747
{
4848
return m_PullStream.ModuleSession_PullStream_GetStreamType(lpszClientAddr, penStreamType);
4949
}
50+
extern "C" bool ModuleSession_PullStream_RTCSet(LPCXSTR lpszClientAddr, LPCXSTR lpszICEUser, LPCXSTR lpszICEPass, LPCXSTR lpszHMacStr)
51+
{
52+
return m_PullStream.ModuleSession_PullStream_RTCSet(lpszClientAddr, lpszICEUser, lpszICEPass, lpszHMacStr);
53+
}
54+
extern "C" bool ModuleSession_PullStream_RTCGet(LPCXSTR lpszClientAddr, XCHAR * ptszICEUser, XCHAR * ptszICEPass, XCHAR * ptszHMacStr)
55+
{
56+
return m_PullStream.ModuleSession_PullStream_RTCGet(lpszClientAddr, ptszICEUser, ptszICEPass, ptszHMacStr);
57+
}
5058
extern "C" bool ModuleSession_PullStream_Delete(LPCXSTR lpszClientAddr)
5159
{
5260
return m_PullStream.ModuleSession_PullStream_Delete(lpszClientAddr);

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientWebRtc.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ bool PullStream_ClientWebRtc_SDKPacket(XNETHANDLE xhPacket, bool bVideo, XENGINE
105105
SDPProtocol_Packet_AddMedia(xhPacket, _X("audio"), _X("UDP/TLS/RTP/SAVPF"), &pptszAVList, 1, 9);
106106
}
107107
//生成用户和密码
108-
SDPProtocol_Packet_ICEUser(xhPacket, _X("j107le40"), _X("3321308h8i6vt3769r6638l1409d50jz"));
108+
SDPProtocol_Packet_ICEUser(xhPacket, st_ServiceConfig.st_XPull.st_PullWebRtc.tszICEUser, st_ServiceConfig.st_XPull.st_PullWebRtc.tszICEPass);
109109

110110
int nDLen = 0;
111111
XBYTE tszDigestStr[MAX_PATH] = {};
@@ -172,19 +172,19 @@ bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
172172
st_HDRParam.nHttpCode = 200; //HTTP CODE码
173173
st_HDRParam.bIsClose = true; //收到回复后就关闭
174174

175-
XCHAR tszAPPName[128] = {};
176-
BaseLib_OperatorString_GetStartEnd(pSt_HTTPParam->tszHttpUri, tszAPPName, _X("app="), _X("&"));
177-
_tcsxcat(tszAPPName, _X("/"));
178-
BaseLib_OperatorString_GetStartEnd(pSt_HTTPParam->tszHttpUri, tszAPPName + _tcsxlen(tszAPPName), _X("stream="));
175+
XCHAR tszSMSAddr[128] = {};
176+
BaseLib_OperatorString_GetStartEnd(pSt_HTTPParam->tszHttpUri, tszSMSAddr, _X("app="), _X("&"));
177+
_tcsxcat(tszSMSAddr, _X("/"));
178+
BaseLib_OperatorString_GetStartEnd(pSt_HTTPParam->tszHttpUri, tszSMSAddr + _tcsxlen(tszSMSAddr), _X("stream="));
179179
//查找流是否存在
180180
XCHAR tszPushAddr[128] = {};
181181
XENGINE_PROTOCOL_AVINFO st_AVInfo = {};
182-
if (!ModuleSession_PushStream_FindStream(tszAPPName, tszPushAddr))
182+
if (!ModuleSession_PushStream_FindStream(tszSMSAddr, tszPushAddr))
183183
{
184184
ModuleProtocol_Packet_Comm(tszRVBuffer, &nRVLen, NULL, 404, "stream name not found");
185185
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
186186
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
187-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBRTC:%s,请求拉流的地址:%s 不正确,没有找到,错误:%lX"), lpszClientAddr, tszAPPName, ModuleSession_GetLastError());
187+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBRTC:%s,请求拉流的地址:%s 不正确,没有找到,错误:%lX"), lpszClientAddr, tszSMSAddr, ModuleSession_GetLastError());
188188
return false;
189189
}
190190
ModuleSession_PushStream_GetAVInfo(tszPushAddr, &st_AVInfo);
@@ -230,8 +230,17 @@ bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
230230
SDPProtocol_Packet_GetPacket(xhPacket, tszRVBuffer, &nRVLen);
231231
SDPProtocol_Packet_Destory(xhPacket);
232232
#endif
233+
XCHAR tszHDRStr[MAX_PATH] = {};
234+
XCHAR tszUserStr[MAX_PATH] = {};
235+
236+
_xstprintf(tszUserStr, _X("%s:%s"), st_ServiceConfig.st_XPull.st_PullWebRtc.tszICEUser, tszICEUser);
237+
_xstprintf(tszHDRStr, _X("Location: /rtc/v1/whip/?action=delete&token=6150ecg33&app=live&stream=livestream.flv&session=%s\r\n"), tszUserStr);
238+
239+
ModuleSession_PullStream_Insert(tszUserStr, tszSMSAddr, tszPushAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTC);
240+
ModuleSession_PullStream_RTCSet(tszUserStr, tszICEUser, tszICEPass, tszHMacStr);
241+
233242
st_HDRParam.nHttpCode = 201;
234-
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
243+
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen, tszHDRStr);
235244
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
236245
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBRTC:%s,WHEP协议拉流请求成功"), lpszClientAddr);
237246
return true;

XEngine_Source/XEngine_UserProtocol.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ typedef enum
2727
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTMP = 0x12,
2828
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_SRT = 0x13,
2929
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTSP = 0x14,
30-
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_TS = 0x15
30+
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_TS = 0x15,
31+
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTC = 0x16
3132
}ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE;
3233
/*********************************************************************
3334
操作类型定义

0 commit comments

Comments
 (0)