@@ -88,24 +88,24 @@ bool PullStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L
8888
8989 return true ;
9090}
91- bool PullStream_ClientWebRtc_SDKPacket (XNETHANDLE xhPacket, LPCXSTR lpszSMSAddr, bool bVideo, XENGINE_PROTOCOL_AVINFO* pSt_AVInfo)
91+ bool PullStream_ClientWebRtc_SDKPacket (XNETHANDLE xhPacket, bool bVideo, XENGINE_PROTOCOL_AVINFO* pSt_AVInfo)
9292{
93+ #if XENGINE_VERSION_KERNEL >= 8 && XENGINE_VERSION_MAIN >= 29
9394 XCHAR** pptszAVList;
9495 BaseLib_OperatorMemory_Malloc ((XPPPMEM)&pptszAVList, 1 , MAX_PATH);
9596
9697 if (bVideo)
9798 {
9899 _tcsxcpy (pptszAVList[0 ], _X (" 106" ));
99- SDPProtocol_Packet_AddMedia (xhPacket, _X (" video" ), _X (" UDP/TLS/RTP/SAVPF" ), &pptszAVList, 1 );
100+ SDPProtocol_Packet_AddMedia (xhPacket, _X (" video" ), _X (" UDP/TLS/RTP/SAVPF" ), &pptszAVList, 1 , 9 );
100101 }
101102 else
102103 {
103104 _tcsxcpy (pptszAVList[0 ], _X (" 111" ));
104- SDPProtocol_Packet_AddMedia (xhPacket, _X (" audio" ), _X (" UDP/TLS/RTP/SAVPF" ), &pptszAVList, 1 );
105+ SDPProtocol_Packet_AddMedia (xhPacket, _X (" audio" ), _X (" UDP/TLS/RTP/SAVPF" ), &pptszAVList, 1 , 9 );
105106 }
106107 // 生成用户和密码
107- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ice-ufrag" ), " j107le40" );
108- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ice-pwd" ), " 3321308h8i6vt3769r6638l1409d50jz" );
108+ SDPProtocol_Packet_ICEUser (xhPacket, _X (" j107le40" ), _X (" 3321308h8i6vt3769r6638l1409d50jz" ));
109109
110110 int nDLen = 0 ;
111111 XBYTE tszDigestStr[MAX_PATH] = {};
@@ -145,20 +145,18 @@ bool PullStream_ClientWebRtc_SDKPacket(XNETHANDLE xhPacket, LPCXSTR lpszSMSAddr,
145145 st_SDPMedia.st_FmtpVideo .tszLeaveId [1 ] = tszSPSBuffer[1 ];
146146 st_SDPMedia.st_FmtpVideo .tszLeaveId [2 ] = tszSPSBuffer[2 ];
147147 SDPProtocol_Packet_VideoFmt (xhPacket, 106 , &st_SDPMedia, true );
148+ SDPProtocol_Packet_CName (xhPacket, 2124085006 , _X (" 79a9722580589zr5" ), _X (" video-666q08to" ));
148149 }
149150 else
150151 {
151152 SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" mid" ), _X (" 0" ));
152153 SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtpmap" ), _X (" 111 opus/48000/2" ));
153154 SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtcp-fb" ), _X (" 111 transport-cc" ));
155+ SDPProtocol_Packet_CName (xhPacket, 2124085006 , _X (" 79a9722580589zr5" ), _X (" audio-23z8fj2g" ));
154156 }
155-
156- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ssrc" ), _X (" 2124085006 cname:79a9722580589zr5" ));
157- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ssrc" ), _X (" 2124085006 label:audio-23z8fj2g" ));
158- #if XENGINE_VERSION_KERNEL >= 8 && XENGINE_VERSION_MAIN >= 29
159157 SDPProtocol_Packet_OptionalCandidate (xhPacket, st_ServiceConfig.tszIPAddr , st_ServiceConfig.nRTCPort );
160- #endif
161158 BaseLib_OperatorMemory_Free ((XPPPMEM)&pptszAVList, 1 );
159+ #endif
162160 return true ;
163161}
164162bool PullStream_ClientWebRtc_Handle (RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen)
@@ -199,63 +197,39 @@ bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
199197 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X (" WEBRTC:%s,请求拉流的SDP不正确,错误:%lX" ), lpszClientAddr, SDPProtocol_GetLastError ());
200198 return false ;
201199 }
202- bool bBundle = false ;
200+ #if XENGINE_VERSION_KERNEL >= 8 && XENGINE_VERSION_MAIN >= 29
201+ bool bAudio = false ;
202+ bool bVideo = false ;
203203 bool bRTCPMux = false ;
204204 int nListCount = 0 ;
205205 XCHAR tszICEUser[MAX_PATH] = {};
206206 XCHAR tszICEPass[MAX_PATH] = {};
207+ XCHAR tszAlgType[MAX_PATH] = {};
207208 XCHAR tszHMacStr[MAX_PATH] = {};
208209 STREAMMEDIA_SDPPROTOCOL_ATTR** ppSt_ListAttr;
209210 SDPProtocol_Parse_GetAttr (xhParse, &ppSt_ListAttr, &nListCount);
210- for (int i = 0 ; i < nListCount; i++)
211- {
212- LPCXSTR lpszAttrGroup = _X (" group" );
213- LPCXSTR lpszAttrMux = _X (" rtcp-mux" );
214- LPCXSTR lpszICEUfrag = _X (" ice-ufrag" );
215- LPCXSTR lpszICEPwd = _X (" ice-pwd" );
216- LPCXSTR lpszFinger = _X (" fingerprint" );
217- if (0 == _tcsxnicmp (lpszAttrGroup, ppSt_ListAttr[i]->tszAttrKey , _tcsxlen (lpszAttrGroup)))
218- {
219- LPCXSTR lpszBundleStr = _X (" BUNDLE" );
220- if (0 == _tcsxnicmp (lpszBundleStr, ppSt_ListAttr[i]->tszAttrValue , _tcsxlen (lpszBundleStr)))
221- {
222- // 是否启用了端口一致绑定
223- bBundle = true ;
224- }
225- }
226- else if (0 == _tcsxnicmp (lpszAttrMux, ppSt_ListAttr[i]->tszAttrKey , _tcsxlen (lpszAttrMux)))
227- {
228- bRTCPMux = true ; // 复用端口检查
229- }
230- else if (0 == _tcsxnicmp (lpszICEUfrag, ppSt_ListAttr[i]->tszAttrKey , _tcsxlen (lpszICEUfrag)))
231- {
232- _tcsxcpy (tszICEUser, ppSt_ListAttr[i]->tszAttrValue );
233- }
234- else if (0 == _tcsxnicmp (lpszICEPwd, ppSt_ListAttr[i]->tszAttrKey , _tcsxlen (lpszICEPwd)))
235- {
236- _tcsxcpy (tszICEPass, ppSt_ListAttr[i]->tszAttrValue );
237- }
238- else if (0 == _tcsxnicmp (lpszFinger, ppSt_ListAttr[i]->tszAttrKey , _tcsxlen (lpszFinger)))
239- {
240- XCHAR tszKeyStr[MAX_PATH] = {};
241- BaseLib_OperatorString_GetKeyValue (ppSt_ListAttr[i]->tszAttrValue , _X (" " ), tszKeyStr, tszHMacStr);
242- }
243- }
211+
212+ SDPProtocol_Parse_AttrBundle (&ppSt_ListAttr, nListCount, &bAudio, &bVideo, &bRTCPMux);
213+ SDPProtocol_Parse_AttrICEUser (&ppSt_ListAttr, nListCount, tszICEUser, tszICEPass);
214+ SDPProtocol_Parse_AttrFinger (&ppSt_ListAttr, nListCount, tszAlgType, tszHMacStr);
244215 SDPProtocol_Parse_Destory (xhParse);
245216 BaseLib_OperatorMemory_Free ((XPPPMEM)&ppSt_ListAttr, nListCount);
246217 XLOG_PRINT (xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X (" WEBRTC:%s,请求的SDP信息属性解析完毕,总共解析了:%d 个属性" ), lpszClientAddr, nListCount);
247218
248219 SDPProtocol_Packet_Create (&xhPacket);
249220 SDPProtocol_Packet_Owner (xhPacket, _X (" rtc" ), xhPacket, _X (" 0.0.0.0" ));
250221 SDPProtocol_Packet_Session (xhPacket, _X (" XEngine_Session" ));
222+ SDPProtocol_Packet_KeepTime (xhPacket);
223+ SDPProtocol_Packet_Bundle (xhPacket);
251224 SDPProtocol_Packet_OptionalRange (xhPacket);
252225 SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ice-lite" ));
253- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" group" ), _X (" BUNDLE 0 1" ));
254226 SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" msid-semantic" ), _X (" WMS live/livestream" ));
255227
228+ PullStream_ClientWebRtc_SDKPacket (xhPacket, false , &st_AVInfo);
229+ PullStream_ClientWebRtc_SDKPacket (xhPacket, true , &st_AVInfo);
256230 SDPProtocol_Packet_GetPacket (xhPacket, tszRVBuffer, &nRVLen);
257231 SDPProtocol_Packet_Destory (xhPacket);
258-
232+ # endif
259233 st_HDRParam.nHttpCode = 201 ;
260234 HttpProtocol_Server_SendMsgEx (xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
261235 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
0 commit comments