Skip to content

Commit 4481651

Browse files
committed
added:webrtc client whep sdp
1 parent 7b5edf9 commit 4481651

File tree

6 files changed

+299
-8
lines changed

6 files changed

+299
-8
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <string.h>
4+
#ifdef _MSC_BUILD
5+
#include <windows.h>
6+
#include <tchar.h>
7+
#pragma comment(lib,"XEngine_BaseLib/XEngine_BaseLib")
8+
#pragma comment(lib,"XEngine_Core/XEngine_OPenSsl")
9+
#pragma comment(lib,"XEngine_Client/XClient_Socket")
10+
#pragma comment(lib,"XEngine_Client/XClient_APIHelp")
11+
#pragma comment(lib,"XEngine_StreamMedia/StreamMedia_SDPProtocol")
12+
#pragma comment(lib,"Ws2_32")
13+
#endif
14+
#include <list>
15+
#include <thread>
16+
#include <XEngine_Include/XEngine_CommHdr.h>
17+
#include <XEngine_Include/XEngine_Types.h>
18+
#include <XEngine_Include/XEngine_ProtocolHdr.h>
19+
#include <XEngine_Include/XEngine_BaseLib/BaseLib_Define.h>
20+
#include <XEngine_Include/XEngine_BaseLib/BaseLib_Error.h>
21+
#include <XEngine_Include/XEngine_Core/OPenSsl_Define.h>
22+
#include <XEngine_Include/XEngine_Core/OPenSsl_Error.h>
23+
#include <XEngine_Include/XEngine_Client/XClient_Define.h>
24+
#include <XEngine_Include/XEngine_Client/XClient_Error.h>
25+
#include <XEngine_Include/XEngine_Client/APIClient_Define.h>
26+
#include <XEngine_Include/XEngine_Client/APIClient_Error.h>
27+
#include <XEngine_Include/XEngine_Client/SslClient_Define.h>
28+
#include <XEngine_Include/XEngine_Client/SslClient_Error.h>
29+
#include <XEngine_Include/XEngine_StreamMedia/SDPProtocol_Define.h>
30+
#include <XEngine_Include/XEngine_StreamMedia/SDPProtocol_Error.h>
31+
#include "../../XEngine_Source/XEngine_UserProtocol.h"
32+
using namespace std;
33+
34+
int main()
35+
{
36+
int nMSGLen = 0;
37+
XNETHANDLE xhToken = 0;
38+
XCHAR tszMSGBuffer[2048] = {};
39+
//LPCXSTR lpszAPIUrl = _X("http://10.0.1.88:5600/rtc/v1/whep/?app=live&stream=livestream.flv");
40+
LPCXSTR lpszAPIUrl = _X("http://10.0.1.88:1985/rtc/v1/whep/?app=live&stream=livestream");
41+
LPCXSTR lpszFileCert = _X("");
42+
43+
SDPProtocol_Packet_Create(&xhToken);
44+
SDPProtocol_Packet_Owner(xhToken, _X("-"), 123456789, _X("127.0.0.1"));
45+
SDPProtocol_Packet_Session(xhToken, _X("live/stream"));
46+
SDPProtocol_Packet_KeepTime(xhToken);
47+
SDPProtocol_Packet_Bundle(xhToken);
48+
49+
SDPProtocol_Packet_OptionalAddAttr(xhToken, _X("extmap-allow-mixed"));
50+
SDPProtocol_Packet_OptionalAddAttr(xhToken, _X("msid-semantic"), _X(" WMS"));
51+
//AUDIO
52+
int nAVCount = 1;
53+
XCHAR** pptszAVList;
54+
BaseLib_OperatorMemory_Malloc((XPPPMEM)&pptszAVList, nAVCount, 64);
55+
_xstprintf(pptszAVList[0], _X("111"));
56+
57+
SDPProtocol_Packet_AddMedia(xhToken, _X("audio"), _X("UDP/TLS/RTP/SAVPF"), &pptszAVList, nAVCount, 0, 9);
58+
SDPProtocol_Packet_ClientInet(xhToken, _X("0.0.0.0"));
59+
SDPProtocol_Packet_RtcpInet(xhToken, 9);
60+
SDPProtocol_Packet_ICEUser(xhToken, _X("nzWE"), _X("xk/FvO+TXrJy6739etI/y0Kc"), true);
61+
SDPProtocol_Packet_OptionalAddAttr(xhToken, _X("fingerprint"), _X("sha-256 7E:A0:FF:BA:8F:C4:2C:E8:02:4C:82:22:96:A7:A2:B2:BF:53:79:AA:B0:0D:61:72:62:33:F9:0D:CC:A3:13:C8"));
62+
SDPProtocol_Packet_OptionalAddAttr(xhToken, _X("setup"), _X("actpass"));
63+
SDPProtocol_Packet_OnlyRWFlag(xhToken);
64+
SDPProtocol_Packet_RtcpComm(xhToken, true, false);
65+
66+
STREAMMEDIA_SDPPROTOCOL_MEDIAINFO st_SDPMedia = {};
67+
st_SDPMedia.st_RTPMap.nChannel = 2;
68+
st_SDPMedia.st_RTPMap.nSampleRate = 48000;
69+
st_SDPMedia.st_FmtpAudio.nMinPTime = 10;
70+
st_SDPMedia.st_FmtpAudio.nUseINBandfec = 1;
71+
_xstprintf(st_SDPMedia.st_RTPMap.tszCodecName, _X("opus"));
72+
st_SDPMedia.bTransportCC = true;
73+
SDPProtocol_Packet_AudioFmt(xhToken, 111, &st_SDPMedia, true);
74+
//VIDEO
75+
_xstprintf(pptszAVList[0], _X("106"));
76+
SDPProtocol_Packet_AddMedia(xhToken, _X("video"), _X("UDP/TLS/RTP/SAVPF"), &pptszAVList, nAVCount, 1, 9);
77+
SDPProtocol_Packet_ClientInet(xhToken, _X("0.0.0.0"));
78+
SDPProtocol_Packet_RtcpInet(xhToken, 9);
79+
SDPProtocol_Packet_ICEUser(xhToken, _X("nzWE"), _X("xk/FvO+TXrJy6739etI/y0Kc"), true);
80+
SDPProtocol_Packet_OptionalAddAttr(xhToken, _X("fingerprint"), _X("sha-256 7E:A0:FF:BA:8F:C4:2C:E8:02:4C:82:22:96:A7:A2:B2:BF:53:79:AA:B0:0D:61:72:62:33:F9:0D:CC:A3:13:C8"));
81+
SDPProtocol_Packet_OptionalAddAttr(xhToken, _X("setup"), _X("actpass"));
82+
SDPProtocol_Packet_OnlyRWFlag(xhToken);
83+
SDPProtocol_Packet_RtcpComm(xhToken, true, true);
84+
85+
memset(&st_SDPMedia, '\0', sizeof(STREAMMEDIA_SDPPROTOCOL_MEDIAINFO));
86+
st_SDPMedia.st_RTPMap.nSampleRate = 90000;
87+
_xstprintf(st_SDPMedia.st_RTPMap.tszCodecName, _X("H264"));
88+
st_SDPMedia.bGoogRemb = true;
89+
st_SDPMedia.bTransportCC = true;
90+
st_SDPMedia.bCcmFir = true;
91+
st_SDPMedia.bNAck = true;
92+
st_SDPMedia.bNAckPli = true;
93+
st_SDPMedia.st_FmtpVideo.bLevelAllow = true;
94+
st_SDPMedia.st_FmtpVideo.nPacketMode = 1;
95+
st_SDPMedia.st_FmtpVideo.tszLeaveId[0] = 0x42;
96+
st_SDPMedia.st_FmtpVideo.tszLeaveId[1] = 0xe0;
97+
st_SDPMedia.st_FmtpVideo.tszLeaveId[2] = 0x1f;
98+
SDPProtocol_Packet_VideoFmt(xhToken, 106, &st_SDPMedia, true);
99+
100+
SDPProtocol_Packet_GetPacket(xhToken, tszMSGBuffer, &nMSGLen);
101+
SDPProtocol_Packet_Destory(xhToken);
102+
printf("%s\n", tszMSGBuffer);
103+
104+
int nHTTPCode = 0;
105+
XCHAR* ptszMSGBuffer = NULL;
106+
if (!APIClient_Http_Request(_X("POST"), lpszAPIUrl, tszMSGBuffer, &nHTTPCode, &ptszMSGBuffer, &nMSGLen))
107+
{
108+
printf("APIClient_Http_Request:%lX\n", APIClient_GetLastError());
109+
return -1;
110+
}
111+
112+
113+
return 0;
114+
}
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup Label="ProjectConfigurations">
4+
<ProjectConfiguration Include="Debug|Win32">
5+
<Configuration>Debug</Configuration>
6+
<Platform>Win32</Platform>
7+
</ProjectConfiguration>
8+
<ProjectConfiguration Include="Release|Win32">
9+
<Configuration>Release</Configuration>
10+
<Platform>Win32</Platform>
11+
</ProjectConfiguration>
12+
<ProjectConfiguration Include="Debug|x64">
13+
<Configuration>Debug</Configuration>
14+
<Platform>x64</Platform>
15+
</ProjectConfiguration>
16+
<ProjectConfiguration Include="Release|x64">
17+
<Configuration>Release</Configuration>
18+
<Platform>x64</Platform>
19+
</ProjectConfiguration>
20+
</ItemGroup>
21+
<PropertyGroup Label="Globals">
22+
<VCProjectVersion>17.0</VCProjectVersion>
23+
<Keyword>Win32Proj</Keyword>
24+
<ProjectGuid>{b1c73edd-068b-4141-b8a1-87d5b55426b2}</ProjectGuid>
25+
<RootNamespace>APPClientWebRTC</RootNamespace>
26+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
27+
</PropertyGroup>
28+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
29+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
30+
<ConfigurationType>Application</ConfigurationType>
31+
<UseDebugLibraries>true</UseDebugLibraries>
32+
<PlatformToolset>v143</PlatformToolset>
33+
<CharacterSet>Unicode</CharacterSet>
34+
</PropertyGroup>
35+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
36+
<ConfigurationType>Application</ConfigurationType>
37+
<UseDebugLibraries>false</UseDebugLibraries>
38+
<PlatformToolset>v143</PlatformToolset>
39+
<WholeProgramOptimization>true</WholeProgramOptimization>
40+
<CharacterSet>Unicode</CharacterSet>
41+
</PropertyGroup>
42+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
43+
<ConfigurationType>Application</ConfigurationType>
44+
<UseDebugLibraries>true</UseDebugLibraries>
45+
<PlatformToolset>v143</PlatformToolset>
46+
<CharacterSet>Unicode</CharacterSet>
47+
</PropertyGroup>
48+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
49+
<ConfigurationType>Application</ConfigurationType>
50+
<UseDebugLibraries>false</UseDebugLibraries>
51+
<PlatformToolset>v143</PlatformToolset>
52+
<WholeProgramOptimization>true</WholeProgramOptimization>
53+
<CharacterSet>Unicode</CharacterSet>
54+
</PropertyGroup>
55+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
56+
<ImportGroup Label="ExtensionSettings">
57+
</ImportGroup>
58+
<ImportGroup Label="Shared">
59+
</ImportGroup>
60+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
61+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
62+
</ImportGroup>
63+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
64+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
65+
</ImportGroup>
66+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
67+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
68+
</ImportGroup>
69+
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
70+
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
71+
</ImportGroup>
72+
<PropertyGroup Label="UserMacros" />
73+
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
74+
<IncludePath>$(XEngine_Include);$(IncludePath)</IncludePath>
75+
<LibraryPath>$(XEngine_Lib32);$(LibraryPath)</LibraryPath>
76+
</PropertyGroup>
77+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
78+
<ClCompile>
79+
<WarningLevel>Level3</WarningLevel>
80+
<SDLCheck>true</SDLCheck>
81+
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
82+
<ConformanceMode>true</ConformanceMode>
83+
</ClCompile>
84+
<Link>
85+
<SubSystem>Console</SubSystem>
86+
<GenerateDebugInformation>true</GenerateDebugInformation>
87+
</Link>
88+
</ItemDefinitionGroup>
89+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
90+
<ClCompile>
91+
<WarningLevel>Level3</WarningLevel>
92+
<FunctionLevelLinking>true</FunctionLevelLinking>
93+
<IntrinsicFunctions>true</IntrinsicFunctions>
94+
<SDLCheck>true</SDLCheck>
95+
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
96+
<ConformanceMode>true</ConformanceMode>
97+
</ClCompile>
98+
<Link>
99+
<SubSystem>Console</SubSystem>
100+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
101+
<OptimizeReferences>true</OptimizeReferences>
102+
<GenerateDebugInformation>true</GenerateDebugInformation>
103+
</Link>
104+
</ItemDefinitionGroup>
105+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
106+
<ClCompile>
107+
<WarningLevel>Level3</WarningLevel>
108+
<SDLCheck>true</SDLCheck>
109+
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
110+
<ConformanceMode>true</ConformanceMode>
111+
</ClCompile>
112+
<Link>
113+
<SubSystem>Console</SubSystem>
114+
<GenerateDebugInformation>true</GenerateDebugInformation>
115+
</Link>
116+
</ItemDefinitionGroup>
117+
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
118+
<ClCompile>
119+
<WarningLevel>Level3</WarningLevel>
120+
<FunctionLevelLinking>true</FunctionLevelLinking>
121+
<IntrinsicFunctions>true</IntrinsicFunctions>
122+
<SDLCheck>true</SDLCheck>
123+
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
124+
<ConformanceMode>true</ConformanceMode>
125+
</ClCompile>
126+
<Link>
127+
<SubSystem>Console</SubSystem>
128+
<EnableCOMDATFolding>true</EnableCOMDATFolding>
129+
<OptimizeReferences>true</OptimizeReferences>
130+
<GenerateDebugInformation>true</GenerateDebugInformation>
131+
</Link>
132+
</ItemDefinitionGroup>
133+
<ItemGroup>
134+
<ClCompile Include="APPClient_WebRTC.cpp" />
135+
</ItemGroup>
136+
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
137+
<ImportGroup Label="ExtensionTargets">
138+
</ImportGroup>
139+
</Project>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<ItemGroup>
4+
<Filter Include="源文件">
5+
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
6+
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
7+
</Filter>
8+
<Filter Include="头文件">
9+
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
10+
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
11+
</Filter>
12+
<Filter Include="资源文件">
13+
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
14+
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
15+
</Filter>
16+
</ItemGroup>
17+
<ItemGroup>
18+
<ClCompile Include="APPClient_WebRTC.cpp">
19+
<Filter>源文件</Filter>
20+
</ClCompile>
21+
</ItemGroup>
22+
</Project>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<PropertyGroup />
4+
</Project>

XEngine_APPClient/VSCopy-x86.bat

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_AVHelp.dll" "./"
66
copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_AVCollect.dll" "./"
77
copy /y "%XEngine_Lib32%\XEngine_AVCodec\XEngine_VideoCodec.dll" "./"
88

9-
copy /y "%XEngine_Lib32%\XEngine_LibEx\AVCodec\avcodec-59.dll" "./"
10-
copy /y "%XEngine_Lib32%\XEngine_LibEx\AVCodec\avdevice-59.dll" "./"
11-
copy /y "%XEngine_Lib32%\XEngine_LibEx\AVCodec\avfilter-8.dll" "./"
12-
copy /y "%XEngine_Lib32%\XEngine_LibEx\AVCodec\avformat-59.dll" "./"
13-
copy /y "%XEngine_Lib32%\XEngine_LibEx\AVCodec\avutil-57.dll" "./"
14-
copy /y "%XEngine_Lib32%\XEngine_LibEx\AVCodec\postproc-56.dll" "./"
15-
copy /y "%XEngine_Lib32%\XEngine_LibEx\AVCodec\swresample-4.dll" "./"
16-
copy /y "%XEngine_Lib32%\XEngine_LibEx\AVCodec\swscale-6.dll" "./"
9+
copy /y "%XEngine_Lib32%\XEngine_StreamMedia\StreamMedia_SDPProtocol.dll" "./"
10+
11+
copy /y "%XEngine_Lib32%\XEngine_AVCodec\avcodec-60.dll" "./"
12+
copy /y "%XEngine_Lib32%\XEngine_AVCodec\avdevice-60.dll" "./"
13+
copy /y "%XEngine_Lib32%\XEngine_AVCodec\avfilter-9.dll" "./"
14+
copy /y "%XEngine_Lib32%\XEngine_AVCodec\avformat-60.dll" "./"
15+
copy /y "%XEngine_Lib32%\XEngine_AVCodec\avutil-58.dll" "./"
16+
copy /y "%XEngine_Lib32%\XEngine_AVCodec\postproc-57.dll" "./"
17+
copy /y "%XEngine_Lib32%\XEngine_AVCodec\swresample-4.dll" "./"
18+
copy /y "%XEngine_Lib32%\XEngine_AVCodec\swscale-7.dll" "./"

XEngine_APPClient/XEngine_APPClient.sln

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_SRTPull", "APPCli
1111
EndProject
1212
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_JT1078", "APPClient_JT1078\APPClient_JT1078.vcxproj", "{1AB7FF20-7BF7-4E42-AC1B-F8922271AB82}"
1313
EndProject
14+
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APPClient_WebRTC", "APPClient_WebRTC\APPClient_WebRTC.vcxproj", "{B1C73EDD-068B-4141-B8A1-87D5B55426B2}"
15+
EndProject
1416
Global
1517
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1618
Debug|x64 = Debug|x64
@@ -51,6 +53,14 @@ Global
5153
{1AB7FF20-7BF7-4E42-AC1B-F8922271AB82}.Release|x64.Build.0 = Release|x64
5254
{1AB7FF20-7BF7-4E42-AC1B-F8922271AB82}.Release|x86.ActiveCfg = Release|Win32
5355
{1AB7FF20-7BF7-4E42-AC1B-F8922271AB82}.Release|x86.Build.0 = Release|Win32
56+
{B1C73EDD-068B-4141-B8A1-87D5B55426B2}.Debug|x64.ActiveCfg = Debug|x64
57+
{B1C73EDD-068B-4141-B8A1-87D5B55426B2}.Debug|x64.Build.0 = Debug|x64
58+
{B1C73EDD-068B-4141-B8A1-87D5B55426B2}.Debug|x86.ActiveCfg = Debug|Win32
59+
{B1C73EDD-068B-4141-B8A1-87D5B55426B2}.Debug|x86.Build.0 = Debug|Win32
60+
{B1C73EDD-068B-4141-B8A1-87D5B55426B2}.Release|x64.ActiveCfg = Release|x64
61+
{B1C73EDD-068B-4141-B8A1-87D5B55426B2}.Release|x64.Build.0 = Release|x64
62+
{B1C73EDD-068B-4141-B8A1-87D5B55426B2}.Release|x86.ActiveCfg = Release|Win32
63+
{B1C73EDD-068B-4141-B8A1-87D5B55426B2}.Release|x86.Build.0 = Release|Win32
5464
EndGlobalSection
5565
GlobalSection(SolutionProperties) = preSolution
5666
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)