@@ -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