Skip to content

Commit 6c07b18

Browse files
committed
modify:rtp media index update to last version support
1 parent e972fbc commit 6c07b18

File tree

7 files changed

+81
-38
lines changed

7 files changed

+81
-38
lines changed

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientRtsp.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ bool PullStream_ClientRtsp_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LP
165165
st_SDPMediaVideo.nTrackID = 0;
166166
st_SDPMediaVideo.st_RTPMap.nSampleRate = 90000;
167167
_tcsxcpy(st_SDPMediaVideo.st_RTPMap.tszCodecName, _X("H264"));
168-
SDPProtocol_Packet_VideoFmt(xhSDPToken, 96, &st_SDPMediaVideo);
168+
SDPProtocol_Packet_VideoFmt(xhSDPToken, nRTPVIndex, &st_SDPMediaVideo);
169169
SDPProtocol_Packet_Control(xhSDPToken, 0);
170170
//配置音频属性
171171
_tcsxcpy(pptszAVList[0], _X("98"));
@@ -186,7 +186,7 @@ bool PullStream_ClientRtsp_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LP
186186
_tcsxcpy(st_SDPMediaAudio.st_RTPMap.tszCodecName, _X("mpeg4-generic"));
187187

188188
_tcsxcpy(st_SDPMediaAudio.st_FmtpAudio.tszMode, "AAC-hbr");
189-
SDPProtocol_Packet_AudioFmt(xhSDPToken, 98, &st_SDPMediaAudio);
189+
SDPProtocol_Packet_AudioFmt(xhSDPToken, nRTPAIndex, &st_SDPMediaAudio);
190190
SDPProtocol_Packet_Control(xhSDPToken, 1);
191191

192192
SDPProtocol_Packet_GetPacket(xhSDPToken, tszRVBuffer, &nRVLen);
@@ -272,21 +272,23 @@ bool PullStream_ClientRtsp_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LP
272272
ModuleHelp_Rtsp_GetSsrc(lpszClientAddr, tszSSRCVideo, true);
273273
ModuleHelp_Rtsp_GetSsrc(lpszClientAddr, tszSSRCAudio, false);
274274
//创建RTP包管理器
275-
RTPProtocol_Packet_Insert(tszSSRCVideo, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_H264);
276-
RTPProtocol_Packet_Insert(tszSSRCAudio, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_AAC);
275+
RTPProtocol_Packet_Insert(tszSSRCVideo);
276+
RTPProtocol_Packet_SetLink(tszSSRCVideo, nRTPVIndex, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_H264);
277+
RTPProtocol_Packet_Insert(tszSSRCAudio);
278+
RTPProtocol_Packet_SetLink(tszSSRCAudio, nRTPAIndex, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_AAC);
277279

278280
if (st_AVInfo.st_VideoInfo.nFrameRate > 0)
279281
{
280-
RTPProtocol_Packet_SetTime(tszSSRCVideo, st_AVInfo.st_VideoInfo.nFrameRate);
281-
RTPProtocol_Packet_GetTime(tszSSRCVideo, &st_RTSPResponse.ppSt_RTPInfo[0]->nNTPTime);
282-
RTPProtocol_Packet_GetCSeq(tszSSRCVideo, &st_RTSPResponse.ppSt_RTPInfo[0]->nCSeq);
282+
RTPProtocol_Packet_SetTime(tszSSRCVideo, nRTPVIndex, st_AVInfo.st_VideoInfo.nFrameRate);
283+
RTPProtocol_Packet_GetTime(tszSSRCVideo, nRTPVIndex, &st_RTSPResponse.ppSt_RTPInfo[0]->nNTPTime);
284+
RTPProtocol_Packet_GetCSeq(tszSSRCVideo, nRTPVIndex, &st_RTSPResponse.ppSt_RTPInfo[0]->nCSeq);
283285
_xstprintf(st_RTSPResponse.ppSt_RTPInfo[0]->tszURLStr, _X("%s/trackID=0"), st_RTSPRequest.tszUrl);
284286
}
285287
if (st_AVInfo.st_AudioInfo.nSampleRate > 0)
286288
{
287-
RTPProtocol_Packet_SetTime(tszSSRCAudio, st_AVInfo.st_AudioInfo.nSampleRate);
288-
RTPProtocol_Packet_GetTime(tszSSRCAudio, &st_RTSPResponse.ppSt_RTPInfo[1]->nNTPTime);
289-
RTPProtocol_Packet_GetCSeq(tszSSRCAudio, &st_RTSPResponse.ppSt_RTPInfo[1]->nCSeq);
289+
RTPProtocol_Packet_SetTime(tszSSRCAudio, nRTPAIndex, st_AVInfo.st_AudioInfo.nSampleRate);
290+
RTPProtocol_Packet_GetTime(tszSSRCAudio, nRTPAIndex, &st_RTSPResponse.ppSt_RTPInfo[1]->nNTPTime);
291+
RTPProtocol_Packet_GetCSeq(tszSSRCAudio, nRTPAIndex, &st_RTSPResponse.ppSt_RTPInfo[1]->nCSeq);
290292
_xstprintf(st_RTSPResponse.ppSt_RTPInfo[1]->tszURLStr, _X("%s/trackID=1"), st_RTSPRequest.tszUrl);
291293
}
292294
RTSPProtocol_REPPacket_Response(tszSDBuffer, &nSDLen, &st_RTSPResponse);

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientWebRtc.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,9 @@ bool PullStream_ClientWebRtc_SDKPacket(XNETHANDLE xhPacket, LPCXSTR lpszClientID
201201
//BaseLib_Handle_CreateStr(tszSSrcStr, 8, 1);
202202
SDPProtocol_Packet_CName(xhPacket, _ttxoll(tszSSrcStr), _X("79a9722580589zr5"), _X("video-666q08to"));
203203
ModuleSession_PullStream_RTCSSrcSet(lpszClientID, tszSSrcStr, _X("79a9722580589zr5"), _X("video-666q08to"));
204-
RTPProtocol_Packet_Insert(tszSSrcStr, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_H264);
205-
RTPProtocol_Packet_SetPType(tszSSrcStr, nAVIndex);
206-
RTPProtocol_Packet_SetTime(tszSSrcStr, pSt_AVInfo->st_VideoInfo.nFrameRate);
204+
RTPProtocol_Packet_Insert(tszSSrcStr);
205+
RTPProtocol_Packet_SetLink(tszSSrcStr, nAVIndex, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_H264);
206+
RTPProtocol_Packet_SetTime(tszSSrcStr, nAVIndex, pSt_AVInfo->st_VideoInfo.nFrameRate);
207207
}
208208
else
209209
{
@@ -216,8 +216,8 @@ bool PullStream_ClientWebRtc_SDKPacket(XNETHANDLE xhPacket, LPCXSTR lpszClientID
216216
//BaseLib_Handle_CreateStr(tszSSrcStr, 8, 1);
217217
SDPProtocol_Packet_CName(xhPacket, _ttxoll(tszSSrcStr), _X("79a9722580589zr5"), _X("audio-23z8fj2g"));
218218
ModuleSession_PullStream_RTCSSrcSet(lpszClientID, tszSSrcStr, _X("79a9722580589zr5"), _X("audio-23z8fj2g"), false);
219-
RTPProtocol_Packet_Insert(tszSSrcStr, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_AAC);
220-
RTPProtocol_Packet_SetPType(tszSSrcStr, nAVIndex);
219+
RTPProtocol_Packet_Insert(tszSSrcStr);
220+
RTPProtocol_Packet_SetLink(tszSSrcStr, nAVIndex, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_AAC);
221221
}
222222
SDPProtocol_Packet_OptionalCandidate(xhPacket, st_ServiceConfig.tszIPAddr, st_ServiceConfig.nRTCWhepPort);
223223
BaseLib_Memory_Free((XPPPMEM)&pptszAVList, 1);

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PushStream/PushStream_ClientWebRtc.cpp

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ bool PushStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L
6262
int nIndexVideo = 0;
6363
int nIndexAudio = 0;
6464
ModuleSession_PushStream_RTCIndexGet(lpszClientAddr, &nIndexVideo, &nIndexAudio);
65-
RTPProtocol_Parse_Insert(lpszClientAddr, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_UNKNOW);
65+
RTPProtocol_Parse_Insert(lpszClientAddr);
6666
RTPProtocol_Parse_SetLink(lpszClientAddr, nIndexVideo, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_H264);
6767
RTPProtocol_Parse_SetLink(lpszClientAddr, nIndexAudio, ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_OPUS);
6868
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("RTC客户端:%s,请求的DTLS握手协议处理成功,视频索引:%d,音频索引:%d"), lpszClientAddr, nIndexVideo, nIndexAudio);
@@ -146,28 +146,19 @@ bool PushStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L
146146
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("RTC客户端:%s,RTP协议解密失败,大小:%d,错误码:%lX"), lpszClientAddr, nMsgLen, ModuleHelp_GetLastError());
147147
return false;
148148
}
149+
fwrite(tszRVBuffer, 1, nRVLen, pSt_VFile);
150+
151+
XCHAR tszFileSize[64] = {};
152+
int nRet = _xstprintf(tszFileSize, _X("%d\r\n"), nRVLen);
153+
fwrite(tszFileSize, 1, nRet, pSt_AFile);
154+
/*
149155
//RTP
150156
if (!RTPProtocol_Parse_Send(lpszClientAddr, tszRVBuffer, nRVLen))
151157
{
152-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("RTC客户端:%s,RTP协议解析失败,大小:%d,错误码:%lX"), lpszClientAddr, nMsgLen, RTCPProtocol_GetLastError());
158+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("RTC客户端:%s,RTP协议解析失败,大小:%d,错误码:%lX"), lpszClientAddr, nMsgLen, RTPProtocol_GetLastError());
153159
return false;
154160
}
155-
STREAMMEDIA_RTPPROTOCOL_HDR st_RTPHdr = {};
156-
while (RTPProtocol_Parse_Recv(lpszClientAddr, tszRVBuffer, &nMsgLen, &st_RTPHdr))
157-
{
158-
if (st_RTPHdr.enPayload == ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_H264)
159-
{
160-
161-
}
162-
else if (st_RTPHdr.enPayload == ENUM_STREAMMEDIA_RTPPROTOCOL_PAYLOAD_TYPE_OPUS)
163-
{
164-
165-
}
166-
else
167-
{
168-
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("RTC客户端:%s,发送了未知的RTP协议类型:%d"), lpszClientAddr, st_RTPHdr.enPayload);
169-
}
170-
}
161+
*/
171162
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_DEBUG, _X("RTC客户端:%s,%d,请求的RTP协议处理成功"), lpszClientAddr, nMsgLen);
172163
}
173164
}
@@ -178,6 +169,47 @@ bool PushStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L
178169

179170
return true;
180171
}
172+
bool PushStream_ClientProtocol_Thread()
173+
{
174+
while (true)
175+
{
176+
RTPProtocol_Parse_WaitEvent(1);
177+
178+
int nListCount = 0;
179+
XENGINE_MANAGEPOOL_TASKEVENT** ppSt_ListAddr;
180+
RTPProtocol_Parse_GetPool(1, &ppSt_ListAddr, &nListCount);
181+
for (int i = 0; i < nListCount; i++)
182+
{
183+
while (true)
184+
{
185+
STREAMMEDIA_RTPPROTOCOL_HDR st_RTPHdr = {};
186+
int nMSGLen = 0;
187+
st_RTPHdr.nPayID = 96;
188+
XCHAR* ptszMSGBuffer = NULL;
189+
if (!RTPProtocol_Parse_Recv(ppSt_ListAddr[i]->tszClientAddr, &ptszMSGBuffer, &nMSGLen, &st_RTPHdr))
190+
{
191+
break;
192+
}
193+
fwrite(ptszMSGBuffer, 1, nMSGLen, pSt_VFile);
194+
BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMSGBuffer);
195+
}
196+
while (true)
197+
{
198+
STREAMMEDIA_RTPPROTOCOL_HDR st_RTPHdr = {};
199+
int nMSGLen = 0;
200+
st_RTPHdr.nPayID = 111;
201+
XCHAR* ptszMSGBuffer = NULL;
202+
if (!RTPProtocol_Parse_Recv(ppSt_ListAddr[i]->tszClientAddr, &ptszMSGBuffer, &nMSGLen, &st_RTPHdr))
203+
{
204+
break;
205+
}
206+
//fwrite(ptszMSGBuffer, 1, nRVLen, pSt_AFile);
207+
BaseLib_Memory_FreeCStyle((XPPMEM)&ptszMSGBuffer);
208+
}
209+
}
210+
BaseLib_Memory_Free((XPPPMEM)&ppSt_ListAddr, nListCount);
211+
}
212+
}
181213
bool PushStream_ClientWebRtc_SDKPacket(XNETHANDLE xhPacket, LPCXSTR lpszClientID, bool bVideo, int nAVIndex, STREAMMEDIA_SDPPROTOCOL_MEDIAINFO* pSt_SDPMediaInfo)
182214
{
183215
XCHAR** pptszAVList;

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PushStream/PushStream_ClientWebRtc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@
1111
// History:
1212
*********************************************************************/
1313
bool PushStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, LPCXSTR lpszMsgBuffer, int nMsgLen);
14+
bool PushStream_ClientProtocol_Thread();
1415
bool PushStream_ClientWebRtc_SDKPacket(XNETHANDLE xhPacket, LPCXSTR lpszClientID, bool bVideo, int nAVIndex, STREAMMEDIA_SDPPROTOCOL_MEDIAINFO* pSt_SDPMediaInfo);
1516
bool PushStream_ClientWhip_Handle(RFCCOMPONENTS_HTTP_REQPARAM* pSt_HTTPParam, LPCXSTR lpszClientAddr, LPCXSTR lpszMsgBuffer, int nMsgLen);

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_AVPacket.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
569569
{
570570
ModuleHelp_Rtsp_GetSsrc(stl_ListIteratorClient->tszClientID, tszSSCRStr, true);
571571
ModuleHelp_Rtsp_GetRTPAddr(stl_ListIteratorClient->tszClientID, tszADDRStr, true);
572-
RTPProtocol_Packet_Packet(tszSSCRStr, lpszMsgBuffer + nStartCode, nMsgLen - nStartCode, &ppSt_RTPPacket, &nPacketCount);
572+
RTPProtocol_Packet_Packet(tszSSCRStr, nRTPVIndex, lpszMsgBuffer + nStartCode, nMsgLen - nStartCode, &ppSt_RTPPacket, &nPacketCount);
573573
//发送数据,RTSP使用UDP发送
574574
for (int i = 0; i < nPacketCount; i++)
575575
{
@@ -580,7 +580,7 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
580580
{
581581
ModuleHelp_Rtsp_GetSsrc(stl_ListIteratorClient->tszClientID, tszSSCRStr, false);
582582
ModuleHelp_Rtsp_GetRTPAddr(stl_ListIteratorClient->tszClientID, tszADDRStr, false);
583-
RTPProtocol_Packet_Packet(tszSSCRStr, lpszMsgBuffer, nMsgLen, &ppSt_RTPPacket, &nPacketCount);
583+
RTPProtocol_Packet_Packet(tszSSCRStr, nRTPAIndex, lpszMsgBuffer, nMsgLen, &ppSt_RTPPacket, &nPacketCount);
584584
//发送数据,RTSP使用UDP发送
585585
for (int i = 0; i < nPacketCount; i++)
586586
{
@@ -607,7 +607,7 @@ bool XEngine_AVPacket_AVFrame(XCHAR* ptszSDBuffer, int* pInt_SDLen, XCHAR* ptszR
607607
if (0 == byAVType)
608608
{
609609
ModuleSession_PullStream_RTCSSrcGet(stl_ListIteratorClient->tszClientID, tszSSCRStr, true);
610-
RTPProtocol_Packet_Packet(tszSSCRStr, lpszMsgBuffer + nStartCode, nMsgLen - nStartCode, &ppSt_RTPPacket, &nPacketCount);
610+
RTPProtocol_Packet_Packet(tszSSCRStr, 0, lpszMsgBuffer + nStartCode, nMsgLen - nStartCode, &ppSt_RTPPacket, &nPacketCount);
611611
//发送数据,RTSP使用UDP发送
612612
for (int i = 0; i < nPacketCount; i++)
613613
{

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_Hdr.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,19 @@ extern XHANDLE xhRTCWhepSsl;
142142
extern XHANDLE xhRTCWhipSocket;
143143
extern XHANDLE xhRTCWhipHeart;
144144
extern XHANDLE xhRTCWhipSsl;
145+
extern std::unique_ptr<std::thread> pSTD_RTCThread;
145146
//HLS流
146147
extern XNETHANDLE xhHLSFile;
147148
//配置文件
148149
extern XENGINE_SERVICECONFIG st_ServiceConfig;
149150
//调试
150151
extern FILE* pSt_VFile;
151152
extern FILE* pSt_AFile;
153+
154+
//固定值
155+
static int nRTPVIndex = 96;
156+
static int nRTPAIndex = 98;
157+
152158
//连接库
153159
#ifdef _MSC_BUILD
154160
#pragma comment(lib,"Ws2_32.lib")

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ XHANDLE xhRTCWhepSsl = NULL;
4646
XHANDLE xhRTCWhipSocket = NULL;
4747
XHANDLE xhRTCWhipHeart = NULL;
4848
XHANDLE xhRTCWhipSsl = NULL;
49+
std::unique_ptr<std::thread> pSTD_RTCThread = NULL;
4950
//HLS流
5051
XNETHANDLE xhHLSFile = 0;
5152
//配置文件
@@ -207,8 +208,8 @@ int main(int argc, char** argv)
207208
memset(&st_XLogConfig, '\0', sizeof(HELPCOMPONENTS_XLOG_CONFIGURE));
208209
memset(&st_ServiceConfig, '\0', sizeof(XENGINE_SERVICECONFIG));
209210

210-
//pSt_VFile = _xtfopen("./1.h264", "wb");
211-
//pSt_AFile = _xtfopen("./1.aac", "wb");
211+
pSt_VFile = _xtfopen("./1.h264", "wb");
212+
pSt_AFile = _xtfopen("./1.opus", "wb");
212213
//初始化参数
213214
if (!XEngine_Configure_Parament(argc, argv))
214215
{
@@ -655,6 +656,7 @@ int main(int argc, char** argv)
655656
{
656657
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,推流RTC心跳管理服务没有启用!"));
657658
}
659+
pSTD_RTCThread = std::make_unique<std::thread>(PushStream_ClientProtocol_Thread);
658660
}
659661

660662
if (st_ServiceConfig.st_XPull.st_PullHls.bEnable)

0 commit comments

Comments
 (0)