Skip to content

Commit 706161d

Browse files
committed
modify:continue to improve the sdp of webrtc
1 parent 63a3d5c commit 706161d

File tree

1 file changed

+77
-37
lines changed

1 file changed

+77
-37
lines changed

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientWebRtc.cpp

Lines changed: 77 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
92164
bool 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

Comments
 (0)