Skip to content

Commit d0da682

Browse files
committed
added:pre-play stream for rtmp support
1 parent 6966a89 commit d0da682

File tree

7 files changed

+227
-98
lines changed

7 files changed

+227
-98
lines changed

XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ typedef struct
4141
XCHAR tszAudioCName[MAX_PATH];
4242
XCHAR tszAudioLabel[MAX_PATH];
4343
}st_WEBRtc;
44+
XCHAR tszClientAddr[MAX_PATH];
4445
XCHAR tszSMSAddr[MAX_PATH];
4546
XCHAR tszPushAddr[MAX_PATH];
4647
int nFLVTag;
@@ -84,6 +85,25 @@ extern "C" XLONG ModuleSession_GetLastError(int *pInt_SysError = NULL);
8485
*********************************************************************/
8586
extern "C" bool ModuleSession_PullStream_Insert(LPCXSTR lpszClientAddr, LPCXSTR lpszSMSAddr, LPCXSTR lpszPushAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType);
8687
/********************************************************************
88+
函数名称:ModuleSession_PullStream_SetPushAddr
89+
函数功能:设置客户端的推流地址
90+
参数.一:lpszClientAddr
91+
In/Out:In
92+
类型:常量字符指针
93+
可空:N
94+
意思:输入要操作的客户端
95+
参数.二:lpszPushAddr
96+
In/Out:In
97+
类型:常量字符指针
98+
可空:N
99+
意思:输入推流地址
100+
返回值
101+
类型:逻辑型
102+
意思:是否成功
103+
备注:
104+
*********************************************************************/
105+
extern "C" bool ModuleSession_PullStream_SetPushAddr(LPCXSTR lpszClientAddr, LPCXSTR lpszPushAddr);
106+
/********************************************************************
87107
函数名称:ModuleSession_PullStream_GetSMSAddr
88108
函数功能:获取客户端绑定的流ID
89109
参数.一:lpszClientAddr
@@ -181,12 +201,17 @@ extern "C" bool ModuleSession_PullStream_PublishDelete(LPCXSTR lpszClientAddr);
181201
类型:整数型指针
182202
可空:N
183203
意思:输出列表个数
204+
参数.三:lpszSMSAddr
205+
In/Out:Out
206+
类型:常量字符指针
207+
可空:Y
208+
意思:可以查找指定流媒体ID的拉流地址
184209
返回值
185210
类型:逻辑型
186211
意思:是否成功
187212
备注:
188213
*********************************************************************/
189-
extern "C" bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount);
214+
extern "C" bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount, LPCXSTR lpszSMSAddr = NULL);
190215
//////////////////////////////////////////////////////////////////////////
191216
/********************************************************************
192217
函数名称:ModuleSession_PullStream_FLVTagSet

XEngine_Source/XEngine_ModuleSession/ModuleSession_PullStream/ModuleSession_PullStream.cpp

Lines changed: 77 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,64 @@ bool CModuleSession_PullStream::ModuleSession_PullStream_Insert(LPCXSTR lpszClie
6262
memset(pSt_PullStream, '\0', sizeof(STREAMMEDIA_PULLLISTINFO));
6363

6464
pSt_PullStream->enStreamType = enStreamType;
65-
_tcsxcpy(pSt_PullStream->tszSMSAddr, lpszSMSAddr);
66-
_tcsxcpy(pSt_PullStream->tszPushAddr, lpszPushAddr);
67-
65+
if (NULL != lpszSMSAddr)
66+
{
67+
_tcsxcpy(pSt_PullStream->tszSMSAddr, lpszSMSAddr);
68+
}
69+
if (NULL != lpszPushAddr)
70+
{
71+
_tcsxcpy(pSt_PullStream->tszPushAddr, lpszPushAddr);
72+
}
73+
_tcsxcpy(pSt_PullStream->tszClientAddr, lpszClientAddr);
74+
6875
st_Locker.lock();
6976
stl_MapClient.insert(make_pair(lpszClientAddr, pSt_PullStream));
7077
st_Locker.unlock();
7178
return true;
7279
}
7380
/********************************************************************
81+
函数名称:ModuleSession_PullStream_SetPushAddr
82+
函数功能:设置客户端的推流地址
83+
参数.一:lpszClientAddr
84+
In/Out:In
85+
类型:常量字符指针
86+
可空:N
87+
意思:输入要操作的客户端
88+
参数.二:lpszPushAddr
89+
In/Out:In
90+
类型:常量字符指针
91+
可空:N
92+
意思:输入推流地址
93+
返回值
94+
类型:逻辑型
95+
意思:是否成功
96+
备注:
97+
*********************************************************************/
98+
bool CModuleSession_PullStream::ModuleSession_PullStream_SetPushAddr(LPCXSTR lpszClientAddr, LPCXSTR lpszPushAddr)
99+
{
100+
Session_IsErrorOccur = false;
101+
102+
if (NULL == lpszClientAddr)
103+
{
104+
Session_IsErrorOccur = true;
105+
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT;
106+
return false;
107+
}
108+
st_Locker.lock_shared();
109+
//查找最小
110+
auto stl_MapIterator = stl_MapClient.find(lpszClientAddr);
111+
if (stl_MapIterator == stl_MapClient.end())
112+
{
113+
Session_IsErrorOccur = true;
114+
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
115+
st_Locker.unlock_shared();
116+
return false;
117+
}
118+
_tcsxcpy(stl_MapIterator->second->tszPushAddr, lpszPushAddr);
119+
st_Locker.unlock_shared();
120+
return true;
121+
}
122+
/********************************************************************
74123
函数名称:ModuleSession_PullStream_Delete
75124
函数功能:删除一个拉流端
76125
参数.一:lpszClientAddr
@@ -279,26 +328,45 @@ bool CModuleSession_PullStream::ModuleSession_PullStream_GetStreamType(LPCXSTR l
279328
类型:整数型指针
280329
可空:N
281330
意思:输出列表个数
331+
参数.三:lpszSMSAddr
332+
In/Out:Out
333+
类型:常量字符指针
334+
可空:Y
335+
意思:可以查找指定流媒体ID的拉流地址
282336
返回值
283337
类型:逻辑型
284338
意思:是否成功
285339
备注:
286340
*********************************************************************/
287-
bool CModuleSession_PullStream::ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount)
341+
bool CModuleSession_PullStream::ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount, LPCXSTR lpszSMSAddr)
288342
{
289343
Session_IsErrorOccur = false;
290344

291-
st_Locker.lock_shared();
292-
293-
*pInt_ListCount = stl_MapClient.size();
294-
BaseLib_Memory_Malloc((XPPPMEM)pppSt_PullList, stl_MapClient.size(), sizeof(STREAMMEDIA_PULLLISTINFO));
345+
list<STREAMMEDIA_PULLLISTINFO> stl_ListPullInfo;
295346

347+
st_Locker.lock_shared();
296348
auto stl_MapIterator = stl_MapClient.begin();
297349
for (int i = 0; stl_MapIterator != stl_MapClient.end(); stl_MapIterator++, i++)
298350
{
299-
(*pppSt_PullList)[i] = stl_MapIterator->second;
351+
if (NULL != lpszSMSAddr)
352+
{
353+
if ((0 != _tcsxnicmp(lpszSMSAddr, stl_MapIterator->second->tszSMSAddr, _tcsxlen(lpszSMSAddr))) && (_tcsxlen(stl_MapIterator->second->tszPushAddr) == 0))
354+
{
355+
continue;
356+
}
357+
}
358+
stl_ListPullInfo.push_back(*stl_MapIterator->second);
300359
}
301360
st_Locker.unlock_shared();
361+
362+
*pInt_ListCount = stl_ListPullInfo.size();
363+
BaseLib_Memory_Malloc((XPPPMEM)pppSt_PullList, stl_ListPullInfo.size(), sizeof(STREAMMEDIA_PULLLISTINFO));
364+
auto stl_ListIterator = stl_ListPullInfo.begin();
365+
for (size_t i = 0; i < stl_ListPullInfo.size(); i++)
366+
{
367+
*(*pppSt_PullList)[i] = *stl_ListIterator;
368+
}
369+
stl_ListPullInfo.clear();
302370
return true;
303371
}
304372
/********************************************************************

XEngine_Source/XEngine_ModuleSession/ModuleSession_PullStream/ModuleSession_PullStream.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ class CModuleSession_PullStream
1717
~CModuleSession_PullStream();
1818
public:
1919
bool ModuleSession_PullStream_Insert(LPCXSTR lpszClientAddr, LPCXSTR lpszSMSAddr, LPCXSTR lpszPushAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType);
20+
bool ModuleSession_PullStream_SetPushAddr(LPCXSTR lpszClientAddr, LPCXSTR lpszPushAddr);
2021
bool ModuleSession_PullStream_GetSMSAddr(LPCXSTR lpszClientAddr, XCHAR* ptszSMSAddr);
2122
bool ModuleSession_PullStream_GetPushAddr(LPCXSTR lpszClientAddr, XCHAR* ptszPushAddr);
2223
bool ModuleSession_PullStream_GetStreamType(LPCXSTR lpszClientAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE* penStreamType);
2324
bool ModuleSession_PullStream_Delete(LPCXSTR lpszClientAddr);
2425
bool ModuleSession_PullStream_PublishDelete(LPCXSTR lpszClientAddr);
25-
bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount);
26+
bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount, LPCXSTR lpszSMSAddr = NULL);
2627
public:
2728
bool ModuleSession_PullStream_FLVTagSet(LPCXSTR lpszClientAddr, int nTagSize);
2829
bool ModuleSession_PullStream_FLVTagGet(LPCXSTR lpszClientAddr, int* pInt_TagSize);

XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ EXPORTS
44
ModuleSession_GetLastError
55

66
ModuleSession_PullStream_Insert
7+
ModuleSession_PullStream_SetPushAddr
78
ModuleSession_PullStream_GetSMSAddr
89
ModuleSession_PullStream_GetPushAddr
910
ModuleSession_PullStream_GetStreamType

XEngine_Source/XEngine_ModuleSession/pch.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ extern "C" bool ModuleSession_PullStream_Insert(LPCXSTR lpszClientAddr, LPCXSTR
3535
{
3636
return m_PullStream.ModuleSession_PullStream_Insert(lpszClientAddr, lpszSMSAddr, lpszPushAddr, enStreamType);
3737
}
38+
extern "C" bool ModuleSession_PullStream_SetPushAddr(LPCXSTR lpszClientAddr, LPCXSTR lpszPushAddr)
39+
{
40+
return m_PullStream.ModuleSession_PullStream_SetPushAddr(lpszClientAddr, lpszPushAddr);
41+
}
3842
extern "C" bool ModuleSession_PullStream_GetSMSAddr(LPCXSTR lpszClientAddr, XCHAR * ptszSMSAddr)
3943
{
4044
return m_PullStream.ModuleSession_PullStream_GetSMSAddr(lpszClientAddr, ptszSMSAddr);
@@ -51,9 +55,9 @@ extern "C" bool ModuleSession_PullStream_PublishDelete(LPCXSTR lpszClientAddr)
5155
{
5256
return m_PullStream.ModuleSession_PullStream_PublishDelete(lpszClientAddr);
5357
}
54-
extern "C" bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount)
58+
extern "C" bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount, LPCXSTR lpszSMSAddr)
5559
{
56-
return m_PullStream.ModuleSession_PullStream_GetList(pppSt_PullList, pInt_ListCount);
60+
return m_PullStream.ModuleSession_PullStream_GetList(pppSt_PullList, pInt_ListCount, lpszSMSAddr);
5761
}
5862
//////////////////////////////////////////////////////////////////////////
5963
extern "C" bool ModuleSession_PullStream_FLVTagSet(LPCXSTR lpszClientAddr, int nTagSize)

0 commit comments

Comments
 (0)