Skip to content

Commit e5c11ed

Browse files
committed
modify:support only audio or video for av record
1 parent 7cbf89e commit e5c11ed

1 file changed

Lines changed: 44 additions & 43 deletions

File tree

XEngine_Source/XEngine_ServiceApp/XEngine_HttpApp/XEngine_TaskPost/TaskPost_AVRecord.cpp

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ bool HTTPTask_TaskPost_AVRecordStart(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuff
6363
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,因为已经在录制中了"), lpszClientAddr);
6464
return false;
6565
}
66-
6766
XENGINE_AVRECORD st_AVRecord = {};
67+
XENGINE_PROTOCOL_AVINFO st_AVInfo = {};
68+
6869
if (!ModuleProtocol_Parse_AVRecord(lpszMsgBuffer, nMsgLen, &st_AVRecord))
6970
{
7071
st_HDRParam.nHttpCode = 400;
@@ -73,28 +74,6 @@ bool HTTPTask_TaskPost_AVRecordStart(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuff
7374
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,解析协议失败,错误码:%lX"), lpszClientAddr, ModuleProtocol_GetLastError());
7475
return false;
7576
}
76-
//屏幕采集
77-
AVCOLLECT_SCREENINFO st_AVScreen = {};
78-
79-
st_AVScreen.nFrameRate = 24;
80-
st_AVScreen.nPosX = 0;
81-
st_AVScreen.nPosY = 0;
82-
_xstprintf(st_AVScreen.tszVideoSize, _X("%s"), st_AVRecord.tszRsolution);
83-
#ifdef _MSC_BUILD
84-
xhScreen = AVCollect_Video_Init("gdigrab", st_AVRecord.tszVideoDevice, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
85-
#elif __linux__
86-
xhScreen = AVCollect_Video_Init("x11grab", st_AVRecord.tszVideoDevice, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
87-
#else
88-
xhScreen = AVCollect_Video_Init("avfoundation", st_AVRecord.tszVideoDevice, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
89-
#endif
90-
if (NULL == xhScreen)
91-
{
92-
st_HDRParam.nHttpCode = 400;
93-
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
94-
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
95-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,屏幕采集器请求失败,错误码:%lX"), lpszClientAddr, AVCollect_GetLastError());
96-
return false;
97-
}
9877
xhPacket = AVFormat_Packet_Init();
9978
if (!AVFormat_Packet_Output(xhPacket, st_AVRecord.tszFilePath, _X("flv")))
10079
{
@@ -104,29 +83,51 @@ bool HTTPTask_TaskPost_AVRecordStart(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuff
10483
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,推流服务端:%s 连接失败,错误码:%lX"), lpszClientAddr, st_AVRecord.tszFilePath, AVFormat_GetLastError());
10584
return false;
10685
}
107-
XHANDLE xhVideoCodec = NULL;
108-
//初始化屏幕编码器
109-
XENGINE_PROTOCOL_AVINFO st_AVInfo = {};
110-
AVCollect_Video_GetInfo(xhScreen, &st_AVInfo);
86+
//屏幕采集
87+
if (_tcsxlen(st_AVRecord.tszVideoDevice) > 0)
88+
{
89+
AVCOLLECT_SCREENINFO st_AVScreen = {};
90+
91+
st_AVScreen.nFrameRate = 24;
92+
st_AVScreen.nPosX = 0;
93+
st_AVScreen.nPosY = 0;
94+
_xstprintf(st_AVScreen.tszVideoSize, _X("%s"), st_AVRecord.tszRsolution);
95+
#ifdef _MSC_BUILD
96+
xhScreen = AVCollect_Video_Init("gdigrab", st_AVRecord.tszVideoDevice, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
97+
#elif __linux__
98+
xhScreen = AVCollect_Video_Init("x11grab", st_AVRecord.tszVideoDevice, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
99+
#else
100+
xhScreen = AVCollect_Video_Init("avfoundation", st_AVRecord.tszVideoDevice, &st_AVScreen, HTTPTask_TaskPost_CBVideo);
101+
#endif
102+
if (NULL == xhScreen)
103+
{
104+
st_HDRParam.nHttpCode = 400;
105+
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
106+
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
107+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,屏幕采集器请求失败,错误码:%lX"), lpszClientAddr, AVCollect_GetLastError());
108+
return false;
109+
}
110+
XHANDLE xhVideoCodec = NULL;
111+
//初始化屏幕编码器
112+
AVCollect_Video_GetInfo(xhScreen, &st_AVInfo);
111113

112-
xhScale = VideoCodec_Help_ScaleInit(st_AVInfo.st_VideoInfo.nWidth, st_AVInfo.st_VideoInfo.nHeight, st_AVInfo.st_VideoInfo.nFormat, st_AVInfo.st_VideoInfo.nWidth, st_AVInfo.st_VideoInfo.nHeight, ENUM_AVCODEC_VIDEO_SAMPLEFMT_YUV420P);
114+
xhScale = VideoCodec_Help_ScaleInit(st_AVInfo.st_VideoInfo.nWidth, st_AVInfo.st_VideoInfo.nHeight, st_AVInfo.st_VideoInfo.nFormat, st_AVInfo.st_VideoInfo.nWidth, st_AVInfo.st_VideoInfo.nHeight, ENUM_AVCODEC_VIDEO_SAMPLEFMT_YUV420P);
113115

114-
st_AVInfo.st_VideoInfo.nFormat = 0;
115-
st_AVInfo.st_VideoInfo.enAVCodec = ENUM_XENGINE_AVCODEC_VIDEO_TYPE_H264;
116-
xhVideo = VideoCodec_Stream_EnInit(&st_AVInfo.st_VideoInfo);
117-
if (NULL == xhVideo)
118-
{
119-
st_HDRParam.nHttpCode = 500;
120-
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
121-
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
122-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,打开编码器视频编码器失败,错误码:%lX"), lpszClientAddr, VideoCodec_GetLastError());
123-
return false;
116+
st_AVInfo.st_VideoInfo.nFormat = 0;
117+
st_AVInfo.st_VideoInfo.enAVCodec = ENUM_XENGINE_AVCODEC_VIDEO_TYPE_H264;
118+
xhVideo = VideoCodec_Stream_EnInit(&st_AVInfo.st_VideoInfo);
119+
if (NULL == xhVideo)
120+
{
121+
st_HDRParam.nHttpCode = 500;
122+
HttpProtocol_Server_SendMsgEx(xhHTTPPacket, m_MemorySend.get(), &nSDLen, &st_HDRParam);
123+
XEngine_Network_Send(lpszClientAddr, m_MemorySend.get(), nSDLen);
124+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("HTTP客户端:%s,请求屏幕录制失败,打开编码器视频编码器失败,错误码:%lX"), lpszClientAddr, VideoCodec_GetLastError());
125+
return false;
126+
}
127+
VideoCodec_Stream_GetAVCodec(xhVideo, &xhVideoCodec);
128+
AVFormat_Packet_StreamCreate(xhPacket, xhVideoCodec);
129+
BaseLib_Memory_FreeCStyle((XPPMEM)&xhVideoCodec);
124130
}
125-
VideoCodec_Stream_GetAVCodec(xhVideo, &xhVideoCodec);
126-
AVFormat_Packet_StreamCreate(xhPacket, xhVideoCodec);
127-
BaseLib_Memory_FreeCStyle((XPPMEM)&xhVideoCodec);
128-
//转换
129-
130131
//启用音频
131132
if (_tcsxlen(st_AVRecord.tszAudioDevice) > 0)
132133
{

0 commit comments

Comments
 (0)