Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
XEngine
XEngine StreamMedia
提交
965edf28
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 搜索 >>
提交
965edf28
编写于
8月 21, 2023
作者:
xengine-qyt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
delete:get and set av buffer for push of session module
上级
038564eb
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
7 addition
and
237 deletion
+7
-237
XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h
XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h
+0
-58
XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h
XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h
+2
-1
XEngine_Source/XEngine_ModuleSession/ModuleSession_PushStream/ModuleSession_PushStream.cpp
...ion/ModuleSession_PushStream/ModuleSession_PushStream.cpp
+1
-153
XEngine_Source/XEngine_ModuleSession/ModuleSession_PushStream/ModuleSession_PushStream.h
...ssion/ModuleSession_PushStream/ModuleSession_PushStream.h
+0
-11
XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def
...ne_Source/XEngine_ModuleSession/XEngine_ModuleSession.def
+0
-2
XEngine_Source/XEngine_ModuleSession/pch.cpp
XEngine_Source/XEngine_ModuleSession/pch.cpp
+0
-8
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientTask.cpp
...MediaApp/StreamMedia_PullStream/PullStream_ClientTask.cpp
+4
-3
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PushStream/PushStream_SrtTask.cpp
...eamMediaApp/StreamMedia_PushStream/PushStream_SrtTask.cpp
+0
-1
未找到文件。
XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h
浏览文件 @
965edf28
...
...
@@ -230,64 +230,6 @@ extern "C" bool ModuleSession_PushStream_Destroy(LPCXSTR lpszClientAddr);
*********************************************************************/
extern
"C"
bool
ModuleSession_PushStream_GetAddrForAddr
(
LPCXSTR
lpszClientAddr
,
XCHAR
*
ptszSMSAddr
);
/********************************************************************
函数名称:ModuleSession_PushStream_SetHDRBuffer
函数功能:设置流ID的缓存头
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入客户端地址
参数.二:lpszMsgBuffer
In/Out:In
类型:常量字符指针
可空:N
意思:要缓存的数据
参数.三:nMsgLen
In/Out:In
类型:整数型
可空:N
意思:输入缓存大小
参数.四:enStreamType
In/Out:In
类型:枚举型
可空:N
意思:设置的缓冲区类型
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
extern
"C"
bool
ModuleSession_PushStream_SetHDRBuffer
(
LPCXSTR
lpszClientAddr
,
LPCXSTR
lpszMsgBuffer
,
int
nMsgLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
);
/********************************************************************
函数名称:ModuleSession_PushStream_GetHDRBuffer
函数功能:获取流ID的缓存头
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入客户端地址
参数.二:ptszMsgBuffer
In/Out:In
类型:字符指针
可空:N
意思:输出获取到的数据
参数.三:pInt_MsgLen
In/Out:In
类型:整数型指针
可空:N
意思:输出数据大小
参数.四:enStreamType
In/Out:In
类型:枚举型
可空:N
意思:获取的缓冲区类型
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
extern
"C"
bool
ModuleSession_PushStream_GetHDRBuffer
(
LPCXSTR
lpszClientAddr
,
XCHAR
*
ptszMsgBuffer
,
int
*
pInt_MsgLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
);
/********************************************************************
函数名称:ModuleSession_PushStream_FindStream
函数功能:查找流对应地址
参数.一:lpszSMSAddr
...
...
XEngine_Source/XEngine_ModuleSession/ModuleSession_Error.h
浏览文件 @
965edf28
...
...
@@ -22,4 +22,5 @@
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTCHANNEL 0xE0007 //没有通道
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTLIVE 0xE0008 //没有找到属性
#define ERROR_STREAMMEDIA_MODULE_SESSION_EMPTY 0xE0009 //空的列表
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND 0xE000A //没有找到
\ No newline at end of file
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND 0xE000A //没有找到
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTSUPPORT 0xE000B //不支持的类型
\ No newline at end of file
XEngine_Source/XEngine_ModuleSession/ModuleSession_PushStream/ModuleSession_PushStream.cpp
浏览文件 @
965edf28
...
...
@@ -64,11 +64,9 @@ bool CModuleSession_PushStream::ModuleSession_PushStream_Create(LPCXSTR lpszClie
memset
(
pSt_Packet
,
'\0'
,
sizeof
(
PUSHSTREAM_PACKET
));
pSt_Packet
->
st_ClientLocker
=
make_unique
<
mutex
>
();
pSt_Packet
->
st_MSGLocker
=
make_unique
<
mutex
>
();
pSt_Packet
->
pStl_ListClient
=
make_unique
<
list
<
STREAMMEDIA_SESSIONCLIENT
>>
();
pSt_Packet
->
pStl_MapPushStream
=
make_unique
<
unordered_map
<
int
,
AVPACKET_HDRBUFFER
>>
();
if
((
NULL
==
pSt_Packet
->
pStl_
MapPushStream
)
||
(
NULL
==
pSt_Packet
->
pStl_
ListClient
))
if
((
NULL
==
pSt_Packet
->
pStl_ListClient
))
{
Session_IsErrorOccur
=
true
;
Session_dwErrorCode
=
ERROR_STREAMMEDIA_MODULE_SESSION_MALLOC
;
...
...
@@ -177,156 +175,6 @@ bool CModuleSession_PushStream::ModuleSession_PushStream_GetAddrForAddr(LPCXSTR
return
true
;
}
/********************************************************************
函数名称:ModuleSession_PushStream_SetHDRBuffer
函数功能:设置流ID的缓存头
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入客户端地址
参数.二:lpszMsgBuffer
In/Out:In
类型:常量字符指针
可空:N
意思:要缓存的数据
参数.三:nMsgLen
In/Out:In
类型:整数型
可空:N
意思:输入缓存大小
参数.四:enStreamType
In/Out:In
类型:枚举型
可空:N
意思:设置的缓冲区类型
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
bool
CModuleSession_PushStream
::
ModuleSession_PushStream_SetHDRBuffer
(
LPCXSTR
lpszClientAddr
,
LPCXSTR
lpszMsgBuffer
,
int
nMsgLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
)
{
Session_IsErrorOccur
=
false
;
if
(
NULL
==
lpszClientAddr
)
{
Session_IsErrorOccur
=
true
;
Session_dwErrorCode
=
ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT
;
return
false
;
}
//设备编号是否存在
st_Locker
.
lock_shared
();
unordered_map
<
xstring
,
PUSHSTREAM_PACKET
*>::
iterator
stl_MapIterator
=
stl_MapPushStream
.
find
(
lpszClientAddr
);
if
(
stl_MapIterator
==
stl_MapPushStream
.
end
())
{
Session_IsErrorOccur
=
true
;
Session_dwErrorCode
=
ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND
;
st_Locker
.
unlock_shared
();
return
false
;
}
AVPACKET_HDRBUFFER
st_HDRBuffer
;
memset
(
&
st_HDRBuffer
,
'\0'
,
sizeof
(
AVPACKET_HDRBUFFER
));
if
(
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_FLV
==
enStreamType
)
{
//准备头
st_HDRBuffer
.
nMsgLen
=
_xstprintf
(
st_HDRBuffer
.
tszMsgBuffer
,
_X
(
"HTTP/1.1 200 OK
\r\n
"
"Connection: Close
\r\n
"
"Content-Type: video/x-flv
\r\n
"
"Server: XEngine/%s
\r\n
"
"Transfer-Encoding: chunked
\r\n\r\n
"
"%x
\r\n
"
),
BaseLib_OperatorVer_XTypeStr
(),
nMsgLen
);
//拷贝数据
memcpy
(
st_HDRBuffer
.
tszMsgBuffer
+
st_HDRBuffer
.
nMsgLen
,
lpszMsgBuffer
,
nMsgLen
);
st_HDRBuffer
.
nMsgLen
+=
nMsgLen
;
//拷贝结尾
memcpy
(
st_HDRBuffer
.
tszMsgBuffer
+
st_HDRBuffer
.
nMsgLen
,
_X
(
"
\r\n
"
),
2
);
st_HDRBuffer
.
nMsgLen
+=
2
;
}
else
if
(
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTMP
==
enStreamType
)
{
st_HDRBuffer
.
nMsgLen
=
nMsgLen
;
memcpy
(
st_HDRBuffer
.
tszMsgBuffer
,
lpszMsgBuffer
,
nMsgLen
);
}
unordered_map
<
int
,
AVPACKET_HDRBUFFER
>::
iterator
stl_MapIteratorStream
=
stl_MapIterator
->
second
->
pStl_MapPushStream
->
find
(
enStreamType
);
if
(
stl_MapIteratorStream
==
stl_MapIterator
->
second
->
pStl_MapPushStream
->
end
())
{
stl_MapIterator
->
second
->
pStl_MapPushStream
->
insert
(
make_pair
(
enStreamType
,
st_HDRBuffer
));
}
else
{
stl_MapIteratorStream
->
second
=
st_HDRBuffer
;
}
st_Locker
.
unlock_shared
();
return
true
;
}
/********************************************************************
函数名称:ModuleSession_PushStream_GetHDRBuffer
函数功能:获取流ID的缓存头
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入客户端地址
参数.二:ptszMsgBuffer
In/Out:In
类型:字符指针
可空:N
意思:输出获取到的数据
参数.三:pInt_MsgLen
In/Out:In
类型:整数型指针
可空:N
意思:输出数据大小
参数.四:enStreamType
In/Out:In
类型:枚举型
可空:N
意思:获取的缓冲区类型
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
bool
CModuleSession_PushStream
::
ModuleSession_PushStream_GetHDRBuffer
(
LPCXSTR
lpszClientAddr
,
XCHAR
*
ptszMsgBuffer
,
int
*
pInt_MsgLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
)
{
Session_IsErrorOccur
=
false
;
if
(
NULL
==
lpszClientAddr
)
{
Session_IsErrorOccur
=
true
;
Session_dwErrorCode
=
ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT
;
return
false
;
}
//设备编号是否存在
st_Locker
.
lock_shared
();
unordered_map
<
xstring
,
PUSHSTREAM_PACKET
*>::
iterator
stl_MapIterator
=
stl_MapPushStream
.
find
(
lpszClientAddr
);
if
(
stl_MapIterator
==
stl_MapPushStream
.
end
())
{
Session_IsErrorOccur
=
true
;
Session_dwErrorCode
=
ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND
;
st_Locker
.
unlock_shared
();
return
false
;
}
auto
stl_MapIteratorStream
=
stl_MapIterator
->
second
->
pStl_MapPushStream
->
find
(
enStreamType
);
if
(
stl_MapIteratorStream
==
stl_MapIterator
->
second
->
pStl_MapPushStream
->
end
())
{
Session_IsErrorOccur
=
true
;
Session_dwErrorCode
=
ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND
;
st_Locker
.
unlock_shared
();
return
false
;
}
*
pInt_MsgLen
=
stl_MapIteratorStream
->
second
.
nMsgLen
;
if
(
NULL
!=
ptszMsgBuffer
)
{
memcpy
(
ptszMsgBuffer
,
stl_MapIteratorStream
->
second
.
tszMsgBuffer
,
stl_MapIteratorStream
->
second
.
nMsgLen
);
}
st_Locker
.
unlock_shared
();
return
true
;
}
/********************************************************************
函数名称:ModuleSession_PushStream_SetAVInfo
函数功能:设置推流的音视频信息
参数.一:lpszClientAddr
...
...
XEngine_Source/XEngine_ModuleSession/ModuleSession_PushStream/ModuleSession_PushStream.h
浏览文件 @
965edf28
...
...
@@ -10,23 +10,14 @@
// Purpose: 推流全局会话
// History:
*********************************************************************/
typedef
struct
{
XCHAR
tszMsgBuffer
[
2048
];
//缓存的头
int
nMsgLen
;
//缓冲头大小
}
AVPACKET_HDRBUFFER
;
typedef
struct
{
XENGINE_PROTOCOL_AVINFO
st_AVInfo
;
XCHAR
tszSMSAddr
[
MAX_PATH
];
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
;
unique_ptr
<
mutex
>
st_MSGLocker
;
unique_ptr
<
mutex
>
st_ClientLocker
;
unique_ptr
<
list
<
STREAMMEDIA_SESSIONCLIENT
>>
pStl_ListClient
;
unique_ptr
<
unordered_map
<
int
,
AVPACKET_HDRBUFFER
>>
pStl_MapPushStream
;
}
PUSHSTREAM_PACKET
;
class
CModuleSession_PushStream
...
...
@@ -38,8 +29,6 @@ public:
bool
ModuleSession_PushStream_Create
(
LPCXSTR
lpszClientAddr
,
LPCXSTR
lpszSMSAddr
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
);
bool
ModuleSession_PushStream_Destroy
(
LPCXSTR
lpszClientAddr
);
bool
ModuleSession_PushStream_GetAddrForAddr
(
LPCXSTR
lpszClientAddr
,
XCHAR
*
ptszSMSAddr
);
bool
ModuleSession_PushStream_SetHDRBuffer
(
LPCXSTR
lpszClientAddr
,
LPCXSTR
lpszMsgBuffer
,
int
nMsgLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
);
bool
ModuleSession_PushStream_GetHDRBuffer
(
LPCXSTR
lpszClientAddr
,
XCHAR
*
ptszMsgBuffer
,
int
*
pInt_MsgLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
);
bool
ModuleSession_PushStream_SetAVInfo
(
LPCXSTR
lpszClientAddr
,
XENGINE_PROTOCOL_AVINFO
*
pSt_AVInfo
);
bool
ModuleSession_PushStream_GetAVInfo
(
LPCXSTR
lpszClientAddr
,
XENGINE_PROTOCOL_AVINFO
*
pSt_AVInfo
);
bool
ModuleSession_PushStream_FindStream
(
LPCXSTR
lpszSMSAddr
,
XCHAR
*
ptszClientAddr
);
...
...
XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def
浏览文件 @
965edf28
...
...
@@ -14,8 +14,6 @@ EXPORTS
ModuleSession_PushStream_Create
ModuleSession_PushStream_Destroy
ModuleSession_PushStream_GetAddrForAddr
ModuleSession_PushStream_SetHDRBuffer
ModuleSession_PushStream_GetHDRBuffer
ModuleSession_PushStream_FindStream
ModuleSession_PushStream_ClientInsert
ModuleSession_PushStream_ClientDelete
...
...
XEngine_Source/XEngine_ModuleSession/pch.cpp
浏览文件 @
965edf28
...
...
@@ -74,14 +74,6 @@ extern "C" bool ModuleSession_PushStream_GetAddrForAddr(LPCXSTR lpszClientAddr,
{
return
m_PushStream
.
ModuleSession_PushStream_GetAddrForAddr
(
lpszClientAddr
,
ptszSMSAddr
);
}
extern
"C"
bool
ModuleSession_PushStream_SetHDRBuffer
(
LPCXSTR
lpszClientAddr
,
LPCXSTR
lpszMsgBuffer
,
int
nMsgLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
)
{
return
m_PushStream
.
ModuleSession_PushStream_SetHDRBuffer
(
lpszClientAddr
,
lpszMsgBuffer
,
nMsgLen
,
enStreamType
);
}
extern
"C"
bool
ModuleSession_PushStream_GetHDRBuffer
(
LPCXSTR
lpszClientAddr
,
XCHAR
*
ptszMsgBuffer
,
int
*
pInt_MsgLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
)
{
return
m_PushStream
.
ModuleSession_PushStream_GetHDRBuffer
(
lpszClientAddr
,
ptszMsgBuffer
,
pInt_MsgLen
,
enStreamType
);
}
extern
"C"
bool
ModuleSession_PushStream_FindStream
(
LPCXSTR
lpszSMSAddr
,
XCHAR
*
ptszClientAddr
)
{
return
m_PushStream
.
ModuleSession_PushStream_FindStream
(
lpszSMSAddr
,
ptszClientAddr
);
...
...
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientTask.cpp
浏览文件 @
965edf28
...
...
@@ -60,6 +60,7 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE
enStreamType
;
if
(
0
==
_tcsxnicmp
(
tszVluBuffer
,
"flv"
,
3
))
{
int
nTagSize
=
0
;
enStreamType
=
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_FLV
;
//拷贝数据
FLVProtocol_Packet_FrameHdr
(
tszPushAddr
,
tszRVBuffer
,
&
nRVLen
);
...
...
@@ -85,7 +86,7 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
memset
(
tszSDBuffer
,
'\0'
,
sizeof
(
tszSDBuffer
));
ModuleSession_PushStream_GetAVInfo
(
tszPushAddr
,
&
st_AVInfo
);
FLVProtocol_Packet_FrameScript
(
tszPushAddr
,
tszRVBuffer
,
&
nRVLen
,
&
st_AVInfo
);
FLVProtocol_Packet_FrameScript
(
tszPushAddr
,
tszRVBuffer
,
&
nRVLen
,
&
st_AVInfo
,
&
nTagSize
);
nSDLen
=
_xstprintf
(
tszSDBuffer
,
_X
(
"%x
\r\n
"
),
nRVLen
);
memcpy
(
tszSDBuffer
+
nSDLen
,
tszRVBuffer
,
nRVLen
);
nSDLen
+=
nRVLen
;
...
...
@@ -93,7 +94,7 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
nSDLen
+=
2
;
XEngine_Network_Send
(
lpszClientAddr
,
tszSDBuffer
,
nSDLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP
);
//发送音视频信息
FLVProtocol_Packet_FrameAVCConfigure
(
tszPushAddr
,
tszRVBuffer
,
&
nRVLen
,
&
st_AVInfo
);
FLVProtocol_Packet_FrameAVCConfigure
(
tszPushAddr
,
tszRVBuffer
,
&
nRVLen
,
&
st_AVInfo
,
&
nTagSize
);
nSDLen
=
_xstprintf
(
tszSDBuffer
,
_X
(
"%x
\r\n
"
),
nRVLen
);
memcpy
(
tszSDBuffer
+
nSDLen
,
tszRVBuffer
,
nRVLen
);
nSDLen
+=
nRVLen
;
...
...
@@ -101,7 +102,7 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
nSDLen
+=
2
;
XEngine_Network_Send
(
lpszClientAddr
,
tszSDBuffer
,
nSDLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP
);
FLVProtocol_Packet_FrameAACConfigure
(
tszPushAddr
,
tszRVBuffer
,
&
nRVLen
,
&
st_AVInfo
);
FLVProtocol_Packet_FrameAACConfigure
(
tszPushAddr
,
tszRVBuffer
,
&
nRVLen
,
&
st_AVInfo
,
&
nTagSize
);
nSDLen
=
_xstprintf
(
tszSDBuffer
,
_X
(
"%x
\r\n
"
),
nRVLen
);
memcpy
(
tszSDBuffer
+
nSDLen
,
tszRVBuffer
,
nRVLen
);
nSDLen
+=
nRVLen
;
...
...
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PushStream/PushStream_SrtTask.cpp
浏览文件 @
965edf28
...
...
@@ -27,7 +27,6 @@ bool PushStream_SrtTask_Connct(LPCXSTR lpszClientAddr, SRTSOCKET hSocket)
//创建会话
ModuleSession_PushStream_Create
(
lpszClientAddr
,
tszSMSAddr
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT
);
//need to parse ts stream
ModuleSession_PushStream_SetHDRBuffer
(
lpszClientAddr
,
NULL
,
0
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_SRT
);
XLOG_PRINT
(
xhLog
,
XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO
,
_X
(
"SRT客户端:%s,创建流成功,推流地址:%s,类型:推流端"
),
lpszClientAddr
,
tszSMSAddr
);
}
else
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录