Skip to content

Commit 148b26b

Browse files
committed
improved:webrtc sdp parse and packet
1 parent 653c353 commit 148b26b

File tree

1 file changed

+21
-47
lines changed

1 file changed

+21
-47
lines changed

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientWebRtc.cpp

Lines changed: 21 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
164162
bool 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

Comments
 (0)