Skip to content

Commit 1f2186a

Browse files
committed
added:webrtc code file
1 parent b5db961 commit 1f2186a

File tree

7 files changed

+116
-2
lines changed

7 files changed

+116
-2
lines changed

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ LIB = -lXEngine_BaseLib -lXEngine_Algorithm -lXEngine_Core -lXEngine_ManagePool
1212
-lXEngine_ModuleConfigure -lXEngine_ModuleProtocol -lXEngine_ModuleSession -lXEngine_ModuleHelp -lXEngine_ModuleQueue \
1313
-ljsoncpp -lsrt-gnutls
1414
LIBEX =
15-
OBJECTS = PullStream_ClientGet.o PullStream_ClientRtsp.o \
15+
OBJECTS = PullStream_ClientGet.o PullStream_ClientRtsp.o PullStream_ClientWebRtc.o \
1616
PushStream_JT1078Task.o PushStream_RTMPTask.o PushStream_XStreamTask.o PushStream_SrtTask.o \
1717
StreamMedia_HTTPApi.o \
1818
XEngine_AVPacket.o XEngine_Configure.o XEngine_HttpTask.o XEngine_Network.o XEngine_StreamMediaApp.o
@@ -56,6 +56,8 @@ PullStream_ClientGet.o:./StreamMedia_PullStream/PullStream_ClientGet.cpp
5656
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./StreamMedia_PullStream/PullStream_ClientGet.cpp
5757
PullStream_ClientRtsp.o:./StreamMedia_PullStream/PullStream_ClientRtsp.cpp
5858
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./StreamMedia_PullStream/PullStream_ClientRtsp.cpp
59+
PullStream_ClientWebRtc.o:./StreamMedia_PullStream/PullStream_ClientWebRtc.cpp
60+
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./StreamMedia_PullStream/PullStream_ClientWebRtc.cpp
5961

6062
PushStream_XStreamTask.o:./StreamMedia_PushStream/PushStream_XStreamTask.cpp
6163
$(CC) $(DEBUG) $(FLAGS) $(UNICODE) $(PLATVER) $(LOADHDR) ./StreamMedia_PushStream/PushStream_XStreamTask.cpp
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#include "../XEngine_Hdr.h"
2+
/********************************************************************
3+
// Created: 2024/01/11 10:31:20
4+
// File Name: D:\XEngine_StreamMedia\XEngine_Source\XEngine_ServiceApp\XEngine_StreamMediaApp\StreamMedia_PullStream\PullStream_ClientWebRtc.cpp
5+
// File Path: D:\XEngine_StreamMedia\XEngine_Source\XEngine_ServiceApp\XEngine_StreamMediaApp\StreamMedia_PullStream
6+
// File Base: PullStream_ClientWebRtc
7+
// File Ext: cpp
8+
// Project: XEngine(网络通信引擎)
9+
// Author: qyt
10+
// Purpose: WEBRTC拉流服务
11+
// History:
12+
*********************************************************************/
13+
bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen)
14+
{
15+
int nRVLen = 0;
16+
int nSDLen = 0;
17+
XNETHANDLE xhParse = 0;
18+
XNETHANDLE xhPacket = 0;
19+
XCHAR tszRVBuffer[4096] = {};
20+
XCHAR tszSDBuffer[4096] = {};
21+
RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam = {};
22+
23+
st_HDRParam.nHttpCode = 200; //HTTP CODE码
24+
st_HDRParam.bIsClose = true; //收到回复后就关闭
25+
26+
if (!SDPProtocol_Parse_Create(&xhParse, lpszMsgBuffer, nMsgLen))
27+
{
28+
ModuleProtocol_Packet_Comm(tszRVBuffer, &nRVLen, NULL, 400, "sdp is incorrent");
29+
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
30+
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
31+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("WEBRTC:%s,请求拉流的SDP不正确,错误:%lX"), lpszClientAddr, SDPProtocol_GetLastError());
32+
return false;
33+
}
34+
35+
bool bBundle = false;
36+
bool bRTCPMux = false;
37+
int nListCount = 0;
38+
STREAMMEDIA_SDPPROTOCOL_ATTR** ppSt_ListAttr;
39+
SDPProtocol_Parse_GetAttr(xhParse, &ppSt_ListAttr, &nListCount);
40+
for (int i = 0; i < nListCount; i++)
41+
{
42+
LPCXSTR lpszAttrGroup = _X("group");
43+
LPCXSTR lpszAttrMux = _X("rtcp-mux");
44+
if (0 == _tcsxnicmp(lpszAttrGroup, ppSt_ListAttr[i]->tszAttrKey, _tcsxlen(lpszAttrGroup)))
45+
{
46+
LPCXSTR lpszBundleStr = _X("BUNDLE");
47+
if (0 == _tcsxnicmp(lpszBundleStr, ppSt_ListAttr[i]->tszAttrValue, _tcsxlen(lpszBundleStr)))
48+
{
49+
//是否启用了端口一致绑定
50+
bBundle = true;
51+
break;
52+
}
53+
}
54+
else if (0 == _tcsxnicmp(lpszAttrMux, ppSt_ListAttr[i]->tszAttrKey, _tcsxlen(lpszAttrMux)))
55+
{
56+
bRTCPMux = true; //复用端口检查
57+
}
58+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("SDPProtocol_Parse_GetAttr:%s-%s"), ppSt_ListAttr[i]->tszAttrKey, ppSt_ListAttr[i]->tszAttrValue);
59+
}
60+
61+
SDPProtocol_Packet_Create(&xhPacket);
62+
SDPProtocol_Packet_Owner(xhPacket, _X("rtc"), xhPacket, _X("0.0.0.0"));
63+
SDPProtocol_Packet_Session(xhPacket, _X("XEngine_Session"));
64+
SDPProtocol_Packet_OptionalRange(xhPacket);
65+
66+
XCHAR** pptszAVList;
67+
BaseLib_OperatorMemory_Malloc((XPPPMEM)&pptszAVList, 1, MAX_PATH);
68+
_tcsxcpy(pptszAVList[0], _X("111"));
69+
70+
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("ice-lite"));
71+
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("group"), _X("BUNDLE 0 1"));
72+
SDPProtocol_Packet_OptionalAddAttr(xhPacket, _X("msid-semantic"), _X("WMS live/livestream"));
73+
SDPProtocol_Packet_AddMedia(xhPacket, _X("audio"), _X("UDP/TLS/RTP/SAVPF"), &pptszAVList, 1);
74+
75+
ModuleProtocol_Packet_Comm(tszRVBuffer, &nRVLen);
76+
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
77+
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
78+
SDPProtocol_Parse_Destory(xhParse);
79+
SDPProtocol_Packet_Destory(xhPacket);
80+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("WEBRTC:%s,WHIP协议拉流请求成功"), lpszClientAddr);
81+
return true;
82+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#pragma once
2+
/********************************************************************
3+
// Created: 2024/01/11 10:30:51
4+
// File Name: D:\XEngine_StreamMedia\XEngine_Source\XEngine_ServiceApp\XEngine_StreamMediaApp\StreamMedia_PullStream\PullStream_ClientWebRtc.h
5+
// File Path: D:\XEngine_StreamMedia\XEngine_Source\XEngine_ServiceApp\XEngine_StreamMediaApp\StreamMedia_PullStream
6+
// File Base: PullStream_ClientWebRtc
7+
// File Ext: h
8+
// Project: XEngine(网络通信引擎)
9+
// Author: qyt
10+
// Purpose: WEBRTC拉流服务
11+
// History:
12+
*********************************************************************/
13+
bool PullStream_ClientWebRtc_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen);

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Hdr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ using namespace std;
8383
#include "./StreamMedia_PushStream/PushStream_SrtTask.h"
8484
#include "./StreamMedia_PullStream/PullStream_ClientGet.h"
8585
#include "./StreamMedia_PullStream/PullStream_ClientRtsp.h"
86+
#include "./StreamMedia_PullStream/PullStream_ClientWebRtc.h"
8687
/********************************************************************
8788
// Created: 2023/06/04 10:35:46
8889
// File Name: D:\XEngine_StreamMedia\XEngine_Source\XEngine_ServiceApp\XEngine_StreamMediaApp\XEngine_Hdr.h

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_HttpTask.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,20 @@ bool XEngine_HTTPTask_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR
114114
{
115115
HTTPApi_Management_Task(lpszClientAddr, &pptszList, nListCount);
116116
}
117+
else if (0 == _tcsxnicmp(lpszStreamStr, tszKey, _tcsxlen(lpszStreamStr)))
118+
{
119+
LPCXSTR lpszTypeStr = _X("webrtc");
120+
BaseLib_OperatorString_GetKeyValue(pptszList[2], "=", tszKey, tszValue);
121+
if (0 == _tcsxnicmp(lpszTypeStr, tszValue, _tcsxlen(lpszTypeStr)))
122+
{
123+
PullStream_ClientWebRtc_Handle(pSt_HTTPParam, lpszClientAddr, lpszMsgBuffer, nMsgLen);
124+
}
125+
}
117126
}
118127
else if (0 == _tcsxnicmp(lpszMethodGet, pSt_HTTPParam->tszHttpMethod, _tcsxlen(lpszMethodGet)))
119128
{
120129
//获得函数名
121130
BaseLib_OperatorString_GetKeyValue(pptszList[0], "=", tszKey, tszValue);
122-
123131
if (0 == _tcsxnicmp(lpszStreamStr, tszKey, _tcsxlen(lpszStreamStr)))
124132
{
125133
//如果是拉流请求

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.vcxproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@
146146
<ClCompile Include="StreamMedia_HTTPApi\StreamMedia_HTTPApi.cpp" />
147147
<ClCompile Include="StreamMedia_PullStream\PullStream_ClientGet.cpp" />
148148
<ClCompile Include="StreamMedia_PullStream\PullStream_ClientRtsp.cpp" />
149+
<ClCompile Include="StreamMedia_PullStream\PullStream_ClientWebRtc.cpp" />
149150
<ClCompile Include="StreamMedia_PushStream\PushStream_SrtTask.cpp" />
150151
<ClCompile Include="StreamMedia_PushStream\PushStream_XStreamTask.cpp" />
151152
<ClCompile Include="StreamMedia_PushStream\PushStream_JT1078Task.cpp" />
@@ -160,6 +161,7 @@
160161
<ClInclude Include="StreamMedia_HTTPApi\StreamMedia_HTTPApi.h" />
161162
<ClInclude Include="StreamMedia_PullStream\PullStream_ClientGet.h" />
162163
<ClInclude Include="StreamMedia_PullStream\PullStream_ClientRtsp.h" />
164+
<ClInclude Include="StreamMedia_PullStream\PullStream_ClientWebRtc.h" />
163165
<ClInclude Include="StreamMedia_PushStream\PushStream_SrtTask.h" />
164166
<ClInclude Include="StreamMedia_PushStream\PushStream_XStreamTask.h" />
165167
<ClInclude Include="StreamMedia_PushStream\PushStream_JT1078Task.h" />

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@
6969
<ClCompile Include="StreamMedia_PullStream\PullStream_ClientRtsp.cpp">
7070
<Filter>源文件\StreamMedia_PullStream</Filter>
7171
</ClCompile>
72+
<ClCompile Include="StreamMedia_PullStream\PullStream_ClientWebRtc.cpp">
73+
<Filter>源文件\StreamMedia_PullStream</Filter>
74+
</ClCompile>
7275
</ItemGroup>
7376
<ItemGroup>
7477
<ClInclude Include="XEngine_Configure.h">
@@ -107,5 +110,8 @@
107110
<ClInclude Include="StreamMedia_PullStream\PullStream_ClientRtsp.h">
108111
<Filter>头文件\StreamMedia_PullStream</Filter>
109112
</ClInclude>
113+
<ClInclude Include="StreamMedia_PullStream\PullStream_ClientWebRtc.h">
114+
<Filter>头文件\StreamMedia_PullStream</Filter>
115+
</ClInclude>
110116
</ItemGroup>
111117
</Project>

0 commit comments

Comments
 (0)