@@ -86,7 +86,79 @@ bool PullStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L
8686
8787 }
8888
89+ return true ;
90+ }
91+ bool PullStream_ClientWebRtc_SDKPacket (XNETHANDLE xhPacket, LPCXSTR lpszSMSAddr, bool bVideo, XENGINE_PROTOCOL_AVINFO* pSt_AVInfo)
92+ {
93+ XCHAR** pptszAVList;
94+ BaseLib_OperatorMemory_Malloc ((XPPPMEM)&pptszAVList, 1 , MAX_PATH);
95+
96+ if (bVideo)
97+ {
98+ _tcsxcpy (pptszAVList[0 ], _X (" 106" ));
99+ SDPProtocol_Packet_AddMedia (xhPacket, _X (" video" ), _X (" UDP/TLS/RTP/SAVPF" ), &pptszAVList, 1 );
100+ }
101+ else
102+ {
103+ _tcsxcpy (pptszAVList[0 ], _X (" 111" ));
104+ SDPProtocol_Packet_AddMedia (xhPacket, _X (" audio" ), _X (" UDP/TLS/RTP/SAVPF" ), &pptszAVList, 1 );
105+ }
106+ // 生成用户和密码
107+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ice-ufrag" ), " j107le40" );
108+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ice-pwd" ), " 3321308h8i6vt3769r6638l1409d50jz" );
109+
110+ int nDLen = 0 ;
111+ XBYTE tszDigestStr[MAX_PATH] = {};
112+ XCHAR tszDigestHex[MAX_PATH] = {};
113+ int nPos = _xstprintf (tszDigestHex, _X (" sha-256 " ));
114+ OPenSsl_Api_Digest (st_ServiceConfig.st_XPull .st_PullWebRtc .tszCsrStr , tszDigestStr, &nDLen, true , XENGINE_OPENSSL_API_DIGEST_SHA256);
115+ for (int i = 0 ; i < nDLen; i++)
116+ {
117+ int nRet = _xstprintf (tszDigestHex + nPos, _X (" %02X" ), tszDigestStr[i]);
118+ nPos += nRet;
119+ tszDigestHex[nPos] = ' :' ;
120+ nPos++;
121+ }
122+ tszDigestHex[nPos - 1 ] = ' \0 ' ;
123+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" fingerprint" ), tszDigestHex);
124+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" setup" ), _X (" passive" ));
125+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" extmap" ), _X (" 3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" ));
126+ SDPProtocol_Packet_OnlyRWFlag (xhPacket, true );
127+ SDPProtocol_Packet_RtcpComm (xhPacket, true , true );
128+
129+ if (bVideo)
130+ {
131+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" mid" ), _X (" 1" ));
132+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtpmap" ), _X (" 106 oH264/90000" ));
133+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtcp-fb" ), _X (" 106 transport-cc" ));
134+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtcp-fb" ), _X (" 106 nack" ));
135+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtcp-fb" ), _X (" 106 nack pli" ));
136+
137+ int nSPSLen = 0 ;
138+ XCHAR tszSPSBuffer[MAX_PATH] = {};
139+ STREAMMEDIA_SDPPROTOCOL_MEDIAINFO st_SDPMedia = {};
140+
141+ AVHelp_Parse_VideoHdr (pSt_AVInfo->st_VideoInfo .tszVInfo , pSt_AVInfo->st_VideoInfo .nVLen , ENUM_XENGINE_AVCODEC_VIDEO_TYPE_H264, NULL , (XBYTE *)tszSPSBuffer, NULL , NULL , NULL , &nSPSLen, NULL , NULL , NULL );
142+
143+ st_SDPMedia.st_FmtpVideo .nPacketMode = 1 ;
144+ st_SDPMedia.st_FmtpVideo .tszLeaveId [0 ] = tszSPSBuffer[0 ];
145+ st_SDPMedia.st_FmtpVideo .tszLeaveId [1 ] = tszSPSBuffer[1 ];
146+ st_SDPMedia.st_FmtpVideo .tszLeaveId [2 ] = tszSPSBuffer[2 ];
147+ SDPProtocol_Packet_VideoFmt (xhPacket, 106 , &st_SDPMedia, true );
148+ }
149+ else
150+ {
151+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" mid" ), _X (" 0" ));
152+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtpmap" ), _X (" 111 opus/48000/2" ));
153+ SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtcp-fb" ), _X (" 111 transport-cc" ));
154+ }
89155
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
159+ SDPProtocol_Packet_OptionalCandidate (xhPacket, st_ServiceConfig.tszIPAddr , st_ServiceConfig.nRTCPort );
160+ #endif
161+ BaseLib_OperatorMemory_Free ((XPPPMEM)&pptszAVList, 1 );
90162 return true ;
91163}
92164bool PullStream_ClientWebRtc_Handle (RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen)
@@ -101,7 +173,10 @@ bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
101173
102174 st_HDRParam.nHttpCode = 200 ; // HTTP CODE码
103175 st_HDRParam.bIsClose = true ; // 收到回复后就关闭
104-
176+ /*
177+ XENGINE_PROTOCOL_AVINFO st_AVInfo = {};
178+ ModuleSession_PushStream_GetAVInfo(lpszSMSAddr, &st_AVInfo);
179+ */
105180 if (!SDPProtocol_Parse_Create (&xhParse, lpszMsgBuffer, nMsgLen))
106181 {
107182 ModuleProtocol_Packet_Comm (tszRVBuffer, &nRVLen, NULL , 400 , " sdp is incorrent" );
@@ -161,48 +236,13 @@ bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
161236 SDPProtocol_Packet_Owner (xhPacket, _X (" rtc" ), xhPacket, _X (" 0.0.0.0" ));
162237 SDPProtocol_Packet_Session (xhPacket, _X (" XEngine_Session" ));
163238 SDPProtocol_Packet_OptionalRange (xhPacket);
164-
165- XCHAR** pptszAVList;
166- BaseLib_OperatorMemory_Malloc ((XPPPMEM)&pptszAVList, 1 , MAX_PATH);
167- _tcsxcpy (pptszAVList[0 ], _X (" 111" ));
168-
169239 SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ice-lite" ));
170240 SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" group" ), _X (" BUNDLE 0 1" ));
171241 SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" msid-semantic" ), _X (" WMS live/livestream" ));
172- SDPProtocol_Packet_AddMedia (xhPacket, _X (" audio" ), _X (" UDP/TLS/RTP/SAVPF" ), &pptszAVList, 1 );
173-
174- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ice-ufrag" ), " j107le40" );
175- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ice-pwd" ), " 3321308h8i6vt3769r6638l1409d50jz" );
176-
177- int nDLen = 0 ;
178- XBYTE tszDigestStr[MAX_PATH] = {};
179- XCHAR tszDigestHex[MAX_PATH] = {};
180- int nPos = _xstprintf (tszDigestHex, _X (" sha-256 " ));
181- OPenSsl_Api_Digest (st_ServiceConfig.st_XPull .st_PullWebRtc .tszCsrStr , tszDigestStr, &nDLen, true , XENGINE_OPENSSL_API_DIGEST_SHA256);
182- for (int i = 0 ; i < nDLen; i++)
183- {
184- int nRet = _xstprintf (tszDigestHex + nPos, _X (" %02X" ), tszDigestStr[i]);
185- nPos += nRet;
186- tszDigestHex[nPos] = ' :' ;
187- nPos++;
188- }
189- tszDigestHex[nPos - 1 ] = ' \0 ' ;
190242
191- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" fingerprint" ), tszDigestHex);
192- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" setup" ), _X (" passive" ));
193- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" mid" ), _X (" 0" ));
194- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" extmap" ), _X (" 3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" ));
195- SDPProtocol_Packet_OnlyRWFlag (xhPacket, true );
196- SDPProtocol_Packet_RtcpComm (xhPacket, true , true );
197- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtpmap" ), _X (" 111 opus/48000/2" ));
198- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" rtcp-fb" ), _X (" 111 transport-cc" ));
199- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ssrc" ), _X (" 2124085006 cname:79a9722580589zr5" ));
200- SDPProtocol_Packet_OptionalAddAttr (xhPacket, _X (" ssrc" ), _X (" 2124085006 label:audio-23z8fj2g" ));
201-
202243 SDPProtocol_Packet_GetPacket (xhPacket, tszRVBuffer, &nRVLen);
203244 SDPProtocol_Packet_Destory (xhPacket);
204- BaseLib_OperatorMemory_Free ((XPPPMEM)&pptszAVList, 1 );
205-
245+
206246 st_HDRParam.nHttpCode = 201 ;
207247 HttpProtocol_Server_SendMsgEx (xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
208248 XEngine_Network_Send (lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
0 commit comments