Skip to content

Commit a763381

Browse files
committed
added:audio coder and resample support
fixed:x-stream audio parameter set is incorrect
1 parent 94e52e7 commit a763381

File tree

3 files changed

+45
-26
lines changed

3 files changed

+45
-26
lines changed

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_AVPacket.cpp

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,11 @@ bool XEngine_AVPacket_AVSetTime(LPCXSTR lpszClientAddr, int nVideoParament, int
8282
}
8383
bool XEngine_AVPacket_AVHdr(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, XBYTE byAVType, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE enClientType)
8484
{
85+
XENGINE_PROTOCOL_AVINFO st_AVInfo = {};
86+
8587
if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_XSTREAM == enClientType)
8688
{
8789
//XSTREAM推流
88-
XENGINE_PROTOCOL_AVINFO st_AVInfo;
89-
memset(&st_AVInfo, '\0', sizeof(XENGINE_PROTOCOL_AVINFO));
90-
9190
ModuleSession_PushStream_GetAVInfo(lpszClientAddr, &st_AVInfo);
9291
if (0 == byAVType)
9392
{
@@ -109,8 +108,6 @@ bool XEngine_AVPacket_AVHdr(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
109108
st_AVInfo.st_VideoInfo.nVLen = nPos;
110109
memset(st_AVInfo.st_VideoInfo.tszVInfo, '\0', sizeof(st_AVInfo.st_VideoInfo.tszVInfo));
111110
memcpy(st_AVInfo.st_VideoInfo.tszVInfo, lpszMsgBuffer, nPos);
112-
113-
ModuleSession_PushStream_SetAVInfo(lpszClientAddr, &st_AVInfo);
114111
}
115112
else
116113
{
@@ -121,23 +118,16 @@ bool XEngine_AVPacket_AVHdr(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
121118
int nConfig = 0;
122119
if (AVHelp_Parse_AACInfo((const XBYTE*)lpszMsgBuffer, nMsgLen, &st_AVInfo.st_AudioInfo.nChannel, &st_AVInfo.st_AudioInfo.nSampleRate, &nProfile, &nConfig))
123120
{
124-
st_AVInfo.st_AudioInfo.bEnable = true;
125-
st_AVInfo.st_AudioInfo.nALen = 7;
126-
st_AVInfo.st_AudioInfo.enAVCodec = 10;
127-
st_AVInfo.st_AudioInfo.nSampleFmt = 16;
128-
st_AVInfo.st_AudioInfo.nChannel = 1;
129121
AVHelp_Packet_AACHdr((XBYTE*)st_AVInfo.st_AudioInfo.tszAInfo, st_AVInfo.st_AudioInfo.nSampleRate, st_AVInfo.st_AudioInfo.nChannel, 0);
130122
ModuleSession_PushStream_SetAVInfo(lpszClientAddr, &st_AVInfo);
131123
}
132124
}
125+
ModuleSession_PushStream_SetAVInfo(lpszClientAddr, &st_AVInfo);
133126
}
134127
}
135128
else if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTMP == enClientType)
136129
{
137130
//RTMP推流的所有开关选项都是一样的代码
138-
XENGINE_PROTOCOL_AVINFO st_AVInfo;
139-
memset(&st_AVInfo, '\0', sizeof(XENGINE_PROTOCOL_AVINFO));
140-
141131
ModuleSession_PushStream_GetAVInfo(lpszClientAddr, &st_AVInfo);
142132
if (0 == byAVType)
143133
{
@@ -170,9 +160,6 @@ bool XEngine_AVPacket_AVHdr(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
170160
else if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_SRT == enClientType)
171161
{
172162
//SRT推流
173-
XENGINE_PROTOCOL_AVINFO st_AVInfo;
174-
memset(&st_AVInfo, '\0', sizeof(XENGINE_PROTOCOL_AVINFO));
175-
176163
ModuleSession_PushStream_GetAVInfo(lpszClientAddr, &st_AVInfo);
177164
if (0 == byAVType)
178165
{
@@ -229,9 +216,6 @@ bool XEngine_AVPacket_AVHdr(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
229216
else if (ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_JT1078 == enClientType)
230217
{
231218
//JT1078推流
232-
XENGINE_PROTOCOL_AVINFO st_AVInfo;
233-
memset(&st_AVInfo, '\0', sizeof(XENGINE_PROTOCOL_AVINFO));
234-
235219
ModuleSession_PushStream_GetAVInfo(lpszClientAddr, &st_AVInfo);
236220
if (0 == byAVType)
237221
{
@@ -285,6 +269,36 @@ bool XEngine_AVPacket_AVHdr(LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int n
285269
}
286270
}
287271
}
272+
273+
if (st_ServiceConfig.st_XPull.st_PullWebRtc.bEnable && 0 != byAVType)
274+
{
275+
XNETHANDLE xhDecodec = 0;
276+
XNETHANDLE xhEncodec = 0;
277+
if (!AudioCodec_Stream_DeInit(&xhDecodec, ENUM_XENGINE_AVCODEC_AUDIO_TYPE_AAC))
278+
{
279+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("推流端:%s,初始化音频解码器失败,错误:%lX"), lpszClientAddr, AudioCodec_GetLastError());
280+
return false;
281+
}
282+
int nTmp = 0;
283+
AudioCodec_Stream_SetResample(xhDecodec, &nTmp, st_AVInfo.st_AudioInfo.nSampleRate, st_AVInfo.st_AudioInfo.nSampleRate, ENUM_AVCODEC_AUDIO_SAMPLEFMT_FLTP, ENUM_AVCODEC_AUDIO_SAMPLEFMT_S16, st_AVInfo.st_AudioInfo.nChannel, st_AVInfo.st_AudioInfo.nChannel);
284+
285+
st_AVInfo.st_AudioInfo.enAVCodec = ENUM_XENGINE_AVCODEC_AUDIO_TYPE_AAC;
286+
if (!AudioCodec_Stream_EnInit(&xhEncodec, &st_AVInfo.st_AudioInfo))
287+
{
288+
AudioCodec_Stream_Destroy(xhDecodec);
289+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("推流端:%s,初始化音频编码器失败,错误:%lX"), lpszClientAddr, AudioCodec_GetLastError());
290+
return false;
291+
}
292+
AudioCodec_Stream_SetResample(xhEncodec, &nTmp, st_AVInfo.st_AudioInfo.nSampleRate, st_AVInfo.st_AudioInfo.nSampleRate, ENUM_AVCODEC_AUDIO_SAMPLEFMT_S16, ENUM_AVCODEC_AUDIO_SAMPLEFMT_FLTP, st_AVInfo.st_AudioInfo.nChannel, st_AVInfo.st_AudioInfo.nChannel);
293+
294+
if (!ModuleSession_PushStream_AudioCodecSet(lpszClientAddr, xhDecodec, xhEncodec))
295+
{
296+
AudioCodec_Stream_Destroy(xhDecodec);
297+
AudioCodec_Stream_Destroy(xhEncodec);
298+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("推流端:%s,设置推流音频编解码器失败,错误:%lX"), lpszClientAddr, ModuleSession_GetLastError());
299+
return false;
300+
}
301+
}
288302
return true;
289303
}
290304
bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszRVBuffer, int* pInt_RVLen, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen, XBYTE byAVType)
@@ -555,11 +569,7 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
555569
//发送数据,RTSP使用UDP发送
556570
for (int i = 0; i < nPacketCount; i++)
557571
{
558-
if (!ModuleHelp_SRTPCore_RTPINProtect(ppSt_RTPPacket[i]->tszMsgBuffer, &ppSt_RTPPacket[i]->nMsgLen))
559-
{
560-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBRTC:%s,推流失败"), stl_ListIteratorClient->tszClientID);
561-
continue;
562-
}
572+
ModuleHelp_SRTPCore_RTPINProtect(ppSt_RTPPacket[i]->tszMsgBuffer, &ppSt_RTPPacket[i]->nMsgLen);
563573
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, ppSt_RTPPacket[i]->tszMsgBuffer, ppSt_RTPPacket[i]->nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTC);
564574
}
565575
}
@@ -572,8 +582,9 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
572582
for (int i = 0; i < nPacketCount; i++)
573583
{
574584
ModuleHelp_SRTPCore_RTPINProtect(ppSt_RTPPacket[i]->tszMsgBuffer, &ppSt_RTPPacket[i]->nMsgLen);
575-
XEngine_Network_Send(xhRTCSocket, stl_ListIteratorClient->tszClientID, ppSt_RTPPacket[i]->tszMsgBuffer, ppSt_RTPPacket[i]->nMsgLen);
576-
}*/
585+
XEngine_Network_Send(stl_ListIteratorClient->tszClientID, ppSt_RTPPacket[i]->tszMsgBuffer, ppSt_RTPPacket[i]->nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTC);
586+
}
587+
*/
577588
}
578589
BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_RTPPacket, nPacketCount);
579590
}

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Hdr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ extern FILE* pSt_AFile;
191191
#pragma comment(lib,"XEngine_StreamMedia/StreamMedia_RTPProtocol.lib")
192192
#pragma comment(lib,"XEngine_StreamMedia/StreamMedia_RTCPProtocol.lib")
193193
#pragma comment(lib,"XEngine_AVCodec/XEngine_AVHelp.lib")
194+
#pragma comment(lib,"XEngine_AVCodec/XEngine_AudioCodec.lib")
194195
#pragma comment(lib,"XEngine_SystemSdk/XEngine_SystemApi.lib")
195196
#pragma comment(lib,"Ws2_32.lib")
196197
#endif

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Network.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,13 @@ void XEngine_Network_Close(LPCXSTR lpszClientAddr, XSOCKET hSocket, bool bHeart,
261261
{
262262
HLSProtocol_M3u8Packet_Delete(xhHLSFile, xhHLSToken, st_ServiceConfig.st_XPull.st_PullHls.bClear);
263263
}
264+
XNETHANDLE xhDecodec = 0;
265+
XNETHANDLE xhEncodec = 0;
266+
if (ModuleSession_PushStream_AudioCodecGet(lpszClientAddr, &xhDecodec, &xhEncodec))
267+
{
268+
AudioCodec_Stream_Destroy(xhDecodec);
269+
AudioCodec_Stream_Destroy(xhEncodec);
270+
}
264271
ModuleSession_PullStream_PublishDelete(tszSMSAddr);
265272
ModuleSession_PushStream_Destroy(lpszClientAddr);
266273
}

0 commit comments

Comments
 (0)