Skip to content

Commit 95e4185

Browse files
committed
modify:sdp protocol packet match to xengien v8.21
1 parent cc63534 commit 95e4185

File tree

2 files changed

+63
-85
lines changed

2 files changed

+63
-85
lines changed

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientMethod.cpp

Lines changed: 60 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -14,48 +14,45 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
1414
{
1515
int nRVLen = 0;
1616
int nSDLen = 0;
17-
XCHAR tszRVBuffer[4096];
18-
XCHAR tszSDBuffer[4096];
19-
LPCXSTR lpszOPTIONStr = _X("OPTIONS");
20-
LPCXSTR lpszDESCRIBEStr = _X("DESCRIBE");
21-
LPCXSTR lpszSETUPStr = _X("SETUP");
22-
RFCCOMPONENTS_HTTP_HDRPARAM st_HDRParam;
17+
XCHAR tszRVBuffer[4096] = {};
18+
XCHAR tszSDBuffer[4096] = {};
19+
RTSPPROTOCOL_REQUEST st_RTSPRequest = {};
20+
RTSPPROTOCOL_RESPONSE st_RTSPResponse = {};
2321

24-
memset(tszRVBuffer, '\0', sizeof(tszRVBuffer));
25-
memset(tszSDBuffer, '\0', sizeof(tszSDBuffer));
26-
memset(&st_HDRParam, '\0', sizeof(RFCCOMPONENTS_HTTP_HDRPARAM));
22+
RTSPProtocol_REQParse_Request(&st_RTSPRequest, pSt_HTTPParam->tszHttpMethod, pSt_HTTPParam->tszHttpUri, pSt_HTTPParam->tszHttpVer, ppptszListHdr, nListCount);
2723

28-
st_HDRParam.nHttpCode = 200; //HTTP CODE码
29-
st_HDRParam.bIsClose = true; //收到回复后就关闭
30-
31-
if (0 == _tcsxnicmp(pSt_HTTPParam->tszHttpMethod, lpszOPTIONStr, _tcsxlen(pSt_HTTPParam->tszHttpMethod)))
24+
st_RTSPResponse.nCode = 200;
25+
st_RTSPResponse.nCSeq = st_RTSPRequest.nCseq;
26+
if (ENUM_RTSPPROTOCOL_METHOD_TYPE_OPTIONS == st_RTSPRequest.enMethod)
3227
{
3328
//OPTIONS rtsp://10.0.1.89:554/480p.264 RTSP/1.0
3429
XCHAR tszPushAddr[MAX_PATH];
3530
XCHAR tszSMSAddr[MAX_PATH];
3631

3732
memset(tszPushAddr, '\0', sizeof(tszPushAddr));
3833
memset(tszSMSAddr, '\0', sizeof(tszSMSAddr));
34+
35+
ModuleHelp_Rtsp_GetSMSAddr(st_RTSPRequest.tszUrl, tszSMSAddr);
3936
if (!ModuleSession_PushStream_FindStream(tszSMSAddr, tszPushAddr))
4037
{
41-
ModuleProtocol_Packet_Comm(tszRVBuffer, &nRVLen, NULL, 404, "not found");
42-
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
38+
st_RTSPResponse.nCode = 404;
39+
RTSPProtocol_REPPacket_Response(tszSDBuffer, &nSDLen, &st_RTSPResponse);
4340
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
4441
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("RTSP:%s,请求拉流的URL参数不正确:%s,错误:%lX"), lpszClientAddr, tszSMSAddr, ModuleSession_GetLastError());
4542
return false;
4643
}
47-
RTSPPROTOCOL_REQUEST st_RTSPRequest;
48-
RTSPPROTOCOL_OPTIONS st_RTSPOPtion;
49-
50-
memset(&st_RTSPRequest, '\0', sizeof(RTSPPROTOCOL_REQUEST));
51-
memset(&st_RTSPOPtion, 0x01, sizeof(RTSPPROTOCOL_OPTIONS));
52-
53-
RTSPProtocol_CoreParse_Parse(&st_RTSPRequest, lpszMsgBuffer, nMsgLen);
54-
RTSPProtocol_CorePacket_Option(tszSDBuffer, &nSDLen, &st_RTSPOPtion, st_RTSPRequest.nCseq);
44+
st_RTSPResponse.st_OPTion.bAnnounce = true;
45+
st_RTSPResponse.st_OPTion.bDescribe = true;
46+
st_RTSPResponse.st_OPTion.bOptions = true;
47+
st_RTSPResponse.st_OPTion.bPlay = true;
48+
st_RTSPResponse.st_OPTion.bSetup = true;
49+
st_RTSPResponse.st_OPTion.bTeardown = true;
50+
51+
RTSPProtocol_REPPacket_Response(tszSDBuffer, &nSDLen, &st_RTSPResponse);
5552
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
5653
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("RTSP:%s,请求OPTION选项成功,请求的拉流ID:%s"), lpszClientAddr, tszSMSAddr);
5754
}
58-
else if (0 == _tcsxnicmp(pSt_HTTPParam->tszHttpMethod, lpszDESCRIBEStr, _tcsxlen(pSt_HTTPParam->tszHttpMethod)))
55+
else if (ENUM_RTSPPROTOCOL_METHOD_TYPE_DESCRIBE == st_RTSPRequest.enMethod)
5956
{
6057
//DESCRIBE rtsp://10.0.1.89:554/480p.264 RTSP/1.0
6158
XCHAR tszPushAddr[MAX_PATH];
@@ -66,100 +63,81 @@ bool PullStream_ClientMethod_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam,
6663
memset(tszSMSAddr, '\0', sizeof(tszSMSAddr));
6764
memset(&st_AVInfo, '\0', sizeof(XENGINE_PROTOCOL_AVINFO));
6865

66+
ModuleHelp_Rtsp_GetSMSAddr(st_RTSPRequest.tszUrl, tszSMSAddr);
6967
if (!ModuleSession_PushStream_FindStream(tszSMSAddr, tszPushAddr))
7068
{
71-
ModuleProtocol_Packet_Comm(tszRVBuffer, &nRVLen, NULL, 404, "not found");
72-
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
69+
st_RTSPResponse.nCode = 404;
70+
RTSPProtocol_REPPacket_Response(tszSDBuffer, &nSDLen, &st_RTSPResponse);
7371
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
7472
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("RTSP:%s,请求拉流的URL参数不正确:%s,错误:%lX"), lpszClientAddr, tszSMSAddr, ModuleSession_GetLastError());
7573
return false;
7674
}
77-
RTSPPROTOCOL_REQUEST st_RTSPRequest;
78-
memset(tszSDBuffer, '\0', sizeof(tszSDBuffer));
79-
80-
RTSPProtocol_CoreParse_Parse(&st_RTSPRequest, lpszMsgBuffer, nMsgLen);
8175
ModuleSession_PushStream_GetAVInfo(tszPushAddr, &st_AVInfo);
8276

8377
int nSPSLen = 0;
8478
int nPPSLen = 0;
85-
XBYTE tszSPSBuffer[512];
86-
XBYTE tszPPSBuffer[512];
87-
88-
memset(tszSPSBuffer, '\0', sizeof(tszSPSBuffer));
89-
memset(tszPPSBuffer, '\0', sizeof(tszPPSBuffer));
90-
79+
XBYTE tszSPSBuffer[512] = {};
80+
XBYTE tszPPSBuffer[512] = {};
9181
AVHelp_Parse_VideoHdr(st_AVInfo.st_VideoInfo.tszVInfo, st_AVInfo.st_VideoInfo.nVLen, ENUM_XENGINE_AVCODEC_VIDEO_TYPE_H264, NULL, tszSPSBuffer, tszPPSBuffer, NULL, NULL, &nSPSLen, &nPPSLen, NULL, NULL);
92-
9382
XNETHANDLE xhSDPToken = 0;
9483
__int64x nSessionID = 0;
95-
RfcComponents_SDPPacket_Create(&xhSDPToken);
96-
RfcComponents_SDPPacket_Owner(xhSDPToken, _X("-"), nSessionID, _X("0.0.0.0"));
97-
RfcComponents_SDPPacket_Session(xhSDPToken, tszSMSAddr);
98-
RfcComponents_SDPPacket_KeepTime(xhSDPToken);
84+
SDPProtocol_Packet_Create(&xhSDPToken);
85+
SDPProtocol_Packet_Owner(xhSDPToken, _X("XEngine"), nSessionID, _X("0.0.0.0"));
86+
SDPProtocol_Packet_Session(xhSDPToken, tszSMSAddr);
87+
SDPProtocol_Packet_KeepTime(xhSDPToken);
88+
SDPProtocol_Packet_Control(xhSDPToken, -1);
9989
//配置视频属性
100-
RfcComponents_SDPPacket_AddMedia(xhSDPToken, _X("video"), 96);
101-
RFCCOMPONENTS_SDPPROTOCOL_MEDIAVIDEO st_SDPMediaVideo;
102-
memset(&st_SDPMediaVideo, '\0', sizeof(RFCCOMPONENTS_SDPPROTOCOL_MEDIAVIDEO));
90+
int nListCount = 0;
91+
XCHAR** pptszAVList;
92+
BaseLib_OperatorMemory_Malloc((XPPPMEM)&pptszAVList, 1, 64);
93+
_tcsxcpy(pptszAVList[0], "96");
10394

104-
st_SDPMediaVideo.nTrackID = 1;
105-
st_SDPMediaVideo.st_RTPMap.nCodecNumber = 96;
106-
st_SDPMediaVideo.st_RTPMap.nSampleRate = 90000;
107-
strcpy(st_SDPMediaVideo.st_RTPMap.tszCodecName, _X("H264"));
95+
SDPProtocol_Packet_AddMedia(xhSDPToken, _X("video"), _X("RTP/AVP"), &pptszAVList, 1);
96+
97+
STREAMMEDIA_SDPPROTOCOL_MEDIAINFO st_SDPMediaVideo;
98+
memset(&st_SDPMediaVideo, '\0', sizeof(STREAMMEDIA_SDPPROTOCOL_MEDIAINFO));
10899

109100
st_SDPMediaVideo.st_FmtpVideo.nFrameRate = st_AVInfo.st_VideoInfo.nFrameRate;
110101
st_SDPMediaVideo.st_FmtpVideo.nPacketMode = 1;
111102
st_SDPMediaVideo.st_FmtpVideo.tszLeaveId[0] = tszSPSBuffer[0];
112103
st_SDPMediaVideo.st_FmtpVideo.tszLeaveId[1] = tszSPSBuffer[1];
113104
st_SDPMediaVideo.st_FmtpVideo.tszLeaveId[2] = tszSPSBuffer[2];
114-
st_SDPMediaVideo.st_FmtpVideo.nFrameXSize = st_AVInfo.st_VideoInfo.nWidth;
115-
st_SDPMediaVideo.st_FmtpVideo.nFrameYSize = st_AVInfo.st_VideoInfo.nHeight;
116105

117106
OPenSsl_Codec_Base64((LPCXSTR)tszSPSBuffer, st_SDPMediaVideo.st_FmtpVideo.tszSPSBase, &nSPSLen, true);
118107
OPenSsl_Codec_Base64((LPCXSTR)tszPPSBuffer, st_SDPMediaVideo.st_FmtpVideo.tszPPSBase, &nPPSLen, true);
119-
RfcComponents_SDPPacket_AttrVideo(xhSDPToken, &st_SDPMediaVideo);
108+
109+
st_SDPMediaVideo.nTrackID = 0;
110+
st_SDPMediaVideo.st_RTPMap.nChannel = 2;
111+
st_SDPMediaVideo.st_RTPMap.nSampleRate = 90000;
112+
_tcsxcpy(st_SDPMediaVideo.st_RTPMap.tszCodecName, _X("H264"));
113+
SDPProtocol_Packet_VideoFmt(xhSDPToken, 96, &st_SDPMediaVideo);
114+
SDPProtocol_Packet_Control(xhSDPToken, 0);
120115
//配置音频属性
121-
RfcComponents_SDPPacket_AddMedia(xhSDPToken, _X("audio"), 97);
116+
_tcsxcpy(pptszAVList[0], _X("98"));
117+
SDPProtocol_Packet_AddMedia(xhSDPToken, _X("audio"), _X("RTP/AVP"), &pptszAVList, 1);
118+
119+
STREAMMEDIA_SDPPROTOCOL_MEDIAINFO st_SDPMediaAudio;
120+
memset(&st_SDPMediaAudio, '\0', sizeof(STREAMMEDIA_SDPPROTOCOL_MEDIAINFO));
122121

123-
RFCCOMPONENTS_SDPPROTOCOL_MEDIAAUDIO st_SDPMediaAudio;
124-
memset(&st_SDPMediaAudio, '\0', sizeof(RFCCOMPONENTS_SDPPROTOCOL_MEDIAAUDIO));
125-
st_SDPMediaAudio.nTrackID = 2;
126-
st_SDPMediaAudio.st_RTPMap.nCodecNumber = 97;
127-
strcpy(st_SDPMediaAudio.st_RTPMap.tszCodecName, _X("mpeg4-generic"));
122+
AVHelp_Parse_AACInfo((const XBYTE*)st_AVInfo.st_AudioInfo.tszAInfo, st_AVInfo.st_AudioInfo.nALen, &st_SDPMediaAudio.st_RTPMap.nChannel, &st_SDPMediaAudio.st_RTPMap.nSampleRate, &st_SDPMediaAudio.st_FmtpAudio.nProfileID, &st_SDPMediaAudio.st_FmtpAudio.nConfig);
123+
124+
st_SDPMediaAudio.nTrackID = 1;
125+
_tcsxcpy(st_SDPMediaAudio.st_RTPMap.tszCodecName, _X("mpeg4-generic"));
128126

129-
AVHelp_Parse_AACInfo((const XBYTE *)st_AVInfo.st_AudioInfo.tszAInfo, st_AVInfo.st_AudioInfo.nALen, &st_SDPMediaAudio.st_RTPMap.nChannel, &st_SDPMediaAudio.st_RTPMap.nSampleRate, &st_SDPMediaAudio.st_FmtpAudio.nProfileID, &st_SDPMediaAudio.st_FmtpAudio.nConfig);
130127
st_SDPMediaAudio.st_FmtpAudio.nDeltaLen = 3;
131128
st_SDPMediaAudio.st_FmtpAudio.nIndexLen = 3;
132129
st_SDPMediaAudio.st_FmtpAudio.nSizeLen = 13;
133-
strcpy(st_SDPMediaAudio.st_FmtpAudio.tszMode, "AAC-hbr");
134-
RfcComponents_SDPPacket_AttrAudio(xhSDPToken, &st_SDPMediaAudio);
130+
_tcsxcpy(st_SDPMediaAudio.st_FmtpAudio.tszMode, "AAC-hbr");
131+
SDPProtocol_Packet_AudioFmt(xhSDPToken, 98, &st_SDPMediaAudio);
132+
SDPProtocol_Packet_Control(xhSDPToken, 1);
135133

136-
RfcComponents_SDPPacket_GetPacket(xhSDPToken, tszRVBuffer, &nRVLen);
137-
RfcComponents_SDPPacket_Destory(xhSDPToken);
138-
RTSPProtocol_CorePacket_Describe(tszSDBuffer, &nSDLen, pSt_HTTPParam->tszHttpUri, tszRVBuffer, st_RTSPRequest.nCseq);
134+
SDPProtocol_Packet_GetPacket(xhSDPToken, tszRVBuffer, &nRVLen);
135+
SDPProtocol_Packet_Destory(xhSDPToken);
139136
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
140137
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("RTSP:%s,请求DESCRIBE选项成功,请求的拉流ID:%s"), lpszClientAddr, tszSMSAddr);
141138
}
142-
else if (0 == _tcsxnicmp(pSt_HTTPParam->tszHttpMethod, lpszSETUPStr, _tcsxlen(pSt_HTTPParam->tszHttpMethod)))
143-
{
144-
//rtsp://127.0.0.1:554/live/qyt/trackID=0 RTSP/1.0 only tcp
145-
RTSPPROTOCOL_REQUEST st_RTSPRequest;
146-
RTSPPROTOCOL_SETUP st_RTSPSetup;
147-
148-
memset(&st_RTSPRequest, '\0', sizeof(RTSPPROTOCOL_REQUEST));
149-
memset(&st_RTSPSetup, '\0', sizeof(RTSPPROTOCOL_SETUP));
150-
151-
st_RTSPSetup.nClientRTPPort = 0;
152-
st_RTSPSetup.nClientRTCPPort = 1;
153-
RTSPProtocol_CoreParse_Parse(&st_RTSPRequest, lpszMsgBuffer, nMsgLen);
154-
155-
RTSPProtocol_CorePacket_Setup(tszSDBuffer, &nSDLen, _X(""), &st_RTSPSetup, st_RTSPRequest.nCseq);
156-
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
157-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("RTSP:%s,请求SETUP选项成功"), lpszClientAddr);
158-
}
159139
else
160140
{
161-
ModuleProtocol_Packet_Comm(tszRVBuffer, &nRVLen, NULL, 500, "not support");
162-
HttpProtocol_Server_SendMsgEx(xhHttpPacket, tszSDBuffer, &nSDLen, &st_HDRParam, tszRVBuffer, nRVLen);
163141
XEngine_Network_Send(lpszClientAddr, tszSDBuffer, nSDLen, ENUM_XENGINE_STREAMMEDIA_CLIENT_TYPE_HTTP);
164142
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("拉流端:%s,请求的类型不支持:%s"), lpszClientAddr, pSt_HTTPParam->tszHttpMethod);
165143
return false;

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Hdr.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ using namespace std;
3838
#include <XEngine_Include/XEngine_HelpComponents/Packets_Error.h>
3939
#include <XEngine_Include/XEngine_RfcComponents/HttpProtocol_Define.h>
4040
#include <XEngine_Include/XEngine_RfcComponents/HttpProtocol_Error.h>
41-
#include <XEngine_Include/XEngine_RfcComponents/SDPProtocol_Define.h>
42-
#include <XEngine_Include/XEngine_RfcComponents/SDPProtocol_Error.h>
41+
#include <XEngine_Include/XEngine_StreamMedia/SDPProtocol_Define.h>
42+
#include <XEngine_Include/XEngine_StreamMedia/SDPProtocol_Error.h>
4343
#include <XEngine_Include/XEngine_StreamMedia/FLVProtocol_Define.h>
4444
#include <XEngine_Include/XEngine_StreamMedia/FLVProtocol_Error.h>
4545
#include <XEngine_Include/XEngine_StreamMedia/RTMPProtocol_Define.h>
@@ -160,7 +160,7 @@ extern FILE* pSt_AFile;
160160
#pragma comment(lib,"XEngine_HelpComponents/HelpComponents_XLog.lib")
161161
#pragma comment(lib,"XEngine_HelpComponents/HelpComponents_Packets")
162162
#pragma comment(lib,"XEngine_RfcComponents/RfcComponents_HttpProtocol.lib")
163-
#pragma comment(lib,"XEngine_RfcComponents/RfcComponents_SDPProtocol.lib")
163+
#pragma comment(lib,"XEngine_StreamMedia/StreamMedia_SDPProtocol.lib")
164164
#pragma comment(lib,"XEngine_StreamMedia/StreamMedia_FLVProtocol.lib")
165165
#pragma comment(lib,"XEngine_StreamMedia/StreamMedia_RTMPProtocol.lib")
166166
#pragma comment(lib,"XEngine_StreamMedia/StreamMedia_HLSProtocol.lib")

0 commit comments

Comments
 (0)