Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
XEngine
XEngine StreamMedia
提交
3c304065
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 搜索 >>
提交
3c304065
编写于
8月 22, 2023
作者:
xengine-qyt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
modify:xstream http supported
上级
c420670f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
61 addition
and
68 deletion
+61
-68
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientTask.cpp
...MediaApp/StreamMedia_PullStream/PullStream_ClientTask.cpp
+21
-0
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_AVPacket.cpp
...ne_ServiceApp/XEngine_StreamMediaApp/XEngine_AVPacket.cpp
+40
-68
未找到文件。
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientTask.cpp
浏览文件 @
3c304065
...
...
@@ -115,6 +115,27 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
else
if
(
0
==
_tcsxnicmp
(
tszVluBuffer
,
"xstream"
,
7
))
{
enStreamType
=
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_XSTREAM
;
XENGINE_PROTOCOL_AVINFO
st_AVInfo
;
memset
(
&
st_AVInfo
,
'\0'
,
sizeof
(
XENGINE_PROTOCOL_AVINFO
));
memset
(
tszSDBuffer
,
'\0'
,
sizeof
(
tszSDBuffer
));
ModuleSession_PushStream_GetAVInfo
(
tszPushAddr
,
&
st_AVInfo
);
nRVLen
=
sizeof
(
XENGINE_PROTOCOL_AVINFO
);
//返回数据,为HTTP CHUNKED
nSDLen
=
_xstprintf
(
tszSDBuffer
,
_X
(
"HTTP/1.1 200 OK
\r\n
"
"Connection: Close
\r\n
"
"Content-Type: video/x-stream
\r\n
"
"Server: XEngine/%s
\r\n
"
"Transfer-Encoding: chunked
\r\n\r\n
"
"%x
\r\n
"
),
BaseLib_OperatorVer_XTypeStr
(),
nRVLen
);
memcpy
(
tszSDBuffer
+
nSDLen
,
&
st_AVInfo
,
nRVLen
);
nSDLen
+=
nRVLen
;
memcpy
(
tszSDBuffer
+
nSDLen
,
_X
(
"
\r\n
"
),
2
);
nSDLen
+=
2
;
XEngine_Network_Send
(
lpszClientAddr
,
tszSDBuffer
,
nSDLen
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP
);
ModuleSession_PullStream_Insert
(
lpszClientAddr
,
tszSMSAddr
,
tszPushAddr
,
enStreamType
);
ModuleSession_PushStream_ClientInsert
(
tszPushAddr
,
lpszClientAddr
,
enStreamType
);
...
...
XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_AVPacket.cpp
浏览文件 @
3c304065
...
...
@@ -95,76 +95,35 @@ bool XEngine_AVPacket_AVHdr(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
}
else
if
(
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTMP
==
enClientType
)
{
if
(
st_ServiceConfig
.
st_XPull
.
st_PullXStream
.
bEnable
)
//RTMP推流的所有开关选项都是一样的代码
XENGINE_PROTOCOL_AVINFO
st_AVInfo
;
ModuleSession_PushStream_GetAVInfo
(
lpszClientAddr
,
&
st_AVInfo
);
if
(
0
==
byAVType
)
{
XENGINE_PROTOCOLSTREAM
st_ProtocolStream
;
memset
(
&
st_ProtocolStream
,
'\0'
,
sizeof
(
XENGINE_PROTOCOLSTREAM
));
memcpy
(
&
st_ProtocolStream
,
lpszMsgBuffer
,
sizeof
(
XENGINE_PROTOCOLSTREAM
));
//创建会话
ModuleSession_PushStream_Create
(
lpszClientAddr
,
st_ProtocolStream
.
tszSMSAddr
,
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_XSTREAM
);
ModuleSession_PushStream_SetAVInfo
(
lpszClientAddr
,
&
st_ProtocolStream
.
st_AVInfo
);
}
if
(
st_ServiceConfig
.
st_XPull
.
st_PullFlv
.
bEnable
)
{
XENGINE_PROTOCOL_AVINFO
st_AVInfo
;
ModuleSession_PushStream_GetAVInfo
(
lpszClientAddr
,
&
st_AVInfo
);
if
(
0
==
byAVType
)
{
XENGINE_RTMPVIDEO
st_RTMPVideo
;
XENGINE_RTMPVIDEOPARAM
st_RTMPVParam
;
XENGINE_RTMPVIDEO
st_RTMPVideo
;
XENGINE_RTMPVIDEOPARAM
st_RTMPVParam
;
memset
(
&
st_RTMPVideo
,
'\0'
,
sizeof
(
XENGINE_RTMPVIDEO
));
memset
(
&
st_RTMPVParam
,
'\0'
,
sizeof
(
XENGINE_RTMPVIDEOPARAM
));
memcpy
(
&
st_RTMPVideo
,
lpszMsgBuffer
,
sizeof
(
XENGINE_RTMPVIDEO
));
memset
(
&
st_RTMPVideo
,
'\0'
,
sizeof
(
XENGINE_RTMPVIDEO
));
memset
(
&
st_RTMPVParam
,
'\0'
,
sizeof
(
XENGINE_RTMPVIDEOPARAM
));
memcpy
(
&
st_RTMPVideo
,
lpszMsgBuffer
,
sizeof
(
XENGINE_RTMPVIDEO
));
st_AVInfo
.
st_VideoInfo
.
nVLen
=
0
;
memset
(
st_AVInfo
.
st_VideoInfo
.
tszVInfo
,
'\0'
,
sizeof
(
st_AVInfo
.
st_VideoInfo
.
tszVInfo
));
st_AVInfo
.
st_VideoInfo
.
nVLen
=
0
;
memset
(
st_AVInfo
.
st_VideoInfo
.
tszVInfo
,
'\0'
,
sizeof
(
st_AVInfo
.
st_VideoInfo
.
tszVInfo
));
RTMPProtocol_Help_ParseVideo
(
&
st_RTMPVideo
,
st_AVInfo
.
st_VideoInfo
.
tszVInfo
,
&
st_AVInfo
.
st_VideoInfo
.
nVLen
,
lpszMsgBuffer
+
sizeof
(
XENGINE_RTMPVIDEO
),
nMsgLen
-
sizeof
(
XENGINE_RTMPVIDEO
),
&
st_RTMPVParam
);
ModuleSession_PushStream_SetAVInfo
(
lpszClientAddr
,
&
st_AVInfo
);
}
else
if
(
RTMPProtocol_Help_ParseVideo
(
&
st_RTMPVideo
,
st_AVInfo
.
st_VideoInfo
.
tszVInfo
,
&
st_AVInfo
.
st_VideoInfo
.
nVLen
,
lpszMsgBuffer
+
sizeof
(
XENGINE_RTMPVIDEO
),
nMsgLen
-
sizeof
(
XENGINE_RTMPVIDEO
),
&
st_RTMPVParam
))
{
//音频参数信息是否存在
if
(
0
==
st_AVInfo
.
st_AudioInfo
.
nALen
)
{
st_AVInfo
.
st_AudioInfo
.
nALen
=
7
;
AVHelp_Packet_AACHdr
((
XBYTE
*
)
st_AVInfo
.
st_AudioInfo
.
tszAInfo
,
st_AVInfo
.
st_AudioInfo
.
nSampleRate
,
st_AVInfo
.
st_AudioInfo
.
nChannel
,
0
);
ModuleSession_PushStream_SetAVInfo
(
lpszClientAddr
,
&
st_AVInfo
);
}
ModuleSession_PushStream_SetAVInfo
(
lpszClientAddr
,
&
st_AVInfo
);
}
}
if
(
st_ServiceConfig
.
st_XPull
.
st_PullRtmp
.
bEnable
)
else
{
//推流端类型是rtmp
XENGINE_PROTOCOL_AVINFO
st_AVInfo
;
ModuleSession_PushStream_GetAVInfo
(
lpszClientAddr
,
&
st_AVInfo
);
if
(
0
==
byAVType
)
//音频参数信息是否存在
if
(
0
==
st_AVInfo
.
st_AudioInfo
.
nALen
)
{
XENGINE_RTMPVIDEO
st_RTMPVideo
;
XENGINE_RTMPVIDEOPARAM
st_RTMPVParam
;
memset
(
&
st_RTMPVideo
,
'\0'
,
sizeof
(
XENGINE_RTMPVIDEO
));
memset
(
&
st_RTMPVParam
,
'\0'
,
sizeof
(
XENGINE_RTMPVIDEOPARAM
));
memcpy
(
&
st_RTMPVideo
,
lpszMsgBuffer
,
sizeof
(
XENGINE_RTMPVIDEO
));
st_AVInfo
.
st_VideoInfo
.
nVLen
=
0
;
memset
(
st_AVInfo
.
st_VideoInfo
.
tszVInfo
,
'\0'
,
sizeof
(
st_AVInfo
.
st_VideoInfo
.
tszVInfo
));
RTMPProtocol_Help_ParseVideo
(
&
st_RTMPVideo
,
st_AVInfo
.
st_VideoInfo
.
tszVInfo
,
&
st_AVInfo
.
st_VideoInfo
.
nVLen
,
lpszMsgBuffer
+
sizeof
(
XENGINE_RTMPVIDEO
),
nMsgLen
-
sizeof
(
XENGINE_RTMPVIDEO
),
&
st_RTMPVParam
);
st_AVInfo
.
st_AudioInfo
.
nALen
=
7
;
AVHelp_Packet_AACHdr
((
XBYTE
*
)
st_AVInfo
.
st_AudioInfo
.
tszAInfo
,
st_AVInfo
.
st_AudioInfo
.
nSampleRate
,
st_AVInfo
.
st_AudioInfo
.
nChannel
,
0
);
ModuleSession_PushStream_SetAVInfo
(
lpszClientAddr
,
&
st_AVInfo
);
}
else
{
//音频参数信息是否存在
if
(
0
==
st_AVInfo
.
st_AudioInfo
.
nALen
)
{
st_AVInfo
.
st_AudioInfo
.
nALen
=
7
;
AVHelp_Packet_AACHdr
((
XBYTE
*
)
st_AVInfo
.
st_AudioInfo
.
tszAInfo
,
st_AVInfo
.
st_AudioInfo
.
nSampleRate
,
st_AVInfo
.
st_AudioInfo
.
nChannel
,
0
);
ModuleSession_PushStream_SetAVInfo
(
lpszClientAddr
,
&
st_AVInfo
);
}
}
}
}
return
true
;
...
...
@@ -254,24 +213,37 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
if
(
st_ServiceConfig
.
st_XPull
.
st_PullXStream
.
bEnable
)
{
int
nPos
=
0
;
XENGINE_RTMPVIDEO
st_RTMPVideo
;
XENGINE_PROTOCOL_AVDATA
st_ProtocolAVData
;
memset
(
&
st_RTMPVideo
,
'\0'
,
sizeof
(
XENGINE_RTMPVIDEO
));
memset
(
&
st_ProtocolAVData
,
'\0'
,
sizeof
(
XENGINE_PROTOCOL_AVDATA
));
memcpy
(
&
st_RTMPVideo
,
lpszMsgBuffer
,
sizeof
(
XENGINE_RTMPVIDEO
));
st_ProtocolAVData
.
byAVType
=
byAVType
;
st_ProtocolAVData
.
nTimeStamp
=
nTimeStamp
;
st_ProtocolAVData
.
byFrameType
=
st_RTMPVideo
.
byFrameType
;
memcpy
(
ptszRVBuffer
,
&
st_ProtocolAVData
,
sizeof
(
XENGINE_PROTOCOL_AVDATA
));
nPos
+=
sizeof
(
XENGINE_PROTOCOL_AVDATA
);
if
(
0
==
byAVType
)
{
XENGINE_RTMPVIDEO
st_RTMPVideo
;
memset
(
&
st_RTMPVideo
,
'\0'
,
sizeof
(
XENGINE_RTMPVIDEO
));
memcpy
(
&
st_RTMPVideo
,
lpszMsgBuffer
,
sizeof
(
XENGINE_RTMPVIDEO
));
st_ProtocolAVData
.
byFrameType
=
st_RTMPVideo
.
byFrameType
;
RTMPProtocol_Help_ParseVideo
(
&
st_RTMPVideo
,
ptszRVBuffer
+
nPos
,
pInt_RVLen
,
lpszMsgBuffer
+
sizeof
(
XENGINE_RTMPVIDEO
),
nMsgLen
-
sizeof
(
XENGINE_RTMPVIDEO
));
*
pInt_RVLen
+=
nPos
;
RTMPProtocol_Help_ParseVideo
(
&
st_RTMPVideo
,
ptszRVBuffer
+
nPos
,
pInt_RVLen
,
lpszMsgBuffer
+
sizeof
(
XENGINE_RTMPVIDEO
),
nMsgLen
-
sizeof
(
XENGINE_RTMPVIDEO
));
*
pInt_RVLen
+=
nPos
;
}
else
{
XENGINE_RTMPAUDIO
st_RTMPAudio
;
memset
(
&
st_RTMPAudio
,
'\0'
,
sizeof
(
XENGINE_RTMPAUDIO
));
memcpy
(
&
st_RTMPAudio
,
lpszMsgBuffer
,
sizeof
(
XENGINE_RTMPAUDIO
));
st_ProtocolAVData
.
byFrameType
=
st_RTMPAudio
.
byPKTType
;
RTMPProtocol_Help_ParseAudio
(
&
st_RTMPAudio
,
ptszRVBuffer
+
nPos
,
pInt_RVLen
,
lpszMsgBuffer
+
sizeof
(
XENGINE_RTMPAUDIO
),
nMsgLen
-
sizeof
(
XENGINE_RTMPAUDIO
));
*
pInt_RVLen
+=
nPos
;
}
memcpy
(
ptszRVBuffer
,
&
st_ProtocolAVData
,
sizeof
(
XENGINE_PROTOCOL_AVDATA
));
*
pInt_SDLen
=
_xstprintf
(
ptszSDBuffer
,
_X
(
"%x
\r\n
"
),
*
pInt_RVLen
);
memcpy
(
ptszSDBuffer
+
*
pInt_SDLen
,
ptszRVBuffer
,
*
pInt_RVLen
);
*
pInt_SDLen
+=
*
pInt_RVLen
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录