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+ }
0 commit comments