@@ -82,12 +82,11 @@ bool XEngine_AVPacket_AVSetTime(LPCXSTR lpszClientAddr, int nVideoParament, int
8282}
8383bool 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}
290304bool 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 }
0 commit comments