Skip to content

Commit 3567391

Browse files
committed
added:other protocols convert to srt stream
1 parent 764d170 commit 3567391

File tree

4 files changed

+83
-81
lines changed

4 files changed

+83
-81
lines changed

XEngine_Source/XEngine_ModuleConfigure/ModuleConfig_Define.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ typedef struct tag_XEngine_ServiceConfig
7171
bool bEnable;
7272
bool bClear;
7373
}st_PullHls;
74+
struct
75+
{
76+
bool bEnable;
77+
}st_PullSrt;
7478
struct
7579
{
7680
bool bEnable;

XEngine_Source/XEngine_ModuleConfigure/ModuleConfigure_Json/ModuleConfigure_Json.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
120120
pSt_ServerConfig->st_XTime.nRTMPTimeout = st_JsonXTime["nRTMPTimeout"].asInt();
121121
pSt_ServerConfig->st_XTime.nJT1078Timeout = st_JsonXTime["nJT1078Timeout"].asInt();
122122
//时间配置
123-
if (st_JsonRoot["XPull"].empty() || (6 != st_JsonRoot["XPull"].size()))
123+
if (st_JsonRoot["XPull"].empty() || (7 != st_JsonRoot["XPull"].size()))
124124
{
125125
Config_IsErrorOccur = true;
126126
Config_dwErrorCode = ERROR_MODULE_CONFIGURE_JSON_XPULL;
@@ -133,12 +133,14 @@ bool CModuleConfigure_Json::ModuleConfigure_Json_File(LPCXSTR lpszConfigFile, XE
133133
Json::Value st_PullRtsp = st_Pull["RTSP"];
134134
Json::Value st_PullHls = st_Pull["HLS"];
135135
Json::Value st_PullWebRtc = st_Pull["RTC"];
136+
Json::Value st_PullSrt = st_Pull["SRT"];
136137

137138
pSt_ServerConfig->st_XPull.st_PullXStream.bEnable = st_PullXStream["bEnable"].asBool();
138139
pSt_ServerConfig->st_XPull.st_PullRtmp.bEnable = st_PullRtmp["bEnable"].asBool();
139140
pSt_ServerConfig->st_XPull.st_PullFlv.bEnable = st_PullFlv["bEnable"].asBool();
140141
pSt_ServerConfig->st_XPull.st_PullHls.bEnable = st_PullHls["bEnable"].asBool();
141142
pSt_ServerConfig->st_XPull.st_PullWebRtc.bEnable = st_PullWebRtc["bEnable"].asBool();
143+
pSt_ServerConfig->st_XPull.st_PullSrt.bEnable = st_PullSrt["bEnable"].asBool();
142144

143145
pSt_ServerConfig->st_XPull.st_PullRtsp.bEnable = st_PullRtsp["bEnable"].asBool();
144146
pSt_ServerConfig->st_XPull.st_PullRtsp.nVRTPPort = st_PullRtsp["nVRTPPort"].asInt();

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PushStream/PushStream_SrtTask.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,6 @@ bool PushStream_SrtTask_Handle(LPCXSTR lpszClientAddr, SRTSOCKET hSocket, LPCXST
5555
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("SRT客户端:%s,请求数据推流,错误:%lX"), lpszClientAddr, HLSProtocol_GetLastError());
5656
return false;
5757
}
58-
//SRT客户端就直接转发
59-
list<STREAMMEDIA_SESSIONCLIENT> stl_ListClient;
60-
ModuleSession_PushStream_ClientList(lpszClientAddr, &stl_ListClient);
61-
for (auto stl_ListIteratorClient = stl_ListClient.begin(); stl_ListIteratorClient != stl_ListClient.end(); ++stl_ListIteratorClient)
62-
{
63-
if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_SRT == stl_ListIteratorClient->enClientType)
64-
{
65-
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, lpszMsgBuffer, nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT);
66-
}
67-
}
68-
6958
return true;
7059
}
7160

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_AVPacket.cpp

Lines changed: 76 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,26 @@ bool XEngine_AVPacket_AVCreate(LPCXSTR lpszClientAddr)
2020
{
2121
RTMPProtocol_Packet_Insert(lpszClientAddr);
2222
}
23-
if (st_ServiceConfig.st_XPull.st_PullHls.bEnable)
23+
if (st_ServiceConfig.st_XPull.st_PullHls.bEnable || st_ServiceConfig.st_XPull.st_PullSrt.bEnable)
2424
{
2525
HLSProtocol_TSPacket_Insert(lpszClientAddr, 100);
2626

27-
XCHAR tszSMSAddr[MAX_PATH] = {};
28-
if (ModuleSession_PushStream_GetAddrForAddr(lpszClientAddr, tszSMSAddr))
27+
if (st_ServiceConfig.st_XPull.st_PullHls.bEnable)
2928
{
30-
XNETHANDLE xhSub = 0;
31-
XCHAR tszHLSFile[MAX_PATH] = {};
32-
XCHAR tszTSFile[MAX_PATH] = {};
29+
XCHAR tszSMSAddr[MAX_PATH] = {};
30+
if (ModuleSession_PushStream_GetAddrForAddr(lpszClientAddr, tszSMSAddr))
31+
{
32+
XNETHANDLE xhSub = 0;
33+
XCHAR tszHLSFile[MAX_PATH] = {};
34+
XCHAR tszTSFile[MAX_PATH] = {};
3335

34-
_xstprintf(tszHLSFile, _X("%s/%s.m3u8"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr);
35-
_xstprintf(tszTSFile, _X("%s/%s/%lld.ts"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr, time(NULL));
36+
_xstprintf(tszHLSFile, _X("%s/%s.m3u8"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr);
37+
_xstprintf(tszTSFile, _X("%s/%s/%lld.ts"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr, time(NULL));
3638

37-
HLSProtocol_M3u8Packet_AddStream(xhHLSFile, &xhSub, tszHLSFile, false);
38-
ModuleSession_PushStream_HLSInsert(lpszClientAddr, tszTSFile, xhSub);
39-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HLS端:%s,媒体文件创建成功,M3U8文件地址:%s,TS文件地址:%s"), lpszClientAddr, tszHLSFile, tszTSFile);
39+
HLSProtocol_M3u8Packet_AddStream(xhHLSFile, &xhSub, tszHLSFile, false);
40+
ModuleSession_PushStream_HLSInsert(lpszClientAddr, tszTSFile, xhSub);
41+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HLS端:%s,媒体文件创建成功,M3U8文件地址:%s,TS文件地址:%s"), lpszClientAddr, tszHLSFile, tszTSFile);
42+
}
4043
}
4144
}
4245
return true;
@@ -383,7 +386,7 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
383386
}
384387
}
385388
}
386-
if (st_ServiceConfig.st_XPull.st_PullHls.bEnable)
389+
if (st_ServiceConfig.st_XPull.st_PullHls.bEnable || st_ServiceConfig.st_XPull.st_PullSrt.bEnable)
387390
{
388391
int nListCount = 0;
389392
XBYTE** pptszMsgBuffer = NULL;
@@ -403,76 +406,80 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
403406
HLSProtocol_TSPacket_AVPacket(lpszClientAddr, &pptszMsgBuffer, &nListCount, 0x101, byAACBuffer, nMsgLen);
404407
}
405408

409+
int nPATLen = 0;
410+
int nPMTLen = 0;
411+
XBYTE tszPATBuffer[MAX_PATH] = {};
412+
XBYTE tszPMTBuffer[MAX_PATH] = {};
406413
//如果是关键帧
407414
if (1 == byFrameType)
408415
{
409-
int nPATLen = 0;
410-
int nPMTLen = 0;
411-
XBYTE tszPATBuffer[MAX_PATH] = {};
412-
XBYTE tszPMTBuffer[MAX_PATH] = {};
413-
414-
double nTimeEnd = 0;
415-
__int64u nTimeStart = 0;
416-
HLSProtocol_TSPacket_GetTime(lpszClientAddr, &nTimeEnd);
417-
ModuleSession_PushStream_HLSTimeGet(lpszClientAddr, &nTimeStart);
418-
419-
__int64u nCalValue = __int64u(nTimeEnd) - nTimeStart;
420-
if (nCalValue >= st_ServiceConfig.st_XPull.st_PullHls.nTime)
421-
{
422-
XNETHANDLE xhSubFile = 0;
423-
XCHAR tszTSFile[MAX_PATH] = {};
424-
XCHAR tszHLSFile[MAX_PATH] = {};
425-
XCHAR tszFile[MAX_PATH] = {};
426-
XCHAR tszSMSAddr[MAX_PATH] = {};
427-
428-
ModuleSession_PushStream_GetAddrForAddr(lpszClientAddr, tszSMSAddr);
429-
ModuleSession_PushStream_HLSTimeSet(lpszClientAddr, __int64u(nTimeEnd));
430-
//添加文件到M3U8中
431-
ModuleSession_PushStream_HLSGetFile(lpszClientAddr, tszHLSFile);
432-
ModuleSession_PushStream_HLSClose(lpszClientAddr, &xhSubFile);
433-
434-
BaseLib_OperatorString_GetSeparatorStr(tszHLSFile, _X("/"), tszFile, 2, false);
435-
HLSProtocol_M3u8Packet_AddFile(xhHLSFile, xhSubFile, tszFile, double(nCalValue), false);
436-
//打开新的
437-
_xstprintf(tszTSFile, _X("%s/%s/%lld.ts"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr, time(NULL));
438-
ModuleSession_PushStream_HLSInsert(lpszClientAddr, tszTSFile, xhSubFile);
439-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HLS端:%s,媒体打包成功,开始处理新的文件:%s,插入的TS文件:%s,时间:%llu"), lpszClientAddr, tszTSFile, tszFile, nCalValue);
440-
}
441416
HLSProtocol_TSPacket_PATInfo(lpszClientAddr, tszPATBuffer, &nPATLen);
442417
HLSProtocol_TSPacket_PMTInfo(lpszClientAddr, tszPMTBuffer, &nPMTLen);
443-
ModuleSession_PushStream_HLSWrite(lpszClientAddr, (LPCXSTR)tszPATBuffer, nPATLen);
444-
ModuleSession_PushStream_HLSWrite(lpszClientAddr, (LPCXSTR)tszPMTBuffer, nPMTLen);
418+
419+
if (st_ServiceConfig.st_XPull.st_PullHls.bEnable)
420+
{
421+
double nTimeEnd = 0;
422+
__int64u nTimeStart = 0;
423+
HLSProtocol_TSPacket_GetTime(lpszClientAddr, &nTimeEnd);
424+
ModuleSession_PushStream_HLSTimeGet(lpszClientAddr, &nTimeStart);
425+
426+
__int64u nCalValue = __int64u(nTimeEnd) - nTimeStart;
427+
if (nCalValue >= st_ServiceConfig.st_XPull.st_PullHls.nTime)
428+
{
429+
XNETHANDLE xhSubFile = 0;
430+
XCHAR tszTSFile[MAX_PATH] = {};
431+
XCHAR tszHLSFile[MAX_PATH] = {};
432+
XCHAR tszFile[MAX_PATH] = {};
433+
XCHAR tszSMSAddr[MAX_PATH] = {};
434+
435+
ModuleSession_PushStream_GetAddrForAddr(lpszClientAddr, tszSMSAddr);
436+
ModuleSession_PushStream_HLSTimeSet(lpszClientAddr, __int64u(nTimeEnd));
437+
//添加文件到M3U8中
438+
ModuleSession_PushStream_HLSGetFile(lpszClientAddr, tszHLSFile);
439+
ModuleSession_PushStream_HLSClose(lpszClientAddr, &xhSubFile);
440+
441+
BaseLib_OperatorString_GetSeparatorStr(tszHLSFile, _X("/"), tszFile, 2, false);
442+
HLSProtocol_M3u8Packet_AddFile(xhHLSFile, xhSubFile, tszFile, double(nCalValue), false);
443+
//打开新的
444+
_xstprintf(tszTSFile, _X("%s/%s/%lld.ts"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr, time(NULL));
445+
ModuleSession_PushStream_HLSInsert(lpszClientAddr, tszTSFile, xhSubFile);
446+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HLS端:%s,媒体打包成功,开始处理新的文件:%s,插入的TS文件:%s,时间:%llu"), lpszClientAddr, tszTSFile, tszFile, nCalValue);
447+
}
448+
ModuleSession_PushStream_HLSWrite(lpszClientAddr, (LPCXSTR)tszPATBuffer, nPATLen);
449+
ModuleSession_PushStream_HLSWrite(lpszClientAddr, (LPCXSTR)tszPMTBuffer, nPMTLen);
450+
}
445451
}
446-
for (int i = 0; i < nListCount; i++)
452+
//HLS推流
453+
if (st_ServiceConfig.st_XPull.st_PullHls.bEnable)
447454
{
448-
ModuleSession_PushStream_HLSWrite(lpszClientAddr, (LPCXSTR)pptszMsgBuffer[i], 188);
455+
for (int i = 0; i < nListCount; i++)
456+
{
457+
ModuleSession_PushStream_HLSWrite(lpszClientAddr, (LPCXSTR)pptszMsgBuffer[i], 188);
458+
}
449459
}
450-
/*
451-
list<STREAMMEDIA_SESSIONCLIENT> stl_ListClient;
452-
ModuleSession_PushStream_ClientList(lpszClientAddr, &stl_ListClient);
453-
for (auto stl_ListIteratorClient = stl_ListClient.begin(); stl_ListIteratorClient != stl_ListClient.end(); ++stl_ListIteratorClient)
460+
//SRT推流
461+
if (st_ServiceConfig.st_XPull.st_PullSrt.bEnable)
454462
{
455-
if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_TS == stl_ListIteratorClient->enClientType)
463+
list<STREAMMEDIA_SESSIONCLIENT> stl_ListClient;
464+
ModuleSession_PushStream_ClientList(lpszClientAddr, &stl_ListClient);
465+
for (auto stl_ListIteratorClient = stl_ListClient.begin(); stl_ListIteratorClient != stl_ListClient.end(); ++stl_ListIteratorClient)
456466
{
457-
//如果是关键帧
458-
if (1 == byFrameType)
467+
if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_SRT == stl_ListIteratorClient->enClientType)
459468
{
460-
int nPATLen = 0;
461-
int nPMTLen = 0;
462-
XBYTE tszPATBuffer[MAX_PATH] = {};
463-
XBYTE tszPMTBuffer[MAX_PATH] = {};
464-
465-
HLSProtocol_TSPacket_PATInfo(lpszClientAddr, tszPATBuffer, &nPATLen);
466-
HLSProtocol_TSPacket_PMTInfo(lpszClientAddr, tszPMTBuffer, &nPMTLen);
467-
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, (LPCXSTR)tszPATBuffer, 188, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_TS);
468-
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, (LPCXSTR)tszPMTBuffer, 188, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_TS);
469-
}
470-
for (int i = 0; i < nListCount; i++)
471-
{
472-
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, (LPCXSTR)pptszMsgBuffer[i], 188, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_TS);
469+
//如果是关键帧
470+
if (1 == byFrameType)
471+
{
472+
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, (LPCXSTR)tszPATBuffer, 188, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT);
473+
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, (LPCXSTR)tszPMTBuffer, 188, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT);
474+
}
475+
for (int i = 0; i < nListCount; i++)
476+
{
477+
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, (LPCXSTR)pptszMsgBuffer[i], 188, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT);
478+
}
473479
}
474480
}
475-
}*/
481+
}
482+
BaseLib_OperatorMemory_Free((XPPPMEM)&pptszMsgBuffer, nListCount);
476483
}
477484
if (st_ServiceConfig.st_XPull.st_PullRtsp.bEnable)
478485
{

0 commit comments

Comments
 (0)