提交 965edf28 编写于 作者: xengine-qyt's avatar xengine-qyt

delete:get and set av buffer for push of session module

上级 038564eb
......@@ -230,64 +230,6 @@ extern "C" bool ModuleSession_PushStream_Destroy(LPCXSTR lpszClientAddr);
*********************************************************************/
extern "C" bool ModuleSession_PushStream_GetAddrForAddr(LPCXSTR lpszClientAddr, XCHAR * ptszSMSAddr);
/********************************************************************
函数名称:ModuleSession_PushStream_SetHDRBuffer
函数功能:设置流ID的缓存头
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入客户端地址
参数.二:lpszMsgBuffer
In/Out:In
类型:常量字符指针
可空:N
意思:要缓存的数据
参数.三:nMsgLen
In/Out:In
类型:整数型
可空:N
意思:输入缓存大小
参数.四:enStreamType
In/Out:In
类型:枚举型
可空:N
意思:设置的缓冲区类型
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
extern "C" bool ModuleSession_PushStream_SetHDRBuffer(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType);
/********************************************************************
函数名称:ModuleSession_PushStream_GetHDRBuffer
函数功能:获取流ID的缓存头
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入客户端地址
参数.二:ptszMsgBuffer
In/Out:In
类型:字符指针
可空:N
意思:输出获取到的数据
参数.三:pInt_MsgLen
In/Out:In
类型:整数型指针
可空:N
意思:输出数据大小
参数.四:enStreamType
In/Out:In
类型:枚举型
可空:N
意思:获取的缓冲区类型
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
extern "C" bool ModuleSession_PushStream_GetHDRBuffer(LPCXSTR lpszClientAddr, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType);
/********************************************************************
函数名称:ModuleSession_PushStream_FindStream
函数功能:查找流对应地址
参数.一:lpszSMSAddr
......
......@@ -22,4 +22,5 @@
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTCHANNEL 0xE0007 //没有通道
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTLIVE 0xE0008 //没有找到属性
#define ERROR_STREAMMEDIA_MODULE_SESSION_EMPTY 0xE0009 //空的列表
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND 0xE000A //没有找到
\ No newline at end of file
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND 0xE000A //没有找到
#define ERROR_STREAMMEDIA_MODULE_SESSION_NOTSUPPORT 0xE000B //不支持的类型
\ No newline at end of file
......@@ -64,11 +64,9 @@ bool CModuleSession_PushStream::ModuleSession_PushStream_Create(LPCXSTR lpszClie
memset(pSt_Packet, '\0', sizeof(PUSHSTREAM_PACKET));
pSt_Packet->st_ClientLocker = make_unique<mutex>();
pSt_Packet->st_MSGLocker = make_unique<mutex>();
pSt_Packet->pStl_ListClient = make_unique<list<STREAMMEDIA_SESSIONCLIENT>>();
pSt_Packet->pStl_MapPushStream = make_unique<unordered_map<int, AVPACKET_HDRBUFFER>>();
if ((NULL == pSt_Packet->pStl_MapPushStream) || (NULL == pSt_Packet->pStl_ListClient))
if ((NULL == pSt_Packet->pStl_ListClient))
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_MALLOC;
......@@ -177,156 +175,6 @@ bool CModuleSession_PushStream::ModuleSession_PushStream_GetAddrForAddr(LPCXSTR
return true;
}
/********************************************************************
函数名称:ModuleSession_PushStream_SetHDRBuffer
函数功能:设置流ID的缓存头
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入客户端地址
参数.二:lpszMsgBuffer
In/Out:In
类型:常量字符指针
可空:N
意思:要缓存的数据
参数.三:nMsgLen
In/Out:In
类型:整数型
可空:N
意思:输入缓存大小
参数.四:enStreamType
In/Out:In
类型:枚举型
可空:N
意思:设置的缓冲区类型
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
bool CModuleSession_PushStream::ModuleSession_PushStream_SetHDRBuffer(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType)
{
Session_IsErrorOccur = false;
if (NULL == lpszClientAddr)
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT;
return false;
}
//设备编号是否存在
st_Locker.lock_shared();
unordered_map<xstring, PUSHSTREAM_PACKET*>::iterator stl_MapIterator = stl_MapPushStream.find(lpszClientAddr);
if (stl_MapIterator == stl_MapPushStream.end())
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
st_Locker.unlock_shared();
return false;
}
AVPACKET_HDRBUFFER st_HDRBuffer;
memset(&st_HDRBuffer, '\0', sizeof(AVPACKET_HDRBUFFER));
if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_FLV == enStreamType)
{
//准备头
st_HDRBuffer.nMsgLen = _xstprintf(st_HDRBuffer.tszMsgBuffer, _X("HTTP/1.1 200 OK\r\n"
"Connection: Close\r\n"
"Content-Type: video/x-flv\r\n"
"Server: XEngine/%s\r\n"
"Transfer-Encoding: chunked\r\n\r\n"
"%x\r\n"), BaseLib_OperatorVer_XTypeStr(), nMsgLen);
//拷贝数据
memcpy(st_HDRBuffer.tszMsgBuffer + st_HDRBuffer.nMsgLen, lpszMsgBuffer, nMsgLen);
st_HDRBuffer.nMsgLen += nMsgLen;
//拷贝结尾
memcpy(st_HDRBuffer.tszMsgBuffer + st_HDRBuffer.nMsgLen, _X("\r\n"), 2);
st_HDRBuffer.nMsgLen += 2;
}
else if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTMP == enStreamType)
{
st_HDRBuffer.nMsgLen = nMsgLen;
memcpy(st_HDRBuffer.tszMsgBuffer, lpszMsgBuffer, nMsgLen);
}
unordered_map<int, AVPACKET_HDRBUFFER>::iterator stl_MapIteratorStream = stl_MapIterator->second->pStl_MapPushStream->find(enStreamType);
if (stl_MapIteratorStream == stl_MapIterator->second->pStl_MapPushStream->end())
{
stl_MapIterator->second->pStl_MapPushStream->insert(make_pair(enStreamType, st_HDRBuffer));
}
else
{
stl_MapIteratorStream->second = st_HDRBuffer;
}
st_Locker.unlock_shared();
return true;
}
/********************************************************************
函数名称:ModuleSession_PushStream_GetHDRBuffer
函数功能:获取流ID的缓存头
参数.一:lpszClientAddr
In/Out:In
类型:常量字符指针
可空:N
意思:输入客户端地址
参数.二:ptszMsgBuffer
In/Out:In
类型:字符指针
可空:N
意思:输出获取到的数据
参数.三:pInt_MsgLen
In/Out:In
类型:整数型指针
可空:N
意思:输出数据大小
参数.四:enStreamType
In/Out:In
类型:枚举型
可空:N
意思:获取的缓冲区类型
返回值
类型:逻辑型
意思:是否成功
备注:
*********************************************************************/
bool CModuleSession_PushStream::ModuleSession_PushStream_GetHDRBuffer(LPCXSTR lpszClientAddr, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType)
{
Session_IsErrorOccur = false;
if (NULL == lpszClientAddr)
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_PARAMENT;
return false;
}
//设备编号是否存在
st_Locker.lock_shared();
unordered_map<xstring, PUSHSTREAM_PACKET*>::iterator stl_MapIterator = stl_MapPushStream.find(lpszClientAddr);
if (stl_MapIterator == stl_MapPushStream.end())
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
st_Locker.unlock_shared();
return false;
}
auto stl_MapIteratorStream = stl_MapIterator->second->pStl_MapPushStream->find(enStreamType);
if (stl_MapIteratorStream == stl_MapIterator->second->pStl_MapPushStream->end())
{
Session_IsErrorOccur = true;
Session_dwErrorCode = ERROR_STREAMMEDIA_MODULE_SESSION_NOTFOUND;
st_Locker.unlock_shared();
return false;
}
*pInt_MsgLen = stl_MapIteratorStream->second.nMsgLen;
if (NULL != ptszMsgBuffer)
{
memcpy(ptszMsgBuffer, stl_MapIteratorStream->second.tszMsgBuffer, stl_MapIteratorStream->second.nMsgLen);
}
st_Locker.unlock_shared();
return true;
}
/********************************************************************
函数名称:ModuleSession_PushStream_SetAVInfo
函数功能:设置推流的音视频信息
参数.一:lpszClientAddr
......
......@@ -10,23 +10,14 @@
// Purpose: 推流全局会话
// History:
*********************************************************************/
typedef struct
{
XCHAR tszMsgBuffer[2048]; //缓存的头
int nMsgLen; //缓冲头大小
}AVPACKET_HDRBUFFER;
typedef struct
{
XENGINE_PROTOCOL_AVINFO st_AVInfo;
XCHAR tszSMSAddr[MAX_PATH];
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType;
unique_ptr<mutex> st_MSGLocker;
unique_ptr<mutex> st_ClientLocker;
unique_ptr<list<STREAMMEDIA_SESSIONCLIENT>> pStl_ListClient;
unique_ptr<unordered_map<int, AVPACKET_HDRBUFFER>> pStl_MapPushStream;
}PUSHSTREAM_PACKET;
class CModuleSession_PushStream
......@@ -38,8 +29,6 @@ public:
bool ModuleSession_PushStream_Create(LPCXSTR lpszClientAddr, LPCXSTR lpszSMSAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType);
bool ModuleSession_PushStream_Destroy(LPCXSTR lpszClientAddr);
bool ModuleSession_PushStream_GetAddrForAddr(LPCXSTR lpszClientAddr, XCHAR* ptszSMSAddr);
bool ModuleSession_PushStream_SetHDRBuffer(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType);
bool ModuleSession_PushStream_GetHDRBuffer(LPCXSTR lpszClientAddr, XCHAR* ptszMsgBuffer, int* pInt_MsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType);
bool ModuleSession_PushStream_SetAVInfo(LPCXSTR lpszClientAddr, XENGINE_PROTOCOL_AVINFO *pSt_AVInfo);
bool ModuleSession_PushStream_GetAVInfo(LPCXSTR lpszClientAddr, XENGINE_PROTOCOL_AVINFO* pSt_AVInfo);
bool ModuleSession_PushStream_FindStream(LPCXSTR lpszSMSAddr, XCHAR* ptszClientAddr);
......
......@@ -14,8 +14,6 @@ EXPORTS
ModuleSession_PushStream_Create
ModuleSession_PushStream_Destroy
ModuleSession_PushStream_GetAddrForAddr
ModuleSession_PushStream_SetHDRBuffer
ModuleSession_PushStream_GetHDRBuffer
ModuleSession_PushStream_FindStream
ModuleSession_PushStream_ClientInsert
ModuleSession_PushStream_ClientDelete
......
......@@ -74,14 +74,6 @@ extern "C" bool ModuleSession_PushStream_GetAddrForAddr(LPCXSTR lpszClientAddr,
{
return m_PushStream.ModuleSession_PushStream_GetAddrForAddr(lpszClientAddr, ptszSMSAddr);
}
extern "C" bool ModuleSession_PushStream_SetHDRBuffer(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType)
{
return m_PushStream.ModuleSession_PushStream_SetHDRBuffer(lpszClientAddr, lpszMsgBuffer, nMsgLen, enStreamType);
}
extern "C" bool ModuleSession_PushStream_GetHDRBuffer(LPCXSTR lpszClientAddr, XCHAR * ptszMsgBuffer, int* pInt_MsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType)
{
return m_PushStream.ModuleSession_PushStream_GetHDRBuffer(lpszClientAddr, ptszMsgBuffer, pInt_MsgLen, enStreamType);
}
extern "C" bool ModuleSession_PushStream_FindStream(LPCXSTR lpszSMSAddr, XCHAR * ptszClientAddr)
{
return m_PushStream.ModuleSession_PushStream_FindStream(lpszSMSAddr, ptszClientAddr);
......
......@@ -60,6 +60,7 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enStreamType;
if (0 == _tcsxnicmp(tszVluBuffer, "flv", 3))
{
int nTagSize = 0;
enStreamType = ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_FLV;
//拷贝数据
FLVProtocol_Packet_FrameHdr(tszPushAddr, tszRVBuffer, &nRVLen);
......@@ -85,7 +86,7 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
memset(tszSDBuffer, '\0', sizeof(tszSDBuffer));
ModuleSession_PushStream_GetAVInfo(tszPushAddr, &st_AVInfo);
FLVProtocol_Packet_FrameScript(tszPushAddr, tszRVBuffer, &nRVLen, &st_AVInfo);
FLVProtocol_Packet_FrameScript(tszPushAddr, tszRVBuffer, &nRVLen, &st_AVInfo, &nTagSize);
nSDLen = _xstprintf(tszSDBuffer, _X("%x\r\n"), nRVLen);
memcpy(tszSDBuffer + nSDLen, tszRVBuffer, nRVLen);
nSDLen += nRVLen;
......@@ -93,7 +94,7 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
nSDLen += 2;
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
//发送音视频信息
FLVProtocol_Packet_FrameAVCConfigure(tszPushAddr, tszRVBuffer, &nRVLen, &st_AVInfo);
FLVProtocol_Packet_FrameAVCConfigure(tszPushAddr, tszRVBuffer, &nRVLen, &st_AVInfo, &nTagSize);
nSDLen = _xstprintf(tszSDBuffer, _X("%x\r\n"), nRVLen);
memcpy(tszSDBuffer + nSDLen, tszRVBuffer, nRVLen);
nSDLen += nRVLen;
......@@ -101,7 +102,7 @@ bool PullStream_ClientTask_Handle(LPCXSTR lpszClientAddr, XCHAR*** ppptszListHdr
nSDLen += 2;
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
FLVProtocol_Packet_FrameAACConfigure(tszPushAddr, tszRVBuffer, &nRVLen, &st_AVInfo);
FLVProtocol_Packet_FrameAACConfigure(tszPushAddr, tszRVBuffer, &nRVLen, &st_AVInfo, &nTagSize);
nSDLen = _xstprintf(tszSDBuffer, _X("%x\r\n"), nRVLen);
memcpy(tszSDBuffer + nSDLen, tszRVBuffer, nRVLen);
nSDLen += nRVLen;
......
......@@ -27,7 +27,6 @@ bool PushStream_SrtTask_Connct(LPCXSTR lpszClientAddr, SRTSOCKET hSocket)
//创建会话
ModuleSession_PushStream_Create(lpszClientAddr, tszSMSAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT);
//need to parse ts stream
ModuleSession_PushStream_SetHDRBuffer(lpszClientAddr, NULL, 0, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_SRT);
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SRT客户端:%s,创建流成功,推流地址:%s,类型:推流端"), lpszClientAddr, tszSMSAddr);
}
else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册