提交 08dbea36 编写于 作者: xengine-qyt's avatar xengine-qyt

fixed:flv.js does not play because tagsize is not right

上级 965edf28
......@@ -26,6 +26,7 @@ typedef struct
{
XCHAR tszSMSAddr[MAX_PATH];
XCHAR tszPushAddr[MAX_PATH];
int nFLVTag;
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType;
}STREAMMEDIA_PULLLISTINFO;
......@@ -169,6 +170,9 @@ extern "C" bool ModuleSession_PullStream_PublishDelete(LPCXSTR lpszClientAddr);
备注:
*********************************************************************/
extern "C" bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount);
extern "C" bool ModuleSession_PullStream_FLVTagSet(LPCXSTR lpszClientAddr, int nTagSize);
extern "C" bool ModuleSession_PullStream_FLVTagGet(LPCXSTR lpszClientAddr, int* pInt_TagSize);
/*********************************************************************************
* 推流端导出会话模块 *
*********************************************************************************/
......
......@@ -300,4 +300,52 @@ bool CModuleSession_PullStream::ModuleSession_PullStream_GetList(STREAMMEDIA_PUL
}
st_Locker.unlock_shared();
return true;
}
bool CModuleSession_PullStream::ModuleSession_PullStream_FLVTagSet(LPCXSTR lpszClientAddr, int nTagSize)
{
Session_IsErrorOccur = false;
if (NULL == lpszClientAddr)
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT;
return false;
}
st_Locker.lock_shared();
//查找最小
auto stl_MapIterator = stl_MapClient.find(lpszClientAddr);
if (stl_MapIterator == stl_MapClient.end())
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
st_Locker.unlock_shared();
return false;
}
stl_MapIterator->second->nFLVTag = nTagSize;
st_Locker.unlock_shared();
return true;
}
bool CModuleSession_PullStream::ModuleSession_PullStream_FLVTagGet(LPCXSTR lpszClientAddr, int* pInt_TagSize)
{
Session_IsErrorOccur = false;
if (NULL == lpszClientAddr)
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT;
return false;
}
st_Locker.lock_shared();
//查找最小
auto stl_MapIterator = stl_MapClient.find(lpszClientAddr);
if (stl_MapIterator == stl_MapClient.end())
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
st_Locker.unlock_shared();
return false;
}
*pInt_TagSize = stl_MapIterator->second->nFLVTag;
st_Locker.unlock_shared();
return true;
}
\ No newline at end of file
......@@ -23,6 +23,9 @@ public:
bool ModuleSession_PullStream_Delete(LPCXSTR lpszClientAddr);
bool ModuleSession_PullStream_PublishDelete(LPCXSTR lpszClientAddr);
bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO*** pppSt_PullList, int* pInt_ListCount);
public:
bool ModuleSession_PullStream_FLVTagSet(LPCXSTR lpszClientAddr, int nTagSize);
bool ModuleSession_PullStream_FLVTagGet(LPCXSTR lpszClientAddr, int* pInt_TagSize);
private:
shared_mutex st_Locker;
private:
......
......@@ -10,6 +10,8 @@ EXPORTS
ModuleSession_PullStream_Delete
ModuleSession_PullStream_PublishDelete
ModuleSession_PullStream_GetList
ModuleSession_PullStream_FLVTagSet
ModuleSession_PullStream_FLVTagGet
ModuleSession_PushStream_Create
ModuleSession_PushStream_Destroy
......
......@@ -59,6 +59,14 @@ extern "C" bool ModuleSession_PullStream_GetList(STREAMMEDIA_PULLLISTINFO * **pp
{
return m_PullStream.ModuleSession_PullStream_GetList(pppSt_PullList, pInt_ListCount);
}
extern "C" bool ModuleSession_PullStream_FLVTagSet(LPCXSTR lpszClientAddr, int nTagSize)
{
return m_PullStream.ModuleSession_PullStream_FLVTagSet(lpszClientAddr, nTagSize);
}
extern "C" bool ModuleSession_PullStream_FLVTagGet(LPCXSTR lpszClientAddr, int* pInt_TagSize)
{
return m_PullStream.ModuleSession_PullStream_FLVTagGet(lpszClientAddr, pInt_TagSize);
}
/*********************************************************************************
* 推流导出会话模块 *
*********************************************************************************/
......
......@@ -109,6 +109,10 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
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);
ModuleSession_PullStream_FLVTagSet(lpszClientAddr, nTagSize);
}
else if (0 == _tcsxnicmp(tszVluBuffer, "xstream", 7))
{
......@@ -122,8 +126,6 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("拉流端:%s,请求拉流的数据类型不支持:%s,错误:%lX"), lpszClientAddr, tszVluBuffer, ModuleSession_GetLastError());
return false;
}
ModuleSession_PullStream_Insert(lpszClientAddr, tszSMSAddr, tszPushAddr, enStreamType);
ModuleSession_PushStream_ClientInsert(tszPushAddr, lpszClientAddr, enStreamType);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("拉流端:%s,请求拉流数据成功:%s"), lpszClientAddr, tszVluBuffer);
}
else if (0 == _tcsxnicmp(lpszStreamStop, tszVluBuffer, _tcsxlen(lpszStreamStop)))
......
......@@ -190,20 +190,6 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
}
if (st_ServiceConfig.st_XPull.st_PullFlv.bEnable)
{
if (0 == byAVType)
{
FLVProtocol_Packet_FrameVideo(lpszClientAddr, ptszRVBuffer, pInt_RVLen, lpszMsgBuffer + sizeof(XENGINE_PROTOCOL_AVDATA), nMsgLen - sizeof(XENGINE_PROTOCOL_AVDATA), nTimeStamp);
}
else
{
FLVProtocol_Packet_FrameAudio(lpszClientAddr, ptszRVBuffer, pInt_RVLen, lpszMsgBuffer + sizeof(XENGINE_PROTOCOL_AVDATA), nMsgLen - sizeof(XENGINE_PROTOCOL_AVDATA), nTimeStamp);
}
*pInt_SDLen = _xstprintf(ptszSDBuffer, _X("%x\r\n"), *pInt_RVLen);
memcpy(ptszSDBuffer + *pInt_SDLen, ptszRVBuffer, *pInt_RVLen);
*pInt_SDLen += *pInt_RVLen;
memcpy(ptszSDBuffer + *pInt_SDLen, _X("\r\n"), 2);
*pInt_SDLen += 2;
//是否有客户端需要发送XStream流
list<STREAMMEDIA_SESSIONCLIENT> stl_ListClient;
ModuleSession_PushStream_ClientList(lpszClientAddr, &stl_ListClient);
......@@ -211,7 +197,26 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
{
if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_FLV == stl_ListIteratorClient->enClientType)
{
int nTagSize = 0;
ModuleSession_PullStream_FLVTagGet(stl_ListIteratorClient->tszClientID, &nTagSize);
if (0 == byAVType)
{
FLVProtocol_Packet_FrameVideo(lpszClientAddr, ptszRVBuffer, pInt_RVLen, lpszMsgBuffer + sizeof(XENGINE_PROTOCOL_AVDATA), nMsgLen - sizeof(XENGINE_PROTOCOL_AVDATA), nTimeStamp);
}
else
{
FLVProtocol_Packet_FrameAudio(lpszClientAddr, ptszRVBuffer, pInt_RVLen, lpszMsgBuffer + sizeof(XENGINE_PROTOCOL_AVDATA), nMsgLen - sizeof(XENGINE_PROTOCOL_AVDATA), nTimeStamp);
}
*pInt_SDLen = _xstprintf(ptszSDBuffer, _X("%x\r\n"), *pInt_RVLen);
memcpy(ptszSDBuffer + *pInt_SDLen, ptszRVBuffer, *pInt_RVLen);
*pInt_SDLen += *pInt_RVLen;
memcpy(ptszSDBuffer + *pInt_SDLen, _X("\r\n"), 2);
*pInt_SDLen += 2;
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, ptszSDBuffer, *pInt_SDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
ModuleSession_PullStream_FLVTagSet(stl_ListIteratorClient->tszClientID, nTagSize);
break;
}
}
......@@ -282,26 +287,6 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
}
if (st_ServiceConfig.st_XPull.st_PullFlv.bEnable)
{
if (0 == byAVType)
{
FLVProtocol_Packet_FrameCustom(lpszClientAddr, ptszRVBuffer, pInt_RVLen, lpszMsgBuffer, nMsgLen, -1, 9);
*pInt_SDLen = _xstprintf(ptszSDBuffer, _X("%x\r\n"), *pInt_RVLen);
memcpy(ptszSDBuffer + *pInt_SDLen, ptszRVBuffer, *pInt_RVLen);
*pInt_SDLen += *pInt_RVLen;
memcpy(ptszSDBuffer + *pInt_SDLen, _X("\r\n"), 2);
*pInt_SDLen += 2;
}
else
{
FLVProtocol_Packet_FrameCustom(lpszClientAddr, ptszRVBuffer, pInt_RVLen, lpszMsgBuffer, nMsgLen, -1, 8);
*pInt_SDLen = _xstprintf(ptszSDBuffer, _X("%x\r\n"), *pInt_RVLen);
memcpy(ptszSDBuffer + *pInt_SDLen, ptszRVBuffer, *pInt_RVLen);
*pInt_SDLen += *pInt_RVLen;
memcpy(ptszSDBuffer + *pInt_SDLen, _X("\r\n"), 2);
*pInt_SDLen += 2;
}
//是否有客户端需要发送FLV流
list<STREAMMEDIA_SESSIONCLIENT> stl_ListClient;
ModuleSession_PushStream_ClientList(lpszClientAddr, &stl_ListClient);
......@@ -309,7 +294,31 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
{
if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_FLV == stl_ListIteratorClient->enClientType)
{
int nTagSize = 0;
ModuleSession_PullStream_FLVTagGet(stl_ListIteratorClient->tszClientID, &nTagSize);
if (0 == byAVType)
{
FLVProtocol_Packet_FrameCustom(lpszClientAddr, ptszRVBuffer, pInt_RVLen, lpszMsgBuffer, nMsgLen, -1, 9, &nTagSize);
*pInt_SDLen = _xstprintf(ptszSDBuffer, _X("%x\r\n"), *pInt_RVLen);
memcpy(ptszSDBuffer + *pInt_SDLen, ptszRVBuffer, *pInt_RVLen);
*pInt_SDLen += *pInt_RVLen;
memcpy(ptszSDBuffer + *pInt_SDLen, _X("\r\n"), 2);
*pInt_SDLen += 2;
}
else
{
FLVProtocol_Packet_FrameCustom(lpszClientAddr, ptszRVBuffer, pInt_RVLen, lpszMsgBuffer, nMsgLen, -1, 8, &nTagSize);
*pInt_SDLen = _xstprintf(ptszSDBuffer, _X("%x\r\n"), *pInt_RVLen);
memcpy(ptszSDBuffer + *pInt_SDLen, ptszRVBuffer, *pInt_RVLen);
*pInt_SDLen += *pInt_RVLen;
memcpy(ptszSDBuffer + *pInt_SDLen, _X("\r\n"), 2);
*pInt_SDLen += 2;
}
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, ptszSDBuffer, *pInt_SDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
ModuleSession_PullStream_FLVTagSet(stl_ListIteratorClient->tszClientID, nTagSize);
break;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册