|
10 | 10 | // Purpose: WEBRTC拉流服务 |
11 | 11 | // History: |
12 | 12 | *********************************************************************/ |
13 | | -int PullStream_ClientProtocol_Dtls(LPCXSTR lpszMSGBuffer, int nMSGLen) |
| 13 | +bool PullStream_ClientProtocol_Dtls(LPCXSTR lpszMSGBuffer, int nMSGLen) |
14 | 14 | { |
15 | 15 | // DTLS有可能以多种不同的记录层类型开头,这里检查它是否是handshake(0x16) |
16 | 16 | return nMSGLen >= 13 && lpszMSGBuffer[0] == 0x16; |
17 | 17 | } |
18 | | -int PullStream_ClientProtocol_Stun(LPCXSTR lpszMSGBuffer, int nMSGLen) |
| 18 | +bool PullStream_ClientProtocol_Stun(LPCXSTR lpszMSGBuffer, int nMSGLen) |
19 | 19 | { |
20 | 20 | // STUN消息的类型字段(前两位为00)以及魔术cookie字段 |
21 | | - return nMSGLen >= 20 && (lpszMSGBuffer[0] & 0xC0) == 0x00 && lpszMSGBuffer[4] == 0x21 && lpszMSGBuffer[5] == 0x12 && lpszMSGBuffer[6] == 0xA4 && lpszMSGBuffer[7] == 0x42; |
| 21 | + return (nMSGLen >= 20) && ((lpszMSGBuffer[0] & 0xC0) == 0x00) && (lpszMSGBuffer[4] == 0x21) && (lpszMSGBuffer[5] == 0x12) && ((XBYTE)lpszMSGBuffer[6] == 0xA4) && (lpszMSGBuffer[7] == 0x42); |
22 | 22 | } |
23 | 23 | bool PullStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMsgBuffer, int nMsgLen) |
24 | 24 | { |
@@ -67,12 +67,19 @@ bool PullStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L |
67 | 67 | int nMSGLen = 0; |
68 | 68 | XCHAR tszTMPBuffer[1024] = {}; |
69 | 69 | XCHAR tszMSGBuffer[1024] = {}; |
| 70 | + XCHAR tszICEPass[MAX_PATH] = {}; |
| 71 | + |
| 72 | + ModuleSession_PullStream_RTCGet(tszUserStr, NULL, NULL, tszICEPass); |
70 | 73 |
|
71 | 74 | NatProtocol_StunNat_BuildAttr(tszTMPBuffer, &nTMPLen, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_ATTR_USERNAME, tszUserStr, _tcsxlen(tszUserStr)); |
72 | 75 | NatProtocol_StunNat_BuildMapAddress(tszTMPBuffer + nTMPLen, &nTMPLen, st_ServiceConfig.tszIPAddr, st_ServiceConfig.nRTCPort, true); |
73 | | - //NatProtocol_StunNat_BuildMSGIntegrity(tszTMPBuffer + nTMPLen, &nTMPLen, tszTMPBuffer, nTMPLen, ); |
74 | | - NatProtocol_StunNat_Packet(tszMSGBuffer, &nMSGLen, (LPCXSTR)st_NatClient.byTokenStr, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_CLASS_FLAGS, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_ATTR_MAPPED_ADDRESS); |
| 76 | + //NatProtocol_StunNat_BuildMSGIntegrity(tszTMPBuffer + nTMPLen, &nTMPLen, tszTMPBuffer, nTMPLen, "123456789"); |
| 77 | + NatProtocol_StunNat_Packet(tszMSGBuffer, &nTMPLen, (LPCXSTR)st_NatClient.byTokenStr, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_CLASS_FLAGS, RFCCOMPONENTS_NATCLIENT_PROTOCOL_STUN_ATTR_MAPPED_ADDRESS); |
| 78 | + //NatProtocol_StunNat_BuildFinger(tszMSGBuffer + nTMPLen, &nMSGLen, tszMSGBuffer, nTMPLen); |
75 | 79 | BaseLib_OperatorMemory_Free((XPPPMEM)&ppSt_ListAttr, nAttrCount); |
| 80 | + |
| 81 | + XEngine_Network_Send(lpszClientAddr, tszMSGBuffer, nMsgLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PUSH_RTC); |
| 82 | + XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("STUN客户端:%s,请求的STUN协议处理成功,请求的用户:%s"), lpszClientAddr, tszUserStr); |
76 | 83 | } |
77 | 84 | else |
78 | 85 | { |
@@ -121,7 +128,7 @@ bool PullStream_ClientWebRtc_SDKPacket(XNETHANDLE xhPacket, bool bVideo, XENGINE |
121 | 128 | if (bVideo) |
122 | 129 | { |
123 | 130 | SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("mid"), _X("1")); |
124 | | - SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtpmap"), _X("106 oH264/90000")); |
| 131 | + SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtpmap"), _X("106 H264/90000")); |
125 | 132 | SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtcp-fb"), _X("106 transport-cc")); |
126 | 133 | SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtcp-fb"), _X("106 nack")); |
127 | 134 | SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("rtcp-fb"), _X("106 nack pli")); |
@@ -221,14 +228,16 @@ bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, |
221 | 228 | SDPProtocol_Packet_GetPacket(xhPacket, tszRVBuffer, &nRVLen); |
222 | 229 | SDPProtocol_Packet_Destory(xhPacket); |
223 | 230 |
|
| 231 | + XCHAR tszTokenStr[MAX_PATH] = {}; |
224 | 232 | XCHAR tszHDRStr[MAX_PATH] = {}; |
225 | 233 | XCHAR tszUserStr[MAX_PATH] = {}; |
226 | 234 |
|
| 235 | + BaseLib_OperatorHandle_CreateStr(tszTokenStr, 10); |
227 | 236 | _xstprintf(tszUserStr, _X("%s:%s"), st_ServiceConfig.st_XPull.st_PullWebRtc.tszICEUser, tszICEUser); |
228 | | - _xstprintf(tszHDRStr, _X("Location: /rtc/v1/whip/?action=delete&token=6150ecg33&app=live&stream=livestream.flv&session=%s\r\n"), tszUserStr); |
| 237 | + _xstprintf(tszHDRStr, _X("Location: /rtc/v1/whip/?action=delete&token=%s&app=live&stream=livestream.flv&session=%s\r\n"), tszTokenStr, tszUserStr); |
229 | 238 |
|
230 | 239 | ModuleSession_PullStream_Insert(tszUserStr, tszSMSAddr, tszPushAddr, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_PULL_RTC); |
231 | | - ModuleSession_PullStream_RTCSet(tszUserStr, tszICEUser, tszICEPass, tszHMacStr); |
| 240 | + ModuleSession_PullStream_RTCSet(tszUserStr, tszTokenStr, tszICEUser, tszICEPass, tszHMacStr); |
232 | 241 |
|
233 | 242 | st_HDRParam.nHttpCode = 201; |
234 | 243 | HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen, tszHDRStr); |
|
0 commit comments