Skip to content

Commit e0d7034

Browse files
committed
modify:avformat instead xstream
1 parent 871f480 commit e0d7034

File tree

7 files changed

+56
-69
lines changed

7 files changed

+56
-69
lines changed

XEngine_Source/VSCopy_Arm64.bat

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ copy /y "%XEngine_LibArm64%\XEngine_Core\XEngine_ManagePool.dll" "./"
66
copy /y "%XEngine_LibArm64%\XEngine_Core\XEngine_Cryption.dll" "./"
77

88
copy /y "%XEngine_LibArm64%\XEngine_Client\XClient_APIHelp.dll" "./"
9-
copy /y "%XEngine_LibArm64%\XEngine_Client\XClient_Stream.dll" "./"
109
copy /y "%XEngine_LibArm64%\XEngine_Client\XClient_Socket.dll" "./"
1110

1211
copy /y "%XEngine_LibArm64%\XEngine_NetHelp\NetHelp_XSocket.dll" "./"

XEngine_Source/VSCopy_Debug.bat

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_ManagePool.dll" "./"
66
copy /y "D:\XEngine\XEngine_SourceCode\Debug\XEngine_Cryption.dll" "./"
77

88
copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_APIHelp.dll" "./"
9-
copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_Stream.dll" "./"
109
copy /y "D:\XEngine\XEngine_SourceCode\Debug\XClient_Socket.dll" "./"
1110

1211
copy /y "D:\XEngine\XEngine_SourceCode\Debug\NetHelp_XSocket.dll" "./"

XEngine_Source/VSCopy_x64.bat

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_ManagePool.dll" "./"
66
copy /y "%XEngine_Lib64%\XEngine_Core\XEngine_Cryption.dll" "./"
77

88
copy /y "%XEngine_Lib64%\XEngine_Client\XClient_APIHelp.dll" "./"
9-
copy /y "%XEngine_Lib64%\XEngine_Client\XClient_Stream.dll" "./"
109
copy /y "%XEngine_Lib64%\XEngine_Client\XClient_Socket.dll" "./"
1110

1211
copy /y "%XEngine_Lib64%\XEngine_NetHelp\NetHelp_XSocket.dll" "./"

XEngine_Source/VSCopy_x86.bat

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_ManagePool.dll" "./"
66
copy /y "%XEngine_Lib32%\XEngine_Core\XEngine_Cryption.dll" "./"
77

88
copy /y "%XEngine_Lib32%\XEngine_Client\XClient_APIHelp.dll" "./"
9-
copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Stream.dll" "./"
109
copy /y "%XEngine_Lib32%\XEngine_Client\XClient_Socket.dll" "./"
1110

1211
copy /y "%XEngine_Lib32%\XEngine_NetHelp\NetHelp_XSocket.dll" "./"

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ LOADHDR = -I ./
66
LOADSO = -L ../../XEngine_ModuleConfigure -L ../../XEngine_ModuleDatabase -L ../../XEngine_ModuleProtocol -L ../../XEngine_ModuleSystem -L ../../XEngine_ModuleHelp -L ../../XEngine_ModulePlugin \
77
-L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/jsoncpp -L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport -L ../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_Verification \
88
-L ../../XEngine_DependLibrary/XEngine_IPMacData/XEngine_Source/XEngine_APIModuleIPMac -L ../../XEngine_DependLibrary/XEngine_PhoneData/XEngine_Source/XEngine_APIModulePhone
9-
LIB = -lXEngine_BaseSafe -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_Cryption -lXClient_Stream -lXClient_APIHelp -lXClient_Socket -lNetHelp_APIAddr -lNetHelp_XSocket -lHelpComponents_XLog -lRfcComponents_HttpProtocol -lRfcComponents_NatProtocol -lRfcComponents_NTPProtocol -lRfcComponents_DNSProtocol -lXEngine_ProcFile -lXEngine_SystemApi -lXEngine_AVHelp -lXEngine_VideoCodec -lXEngine_AudioCodec -lXEngine_AVCollect \
9+
LIB = -lXEngine_BaseSafe -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool -lXEngine_Cryption -lXClient_APIHelp -lXClient_Socket -lNetHelp_APIAddr -lNetHelp_XSocket -lHelpComponents_XLog -lRfcComponents_HttpProtocol -lRfcComponents_NatProtocol -lRfcComponents_NTPProtocol -lRfcComponents_DNSProtocol -lXEngine_ProcFile -lXEngine_SystemApi -lXEngine_AVHelp -lXEngine_VideoCodec -lXEngine_AudioCodec -lXEngine_AVCollect -lXEngine_AVFormat \
1010
-lXEngine_ModuleConfigure -lXEngine_ModuleDatabase -lXEngine_ModuleProtocol -lXEngine_ModuleSystem -lXEngine_ModuleHelp -lXEngine_ModulePlugin \
1111
-ljsoncpp -lXEngine_InfoReport -lXEngine_Verification \
1212
-lXEngine_APIModuleIPMac -lXEngine_APIModulePhone

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_Hdr.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ using namespace std;
3939
#include <XEngine_Include/XEngine_Client/XClient_Error.h>
4040
#include <XEngine_Include/XEngine_Client/APIClient_Define.h>
4141
#include <XEngine_Include/XEngine_Client/APIClient_Error.h>
42-
#include <XEngine_Include/XEngine_Client/StreamClient_Define.h>
43-
#include <XEngine_Include/XEngine_Client/StreamClient_Error.h>
4442
#include <XEngine_Include/XEngine_NetHelp/APIAddr_Define.h>
4543
#include <XEngine_Include/XEngine_NetHelp/APIAddr_Error.h>
4644
#include <XEngine_Include/XEngine_HelpComponents/XLog_Define.h>
@@ -65,6 +63,8 @@ using namespace std;
6563
#include <XEngine_Include/XEngine_AVCodec/AudioCodec_Error.h>
6664
#include <XEngine_Include/XEngine_AVCodec/AVHelp_Define.h>
6765
#include <XEngine_Include/XEngine_AVCodec/AVHelp_Error.h>
66+
#include <XEngine_Include/XEngine_AVCodec/AVFormat_Define.h>
67+
#include <XEngine_Include/XEngine_AVCodec/AVFormat_Error.h>
6868
#include "../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport/InfoReport_Define.h"
6969
#include "../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_InfoReport/InfoReport_Error.h"
7070
#include "../../XEngine_DependLibrary/XEngine_OPenSource/XEngine_Module/XEngine_Verification/Verification_Define.h"
@@ -162,7 +162,6 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig;
162162
#pragma comment(lib,"XEngine_Core/XEngine_ManagePool.lib")
163163
#pragma comment(lib,"XEngine_Core/XEngine_Cryption.lib")
164164
#pragma comment(lib,"XEngine_Client/XClient_Socket.lib")
165-
#pragma comment(lib,"XEngine_Client/XClient_Stream.lib")
166165
#pragma comment(lib,"XEngine_Client/XClient_APIHelp.lib")
167166
#pragma comment(lib,"XEngine_NetHelp/NetHelp_APIAddr")
168167
#pragma comment(lib,"XEngine_HelpComponents/HelpComponents_XLog.lib")
@@ -175,6 +174,7 @@ extern XENGINE_DEAMONAPPLIST st_DeamonAppConfig;
175174
#pragma comment(lib,"XEngine_AVCodec/XEngine_VideoCodec.lib")
176175
#pragma comment(lib,"XEngine_AVCodec/XEngine_AudioCodec.lib")
177176
#pragma comment(lib,"XEngine_AVCodec/XEngine_AVHelp.lib")
177+
#pragma comment(lib,"XEngine_AVCodec/XEngine_AVFormat.lib")
178178
#pragma comment(lib,"Ws2_32.lib")
179179
#pragma comment(lib,"Dbghelp.lib")
180180
#ifdef _DEBUG

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_BackService.cpp

Lines changed: 52 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,11 @@
33
static bool bRecord = false;
44
static XHANDLE xhSound = NULL;
55
static XHANDLE xhScreen = NULL;
6-
static XHANDLE xhStream = NULL;
6+
static XHANDLE xhPacket = NULL;
77
static XHANDLE xhAudioFifo = NULL;
88

99
void XCALLBACK HTTPTask_TaskPost_CBVideo(uint8_t* ptszAVBuffer, int nAVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam)
1010
{
11-
if (!XClient_StreamPush_LiveVideo(xhStream, ptszAVBuffer, nAVLen))
12-
{
13-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("屏幕采集器,推流编码失败,需要关闭推流服务,错误码:%lX"), StreamClient_GetLastError());
14-
}
1511
}
1612
void XCALLBACK HTTPTask_TaskPost_CBAudio(uint8_t* ptszAVBuffer, int nAVLen, AVCOLLECT_TIMEINFO* pSt_TimeInfo, XPVOID lParam)
1713
{
@@ -24,10 +20,6 @@ void XCALLBACK HTTPTask_TaskPost_CBAudio(uint8_t* ptszAVBuffer, int nAVLen, AVCO
2420
{
2521
break;
2622
}
27-
if (!XClient_StreamPush_LiveAudio(xhStream, tszAVBuffer, nAVLen))
28-
{
29-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("音频采集器,推流编码失败,需要关闭推流服务,错误码:%lX"), StreamClient_GetLastError());
30-
}
3123
}
3224
}
3325
}
@@ -298,8 +290,45 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer
298290
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,因为已经在录制中了"), lpszClientAddr);
299291
return false;
300292
}
301-
XENGINE_PROTOCOL_AVINFO st_AVInfo;
302-
memset(&st_AVInfo, '\0', sizeof(XENGINE_PROTOCOL_AVINFO));
293+
AVCODEC_TIMEBASE st_VideoTime = {};
294+
AVCODEC_TIMEBASE st_AudioTime = {};
295+
xhPacket = AVFormat_Packet_Init();
296+
if (!AVFormat_Packet_Output(xhPacket, tszAPIBuffer, _X("flv")))
297+
{
298+
st_HDRParam.nHttpCode = 400;
299+
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
300+
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
301+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,推流服务端:%s 连接失败,错误码:%lX"), lpszClientAddr, tszAPIBuffer, AVFormat_GetLastError());
302+
return false;
303+
}
304+
//屏幕采集
305+
AVCOLLECT_SCREENINFO st_AVScreen;
306+
memset(&st_AVScreen, '\0', sizeof(AVCOLLECT_SCREENINFO));
307+
308+
st_AVScreen.nFrameRate = 24;
309+
st_AVScreen.nPosX = 0;
310+
st_AVScreen.nPosY = 0;
311+
_xstprintf(st_AVScreen.tszVideoSize, _X("%s"), _X("1920x1080"));
312+
#ifdef _MSC_BUILD
313+
xhScreen = AVCollect_Video_Init("gdigrab", tszDstBuffer, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
314+
#elif __linux__
315+
xhScreen = AVCollect_Video_Init("x11grab", tszDstBuffer, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
316+
#else
317+
xhScreen = AVCollect_Video_Init("avfoundation", tszDstBuffer, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
318+
#endif
319+
if (NULL == xhScreen)
320+
{
321+
st_HDRParam.nHttpCode = 400;
322+
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
323+
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
324+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,屏幕采集器请求失败,错误码:%lX"), lpszClientAddr, AVCollect_GetLastError());
325+
return false;
326+
}
327+
XHANDLE xhVideoCodec = NULL;
328+
AVCollect_Video_GetAVCodec(xhScreen, &xhVideoCodec);
329+
AVCollect_Video_GetTimeBase(xhScreen, &st_VideoTime);
330+
AVFormat_Packet_StreamCreate(xhPacket, xhVideoCodec);
331+
AVFormat_Packet_TimeBase(xhPacket, 0, &st_VideoTime);
303332
//启用音频
304333
if (1 == nBSType)
305334
{
@@ -318,7 +347,11 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer
318347
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,初始化音频采集器请求失败,错误码:%lX"), lpszClientAddr, AVCollect_GetLastError());
319348
return false;
320349
}
350+
#ifdef _MSC_BUILD
321351
xhAudioFifo = AudioCodec_Help_FifoInit(ENUM_AVCODEC_AUDIO_SAMPLEFMT_S16, 2);
352+
#else
353+
xhAudioFifo = AudioCodec_Help_FifoInit(ENUM_AVCODEC_AUDIO_SAMPLEFMT_S16, 2);
354+
#endif
322355
if (NULL == xhAudioFifo)
323356
{
324357
st_HDRParam.nHttpCode = 400;
@@ -327,59 +360,17 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer
327360
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,初始化音频采集器请求失败,错误码:%lX"), lpszClientAddr, AudioCodec_GetLastError());
328361
return false;
329362
}
330-
st_AVInfo.st_AudioInfo.bEnable = true;
331-
AVCollect_Audio_GetInfo(xhSound, &st_AVInfo);
332-
//音频编码参数
333-
st_AVInfo.st_AudioInfo.enAVCodec = ENUM_XENGINE_AVCODEC_AUDIO_TYPE_AAC;
334-
st_AVInfo.st_AudioInfo.nSampleFmt = ENUM_AVCODEC_AUDIO_SAMPLEFMT_S16;
335-
}
336-
//屏幕采集
337-
AVCOLLECT_SCREENINFO st_AVScreen;
338-
memset(&st_AVScreen, '\0', sizeof(AVCOLLECT_SCREENINFO));
339-
340-
st_AVScreen.nFrameRate = 24;
341-
st_AVScreen.nPosX = 0;
342-
st_AVScreen.nPosY = 0;
343-
_xstprintf(st_AVScreen.tszVideoSize, _X("%s"), _X("1920x1080"));
344-
#ifdef _MSC_BUILD
345-
xhScreen = AVCollect_Video_Init("gdigrab", tszDstBuffer, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
346-
#elif __linux__
347-
xhScreen = AVCollect_Video_Init("x11grab", tszDstBuffer, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
348-
#else
349-
xhScreen = AVCollect_Video_Init("avfoundation", tszDstBuffer, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
350-
#endif
351-
if (NULL == xhScreen)
352-
{
353-
st_HDRParam.nHttpCode = 400;
354-
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
355-
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
356-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,屏幕采集器请求失败,错误码:%lX"), lpszClientAddr, AVCollect_GetLastError());
357-
return false;
358-
}
359-
AVCollect_Video_GetInfo(xhScreen, &st_AVInfo);
360-
st_AVInfo.st_VideoInfo.enAVCodec = ENUM_XENGINE_AVCODEC_VIDEO_TYPE_H264;
361-
xhStream = XClient_StreamPush_LiveInit();
362-
if (NULL == xhStream)
363-
{
364-
st_HDRParam.nHttpCode = 400;
365-
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
366-
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
367-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,推流:%s 请求失败,错误码:%lX"), lpszClientAddr, tszDstBuffer, StreamClient_GetLastError());
368-
return false;
363+
XHANDLE xhAudioCodec = NULL;
364+
AVCollect_Audio_GetAVCodec(xhSound, &xhAudioCodec);
365+
AVCollect_Audio_GetTimeBase(xhSound, &st_AudioTime);
366+
AVFormat_Packet_StreamCreate(xhPacket, xhAudioCodec);
367+
AVFormat_Packet_TimeBase(xhPacket, 1, &st_AudioTime);
369368
}
370369
bRecord = true;
371-
XClient_StreamPush_LiveOutput(xhStream, tszAPIBuffer, _X("flv"));
372-
XClient_StreamPush_LiveCreate(xhStream, &st_AVInfo);
373-
374-
AVCODEC_TIMEBASE st_VideoTime = {};
375-
AVCODEC_TIMEBASE st_AudioTime = {};
376-
AVCollect_Audio_GetTimeBase(xhSound, &st_AudioTime);
377-
AVCollect_Video_GetTimeBase(xhScreen, &st_VideoTime);
378-
XClient_StreamPush_LiveTime(xhStream, &st_VideoTime, &st_AudioTime);
379370

371+
AVFormat_Packet_Start(xhPacket);
380372
AVCollect_Audio_Start(xhSound);
381373
AVCollect_Video_Start(xhScreen);
382-
XClient_StreamPush_LiveWriteHdr(xhStream);
383374
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
384375
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
385376
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("HTTP客户端:%s,开始屏幕录制,音频:%s,视频:%s 推流:%s 请求成功"), lpszClientAddr, tszSrcBuffer, tszDstBuffer, tszAPIBuffer);
@@ -391,10 +382,10 @@ bool HTTPTask_TaskPost_BackService(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer
391382
{
392383
AVCollect_Video_Destory(xhScreen);
393384
AVCollect_Audio_Destory(xhSound);
394-
XClient_StreamPush_LiveClose(xhStream);
385+
AVFormat_Packet_Stop(xhPacket);
395386
xhScreen = NULL;
396387
xhSound = NULL;
397-
xhStream = NULL;
388+
xhPacket = NULL;
398389
bRecord = false;
399390
}
400391
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);

0 commit comments

Comments
 (0)