Skip to content

Commit 612d489

Browse files
committed
fixed:ts file path is incorrent
fixed:m3u8 first ts file is not exist
1 parent a0c40f0 commit 612d489

File tree

6 files changed

+84
-15
lines changed

6 files changed

+84
-15
lines changed

XEngine_Source/XEngine_ModuleSession/ModuleSession_Define.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,25 @@ extern "C" bool ModuleSession_PushStream_GetInfo(STREAMMEDIA_PUBLISHINFO*** pppS
396396
*********************************************************************/
397397
extern "C" bool ModuleSession_PushStream_HLSInsert(LPCXSTR lpszClientAddr, LPCXSTR lpszTSFile, XNETHANDLE xhToken);
398398
/********************************************************************
399+
函数名称:ModuleSession_PushStream_HLSInsert
400+
函数功能:插入创建一个HLS文件
401+
参数.一:lpszClientAddr
402+
In/Out:In
403+
类型:常量字符指针
404+
可空:N
405+
意思:输入客户端地址
406+
参数.二:ptszFileName
407+
In/Out:Out
408+
类型:字符指针
409+
可空:N
410+
意思:输出文件保存路径
411+
返回值
412+
类型:逻辑型
413+
意思:是否成功
414+
备注:
415+
*********************************************************************/
416+
extern "C" bool ModuleSession_PushStream_HLSGetFile(LPCXSTR lpszClientAddr, XCHAR* ptszFileName);
417+
/********************************************************************
399418
函数名称:ModuleSession_PushStream_HLSWrite
400419
函数功能:HLS写入数据
401420
参数.一:lpszClientAddr

XEngine_Source/XEngine_ModuleSession/ModuleSession_PushStream/ModuleSession_PushStream.cpp

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,7 @@ bool CModuleSession_PushStream::ModuleSession_PushStream_HLSInsert(LPCXSTR lpszC
553553
BaseLib_OperatorString_GetFileAndPath(lpszTSFile, tszFilePath, tszFileName);
554554
SystemApi_File_CreateMutilFolder(tszFilePath);
555555

556+
_tcsxcpy(stl_MapIterator->second->st_HLSFile.tszFileName, lpszTSFile);
556557
stl_MapIterator->second->st_HLSFile.xhToken = xhToken;
557558
stl_MapIterator->second->st_HLSFile.pSt_File = _xtfopen(lpszTSFile, _X("wb"));
558559
if (NULL == stl_MapIterator->second->st_HLSFile.pSt_File)
@@ -566,6 +567,48 @@ bool CModuleSession_PushStream::ModuleSession_PushStream_HLSInsert(LPCXSTR lpszC
566567
return true;
567568
}
568569
/********************************************************************
570+
函数名称:ModuleSession_PushStream_HLSInsert
571+
函数功能:插入创建一个HLS文件
572+
参数.一:lpszClientAddr
573+
In/Out:In
574+
类型:常量字符指针
575+
可空:N
576+
意思:输入客户端地址
577+
参数.二:ptszFileName
578+
In/Out:Out
579+
类型:字符指针
580+
可空:N
581+
意思:输出文件保存路径
582+
返回值
583+
类型:逻辑型
584+
意思:是否成功
585+
备注:
586+
*********************************************************************/
587+
bool CModuleSession_PushStream::ModuleSession_PushStream_HLSGetFile(LPCXSTR lpszClientAddr, XCHAR* ptszFileName)
588+
{
589+
Session_IsErrorOccur = false;
590+
591+
if (NULL == lpszClientAddr)
592+
{
593+
Session_IsErrorOccur = true;
594+
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT;
595+
return false;
596+
}
597+
//是否存在
598+
st_Locker.lock_shared();
599+
unordered_map<xstring, PUSHSTREAM_PACKET*>::iterator stl_MapIterator = stl_MapPushStream.find(lpszClientAddr);
600+
if (stl_MapIterator == stl_MapPushStream.end())
601+
{
602+
Session_IsErrorOccur = true;
603+
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
604+
st_Locker.unlock_shared();
605+
return false;
606+
}
607+
_tcsxcpy(ptszFileName, stl_MapIterator->second->st_HLSFile.tszFileName);
608+
st_Locker.unlock_shared();
609+
return true;
610+
}
611+
/********************************************************************
569612
函数名称:ModuleSession_PushStream_HLSWrite
570613
函数功能:HLS写入数据
571614
参数.一:lpszClientAddr
@@ -661,7 +704,7 @@ bool CModuleSession_PushStream::ModuleSession_PushStream_HLSClose(LPCXSTR lpszCl
661704
{
662705
fclose(stl_MapIterator->second->st_HLSFile.pSt_File);
663706
}
664-
707+
memset(stl_MapIterator->second->st_HLSFile.tszFileName, '\0', MAX_PATH);
665708
st_Locker.unlock_shared();
666709
return true;
667710
}
@@ -746,6 +789,7 @@ bool CModuleSession_PushStream::ModuleSession_PushStream_HLSTimeGet(LPCXSTR lpsz
746789
st_Locker.unlock_shared();
747790
return false;
748791
}
792+
749793
*pInt_Time = stl_MapIterator->second->st_HLSFile.nTime;
750794
st_Locker.unlock_shared();
751795
return true;

XEngine_Source/XEngine_ModuleSession/ModuleSession_PushStream/ModuleSession_PushStream.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ typedef struct
1414
{
1515
struct
1616
{
17+
XCHAR tszFileName[MAX_PATH];
1718
XNETHANDLE xhToken;
1819
__int64u nTime;
1920
FILE* pSt_File;
@@ -45,6 +46,7 @@ class CModuleSession_PushStream
4546
bool ModuleSession_PushStream_ClientList(LPCXSTR lpszClientAddr, list<STREAMMEDIA_SESSIONCLIENT> *pStl_ListClient);
4647
public:
4748
bool ModuleSession_PushStream_HLSInsert(LPCXSTR lpszClientAddr, LPCXSTR lpszTSFile, XNETHANDLE xhToken);
49+
bool ModuleSession_PushStream_HLSGetFile(LPCXSTR lpszClientAddr, XCHAR* ptszFileName);
4850
bool ModuleSession_PushStream_HLSWrite(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen);
4951
bool ModuleSession_PushStream_HLSClose(LPCXSTR lpszClientAddr, XNETHANDLE* pxhToken);
5052
bool ModuleSession_PushStream_HLSTimeSet(LPCXSTR lpszClientAddr, __int64u nTime);

XEngine_Source/XEngine_ModuleSession/XEngine_ModuleSession.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ EXPORTS
2424
ModuleSession_PushStream_ClientDelete
2525
ModuleSession_PushStream_ClientList
2626
ModuleSession_PushStream_HLSInsert
27+
ModuleSession_PushStream_HLSGetFile
2728
ModuleSession_PushStream_HLSWrite
2829
ModuleSession_PushStream_HLSClose
2930
ModuleSession_PushStream_HLSTimeSet

XEngine_Source/XEngine_ModuleSession/pch.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ extern "C" bool ModuleSession_PushStream_HLSInsert(LPCXSTR lpszClientAddr, LPCXS
114114
{
115115
return m_PushStream.ModuleSession_PushStream_HLSInsert(lpszClientAddr, lpszTSFile, xhToken);
116116
}
117+
extern "C" bool ModuleSession_PushStream_HLSGetFile(LPCXSTR lpszClientAddr, XCHAR * ptszFileName)
118+
{
119+
return m_PushStream.ModuleSession_PushStream_HLSGetFile(lpszClientAddr, ptszFileName);
120+
}
117121
extern "C" bool ModuleSession_PushStream_HLSWrite(LPCXSTR lpszClientAddr, LPCXSTR lpszMSGBuffer, int nMSGLen)
118122
{
119123
return m_PushStream.ModuleSession_PushStream_HLSWrite(lpszClientAddr, lpszMSGBuffer, nMSGLen);

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_AVPacket.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,13 @@ bool XEngine_AVPacket_AVCreate(LPCXSTR lpszClientAddr)
3030
XNETHANDLE xhSub = 0;
3131
XCHAR tszHLSFile[MAX_PATH] = {};
3232
XCHAR tszTSFile[MAX_PATH] = {};
33-
XCHAR tszFile[MAX_PATH] = {};
34-
XCHAR tszKeyStr[MAX_PATH] = {};
35-
XCHAR tszKeyVlu[MAX_PATH] = {};
36-
37-
BaseLib_OperatorString_GetKeyValue(tszSMSAddr, "/", tszKeyStr, tszKeyVlu);
3833

3934
_xstprintf(tszHLSFile, _X("%s/%s.m3u8"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr);
40-
_xstprintf(tszTSFile, _X("./%s/%lld.ts"), tszKeyVlu, time(NULL));
41-
_xstprintf(tszFile, _X("%s/%s/%lld.ts"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr, time(NULL));
35+
_xstprintf(tszTSFile, _X("%s/%s/%lld.ts"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr, time(NULL));
4236

4337
HLSProtocol_M3u8File_AddStream(xhHLSFile, &xhSub, tszHLSFile, false);
44-
HLSProtocol_M3u8File_AddFile(xhHLSFile, xhSub, tszTSFile, st_ServiceConfig.st_XPull.st_PullHls.nTime, false);
45-
ModuleSession_PushStream_HLSInsert(lpszClientAddr, tszFile, xhSub);
46-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HLS端:%s,媒体文件创建成功,M3U8文件地址:%s,TS文件地址:%s,数据流地址:%s"), lpszClientAddr, tszHLSFile, tszTSFile, tszFile);
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);
4740
}
4841
}
4942
return true;
@@ -428,16 +421,22 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
428421
{
429422
XNETHANDLE xhSubFile = 0;
430423
XCHAR tszTSFile[MAX_PATH] = {};
424+
XCHAR tszHLSFile[MAX_PATH] = {};
425+
XCHAR tszFile[MAX_PATH] = {};
431426
XCHAR tszSMSAddr[MAX_PATH] = {};
427+
432428
ModuleSession_PushStream_GetAddrForAddr(lpszClientAddr, tszSMSAddr);
433429
ModuleSession_PushStream_HLSTimeSet(lpszClientAddr, __int64u(nTimeEnd));
434-
//先关闭
430+
//添加文件到M3U8中
431+
ModuleSession_PushStream_HLSGetFile(lpszClientAddr, tszHLSFile);
435432
ModuleSession_PushStream_HLSClose(lpszClientAddr, &xhSubFile);
436-
//在打开
433+
434+
BaseLib_OperatorString_GetSeparatorStr(tszHLSFile, _X("/"), tszFile, 2, false);
435+
HLSProtocol_M3u8File_AddFile(xhHLSFile, xhSubFile, tszFile, double(nCalValue), false);
436+
//打开新的
437437
_xstprintf(tszTSFile, _X("%s/%s/%lld.ts"), st_ServiceConfig.st_XPull.st_PullHls.tszHLSPath, tszSMSAddr, time(NULL));
438-
HLSProtocol_M3u8File_AddFile(xhHLSFile, xhSubFile, tszTSFile, double(nCalValue), false);
439438
ModuleSession_PushStream_HLSInsert(lpszClientAddr, tszTSFile, xhSubFile);
440-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HLS端:%s,媒体打包成功,开始处理新的文件:%s,时间:%llu"), lpszClientAddr, tszTSFile, nCalValue);
439+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HLS端:%s,媒体打包成功,开始处理新的文件:%s,插入的TS文件:%s,时间:%llu"), lpszClientAddr, tszTSFile, tszFile, nCalValue);
441440
}
442441
HLSProtocol_TSPacket_PATInfo(lpszClientAddr, tszPATBuffer, &nPATLen);
443442
HLSProtocol_TSPacket_PMTInfo(lpszClientAddr, tszPMTBuffer, &nPMTLen);

0 commit comments

Comments
 (0)