Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
XEngine
XEngine StreamMedia
提交
ea0d9c73
X
XEngine StreamMedia
项目概览
XEngine
/
XEngine StreamMedia
9 个月 前同步成功
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
XEngine StreamMedia
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ea0d9c73
编写于
7月 31, 2023
作者:
xengine-qyt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixed:clean client resource is incorrent when client close
上级
bd3e5f86
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
77 addition
and
48 deletion
+77
-48
XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h
XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h
+14
-0
XEngine_Source/XEngine_ModuleSession/ModuleSession_PullStream/ModuleSession_PullStream.cpp
...ion/ModuleSession_PullStream/ModuleSession_PullStream.cpp
+38
-0
XEngine_Source/XEngine_ModuleSession/ModuleSession_PullStream/ModuleSession_PullStream.h
...ssion/ModuleSession_PullStream/ModuleSession_PullStream.h
+1
-0
XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def
...ne_Source/XEngine_ModuleSession/XEngine_ModuleSession.def
+1
-0
XEngine_Source/XEngine_ModuleSession/pch.cpp
XEngine_Source/XEngine_ModuleSession/pch.cpp
+4
-0
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Network.cpp
...ine_ServiceApp/XEngine_StreamMediaApp/XEngine_Network.cpp
+19
-47
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.cpp
...viceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.cpp
+0
-1
未找到文件。
XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h
浏览文件 @
ea0d9c73
...
...
@@ -122,6 +122,20 @@ extern "C" bool ModuleSession_PullStream_GetStreamType(LPCXSTR lpszClientAddr, E
备注:
*********************************************************************/
extern
"C"
bool
ModuleSession_PullStream_Delete
(
LPCXSTR
lpszClientAddr
);
/********************************************************************
函数名称:ModuleSession_PullStream_Delete
函数功能:删除整个推流端关联的拉流地址
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入要处理的客户端
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
extern
"C"
bool
ModuleSession_PullStream_PublishDelete
(
LPCXSTR
lpszClientAddr
);
/*********************************************************************************
* 推流端导出会话模块 *
*********************************************************************************/
...
...
XEngine_Source/XEngine_ModuleSession/ModuleSession_PullStream/ModuleSession_PullStream.cpp
浏览文件 @
ea0d9c73
...
...
@@ -103,6 +103,44 @@ bool CModuleSession_PullStream::ModuleSession_PullStream_Delete(LPCXSTR lpszClie
return
true
;
}
/********************************************************************
函数名称:ModuleSession_PullStream_Delete
函数功能:删除整个推流端关联的拉流地址
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入要处理的客户端
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
bool
CModuleSession_PullStream
::
ModuleSession_PullStream_PublishDelete
(
LPCXSTR
lpszClientAddr
)
{
Session_IsErrorOccur
=
false
;
if
(
NULL
==
lpszClientAddr
)
{
Session_IsErrorOccur
=
true
;
Session_dwErrorCode
=
ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT
;
return
false
;
}
st_Locker
.
lock
();
for
(
auto
stl_MapIterator
=
stl_MapClient
.
begin
();
stl_MapIterator
!=
stl_MapClient
.
end
();
)
{
if
(
0
==
_tcsxnicmp
(
lpszClientAddr
,
stl_MapIterator
->
second
->
tszSMSAddr
,
_tcsxlen
(
lpszClientAddr
)))
{
stl_MapIterator
=
stl_MapClient
.
erase
(
stl_MapIterator
);
}
else
{
stl_MapIterator
++
;
}
}
st_Locker
.
unlock
();
return
true
;
}
/********************************************************************
函数名称:ModuleSession_PullStream_GetSMSAddr
函数功能:获取客户端绑定的流ID
参数.一:lpszClientAddr
...
...
XEngine_Source/XEngine_ModuleSession/ModuleSession_PullStream/ModuleSession_PullStream.h
浏览文件 @
ea0d9c73
...
...
@@ -29,6 +29,7 @@ public:
bool
ModuleSession_PullStream_GetPushAddr
(
LPCXSTR
lpszClientAddr
,
XCHAR
*
ptszPushAddr
);
bool
ModuleSession_PullStream_GetStreamType
(
LPCXSTR
lpszClientAddr
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
*
penStreamType
);
bool
ModuleSession_PullStream_Delete
(
LPCXSTR
lpszClientAddr
);
bool
ModuleSession_PullStream_PublishDelete
(
LPCXSTR
lpszClientAddr
);
private:
shared_mutex
st_Locker
;
private:
...
...
XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def
浏览文件 @
ea0d9c73
...
...
@@ -8,6 +8,7 @@ EXPORTS
ModuleSession_PullStream_GetPushAddr
ModuleSession_PullStream_GetStreamType
ModuleSession_PullStream_Delete
ModuleSession_PullStream_PublishDelete
ModuleSession_PushStream_Create
ModuleSession_PushStream_Destroy
...
...
XEngine_Source/XEngine_ModuleSession/pch.cpp
浏览文件 @
ea0d9c73
...
...
@@ -51,6 +51,10 @@ extern "C" bool ModuleSession_PullStream_Delete(LPCXSTR lpszClientAddr)
{
return
m_PullStream
.
ModuleSession_PullStream_Delete
(
lpszClientAddr
);
}
extern
"C"
bool
ModuleSession_PullStream_PublishDelete
(
LPCXSTR
lpszClientAddr
)
{
return
m_PullStream
.
ModuleSession_PullStream_PublishDelete
(
lpszClientAddr
);
}
/*********************************************************************************
* 推流导出会话模块 *
*********************************************************************************/
...
...
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Network.cpp
浏览文件 @
ea0d9c73
...
...
@@ -142,6 +142,23 @@ void CALLBACK Network_Callback_SRTLeave(LPCXSTR lpszClientAddr, XSOCKET hSocket,
//////////////////////////////////////////////////////////////////////////网络IO关闭操作
void
XEngine_Network_Close
(
LPCXSTR
lpszClientAddr
,
XSOCKET
hSocket
,
bool
bHeart
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enClientType
)
{
XCHAR
tszSMSAddr
[
MAX_PATH
];
XCHAR
tszPushAddr
[
MAX_PATH
];
memset
(
tszSMSAddr
,
'\0'
,
sizeof
(
tszSMSAddr
));
memset
(
tszPushAddr
,
'\0'
,
sizeof
(
tszPushAddr
));
//可能是推流也可能是拉流
if
(
ModuleSession_PullStream_GetPushAddr
(
lpszClientAddr
,
tszPushAddr
))
{
ModuleSession_PullStream_Delete
(
lpszClientAddr
);
ModuleSession_PushStream_ClientDelete
(
tszPushAddr
,
lpszClientAddr
);
}
if
(
ModuleSession_PushStream_GetAddrForAddr
(
lpszClientAddr
,
tszSMSAddr
))
{
ModuleSession_PullStream_PublishDelete
(
tszSMSAddr
);
ModuleSession_PushStream_Destroy
(
lpszClientAddr
);
}
if
(
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP
==
enClientType
)
{
//先关闭网络和心跳,他们主动回调的数据我们可以不用主动调用关闭
...
...
@@ -155,19 +172,6 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, XSOCKET hSocket, bool bHeart,
}
//需要主动删除与客户端对应的组包器队列中的资源
HttpProtocol_Server_CloseClinetEx
(
xhHttpPacket
,
lpszClientAddr
);
//停止拉流
XCHAR
tszSMSAddr
[
MAX_PATH
];
XCHAR
tszPushAddr
[
MAX_PATH
];
memset
(
tszSMSAddr
,
'\0'
,
sizeof
(
tszSMSAddr
));
memset
(
tszPushAddr
,
'\0'
,
sizeof
(
tszPushAddr
));
ModuleSession_PullStream_GetSMSAddr
(
lpszClientAddr
,
tszSMSAddr
);
if
(
ModuleSession_PullStream_GetPushAddr
(
lpszClientAddr
,
tszPushAddr
))
{
ModuleSession_PullStream_Delete
(
lpszClientAddr
);
ModuleSession_PushStream_ClientDelete
(
tszPushAddr
,
lpszClientAddr
);
}
XLOG_PRINT
(
xhLog
,
XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO
,
_X
(
"HTTP客户端:%s,离开服务器"
),
lpszClientAddr
);
}
else
if
(
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_XSTREAM
==
enClientType
)
...
...
@@ -185,7 +189,6 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, XSOCKET hSocket, bool bHeart,
HelpComponents_Datas_DeleteEx
(
xhXStreamPacket
,
lpszClientAddr
);
//停止推流
XEngine_AVPacket_AVDelete
(
lpszClientAddr
);
ModuleSession_PushStream_Destroy
(
lpszClientAddr
);
XLOG_PRINT
(
xhLog
,
XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO
,
_X
(
"XEngine推流端:%s,离开服务器,心跳标志:%d"
),
lpszClientAddr
,
bHeart
);
}
else
if
(
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_JT1078
==
enClientType
)
...
...
@@ -211,43 +214,12 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, XSOCKET hSocket, bool bHeart,
{
SocketOpt_HeartBeat_DeleteAddrEx
(
xhRTMPHeart
,
lpszClientAddr
);
}
XCHAR
tszSMSAddr
[
MAX_PATH
];
XCHAR
tszPushAddr
[
MAX_PATH
];
memset
(
tszSMSAddr
,
'\0'
,
sizeof
(
tszSMSAddr
));
memset
(
tszPushAddr
,
'\0'
,
sizeof
(
tszPushAddr
));
//可能是推流也可能是拉流
ModuleSession_PullStream_GetSMSAddr
(
lpszClientAddr
,
tszSMSAddr
);
if
(
ModuleSession_PullStream_GetPushAddr
(
lpszClientAddr
,
tszPushAddr
))
{
ModuleSession_PullStream_Delete
(
lpszClientAddr
);
ModuleSession_PushStream_ClientDelete
(
tszPushAddr
,
lpszClientAddr
);
}
else
{
RTMPProtocol_Parse_Delete
(
lpszClientAddr
);
XEngine_AVPacket_AVDelete
(
lpszClientAddr
);
ModuleSession_PushStream_Destroy
(
lpszClientAddr
);
}
RTMPProtocol_Parse_Delete
(
lpszClientAddr
);
XEngine_AVPacket_AVDelete
(
lpszClientAddr
);
XLOG_PRINT
(
xhLog
,
XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO
,
_X
(
"RTMP推流端:%s,离开服务器,心跳标志:%d"
),
lpszClientAddr
,
bHeart
);
}
else
if
(
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT
==
enClientType
)
{
XCHAR
tszSMSAddr
[
MAX_PATH
];
XCHAR
tszPushAddr
[
MAX_PATH
];
memset
(
tszSMSAddr
,
'\0'
,
sizeof
(
tszSMSAddr
));
memset
(
tszPushAddr
,
'\0'
,
sizeof
(
tszPushAddr
));
//可能是推流也可能是拉流
if
(
ModuleSession_PullStream_GetPushAddr
(
lpszClientAddr
,
tszPushAddr
))
{
ModuleSession_PullStream_Delete
(
lpszClientAddr
);
ModuleSession_PushStream_ClientDelete
(
tszPushAddr
,
lpszClientAddr
);
}
if
(
ModuleSession_PushStream_GetAddrForAddr
(
lpszClientAddr
,
tszSMSAddr
))
{
ModuleSession_PushStream_Destroy
(
lpszClientAddr
);
}
XLOG_PRINT
(
xhLog
,
XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO
,
_X
(
"SRT客户端:%s,离开服务器,心跳标志:%d"
),
lpszClientAddr
,
bHeart
);
}
}
...
...
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.cpp
浏览文件 @
ea0d9c73
...
...
@@ -65,7 +65,6 @@ void ServiceApp_Stop(int signo)
ManagePool_Thread_NQDestroy
(
xhRTMPPool
);
ManagePool_Thread_NQDestroy
(
xhJT1078Pool
);
//销毁其他资源
srt_cleanup
();
HelpComponents_XLog_Destroy
(
xhLog
);
if
(
NULL
!=
pst_AFile
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录