Skip to content

Commit 68a7c74

Browse files
committed
added:srtp init and destory and create send recv process
1 parent 3ac0a00 commit 68a7c74

File tree

8 files changed

+129
-21
lines changed

8 files changed

+129
-21
lines changed

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_Define.h

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,4 +482,39 @@ extern "C" bool ModuleHelp_Rtmp_GetSession(LPCXSTR lpszURLAddr, XCHAR* ptszLiveN
482482
意思:是否成功
483483
备注:
484484
*********************************************************************/
485-
extern "C" bool ModuleHelp_Rtmp_DeleteSession(LPCXSTR lpszURLAddr);
485+
extern "C" bool ModuleHelp_Rtmp_DeleteSession(LPCXSTR lpszURLAddr);
486+
/************************************************************************/
487+
/* 导出的SRTP函数 */
488+
/************************************************************************/
489+
/********************************************************************
490+
函数名称:ModuleHelp_SRTPCore_Init
491+
函数功能:SRTP初始化函数
492+
返回值
493+
类型:逻辑型
494+
意思:是否成功
495+
备注:
496+
*********************************************************************/
497+
extern "C" bool ModuleHelp_SRTPCore_Init();
498+
/********************************************************************
499+
函数名称:ModuleHelp_SRTPCore_Destory
500+
函数功能:SRTP销毁函数
501+
返回值
502+
类型:逻辑型
503+
意思:是否成功
504+
备注:
505+
*********************************************************************/
506+
extern "C" bool ModuleHelp_SRTPCore_Destory();
507+
/********************************************************************
508+
函数名称:ModuleHelp_SRTPCore_Create
509+
函数功能:创建SRTP发送和接受处理程序
510+
参数.一:lpszKEYBuffer
511+
In/Out:In
512+
类型:常量字符指针
513+
可空:N
514+
意思:输入SSL的KEY
515+
返回值
516+
类型:逻辑型
517+
意思:是否成功
518+
备注:
519+
*********************************************************************/
520+
extern "C" bool ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer);

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SRtp/ModuleHelp_SRTPCore.cpp

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,7 @@ CModuleHelp_SRTPCore::~CModuleHelp_SRTPCore()
2222
//////////////////////////////////////////////////////////////////////////
2323
/********************************************************************
2424
函数名称:ModuleHelp_SRTPCore_Init
25-
函数功能:启动SRT
26-
参数.一:nPort
27-
In/Out:In
28-
类型:整数型
29-
可空:N
30-
意思:输入要绑定的端口
25+
函数功能:SRTP初始化函数
3126
返回值
3227
类型:逻辑型
3328
意思:是否成功
@@ -42,6 +37,14 @@ bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_Init()
4237
#endif
4338
return true;
4439
}
40+
/********************************************************************
41+
函数名称:ModuleHelp_SRTPCore_Destory
42+
函数功能:SRTP销毁函数
43+
返回值
44+
类型:逻辑型
45+
意思:是否成功
46+
备注:
47+
*********************************************************************/
4548
bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_Destory()
4649
{
4750
ModuleHelp_IsErrorOccur = false;
@@ -51,10 +54,38 @@ bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_Destory()
5154
#endif
5255
return true;
5356
}
54-
bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_Create(LPCXSTR lpszSendKey, LPCXSTR lpszRecvKey)
57+
/********************************************************************
58+
函数名称:ModuleHelp_SRTPCore_Create
59+
函数功能:创建SRTP发送和接受处理程序
60+
参数.一:lpszKEYBuffer
61+
In/Out:In
62+
类型:常量字符指针
63+
可空:N
64+
意思:输入SSL的KEY
65+
返回值
66+
类型:逻辑型
67+
意思:是否成功
68+
备注:
69+
*********************************************************************/
70+
bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer)
5571
{
5672
ModuleHelp_IsErrorOccur = false;
5773

74+
int nPos = 0;
75+
const int SRTP_MASTER_KEY_KEY_LEN = 16;
76+
const int SRTP_MASTER_KEY_SALT_LEN = 14;
77+
78+
std::string m_StrClientKey(reinterpret_cast<LPCXSTR>(lpszKEYBuffer), 16);
79+
nPos += 16;
80+
std::string m_StrServerKey(reinterpret_cast<LPCXSTR>(lpszKEYBuffer + nPos), 16);
81+
nPos += 16;
82+
std::string m_StrClientSalt(reinterpret_cast<LPCXSTR>(lpszKEYBuffer + nPos), 14);
83+
nPos += 14;
84+
std::string m_StrServerSalt(reinterpret_cast<LPCXSTR>(lpszKEYBuffer + nPos), 14);
85+
86+
std::string m_ClientKey = m_StrClientKey + m_StrClientSalt;
87+
std::string m_ServerKey = m_StrServerKey + m_StrServerSalt;
88+
5889
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_RTC
5990
SRTPCORE_CLIENTINFO st_SRTPCore = {};
6091
srtp_policy_t st_SRTPPolicy = {};
@@ -69,20 +100,20 @@ bool CModuleHelp_SRTPCore::ModuleHelp_SRTPCore_Create(LPCXSTR lpszSendKey, LPCXS
69100

70101
//初始化接受上下文
71102
st_SRTPPolicy.ssrc.type = ssrc_any_inbound;
72-
st_SRTPPolicy.key = (unsigned char*)lpszRecvKey;
103+
st_SRTPPolicy.key = (unsigned char*)m_ServerKey.c_str();
73104

74-
srtp_err_status_t r0 = srtp_err_status_ok;
75-
if ((r0 = srtp_create(&st_SRTPCore.pSt_SRTPRecvCtx, &st_SRTPPolicy)) != srtp_err_status_ok)
105+
srtp_err_status_t nRet = srtp_err_status_ok;
106+
if (srtp_err_status_ok != (nRet = srtp_create(&st_SRTPCore.pSt_SRTPRecvCtx, &st_SRTPPolicy)))
76107
{
77-
108+
return false;
78109
}
79110

80111
st_SRTPPolicy.ssrc.type = ssrc_any_outbound;
81-
st_SRTPPolicy.key = (unsigned char*)lpszSendKey;
112+
st_SRTPPolicy.key = (unsigned char*)m_ClientKey.c_str();
82113

83-
if ((r0 = srtp_create(&st_SRTPCore.pSt_SRTPSendCtx, &st_SRTPPolicy)) != srtp_err_status_ok)
114+
if (srtp_err_status_ok != (nRet = srtp_create(&st_SRTPCore.pSt_SRTPSendCtx, &st_SRTPPolicy)))
84115
{
85-
116+
return false;
86117
}
87118
#endif
88119
return true;

XEngine_Source/XEngine_ModuleHelp/ModuleHelp_SRtp/ModuleHelp_SRTPCore.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class CModuleHelp_SRTPCore
2525
public:
2626
bool ModuleHelp_SRTPCore_Init();
2727
bool ModuleHelp_SRTPCore_Destory();
28-
bool ModuleHelp_SRTPCore_Create(LPCXSTR lpszSendKey, LPCXSTR lpszRecvKey);
28+
bool ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer);
2929
protected:
3030
private:
3131
};

XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.def

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,8 @@ EXPORTS
2828

2929
ModuleHelp_Rtmp_CreateSession
3030
ModuleHelp_Rtmp_GetSession
31-
ModuleHelp_Rtmp_DeleteSession
31+
ModuleHelp_Rtmp_DeleteSession
32+
33+
ModuleHelp_SRTPCore_Init
34+
ModuleHelp_SRTPCore_Destory
35+
ModuleHelp_SRTPCore_Create

XEngine_Source/XEngine_ModuleHelp/XEngine_ModuleHelp.vcxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<PropertyGroup Label="UserMacros" />
7373
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
7474
<LinkIncremental>true</LinkIncremental>
75-
<IncludePath>$(XEngine_Include);../XEngine_ThirdPart/opencc/include;$(IncludePath)</IncludePath>
75+
<IncludePath>$(XEngine_Include);../XEngine_ThirdPart/opencc/include;..\XEngine_ModuleHelp;$(IncludePath)</IncludePath>
7676
<LibraryPath>$(XEngine_Lib32);$(LibraryPath)</LibraryPath>
7777
</PropertyGroup>
7878
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">

XEngine_Source/XEngine_ModuleHelp/pch.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "ModuleHelp_Srt/ModuleHelp_SrtCore.h"
44
#include "ModuleHelp_Rtsp/ModuleHelp_Rtsp.h"
55
#include "ModuleHelp_Rtmp/ModuleHelp_Rtmp.h"
6+
#include "ModuleHelp_SRtp/ModuleHelp_SRTPCore.h"
67
/********************************************************************
78
// Created: 2022/04/24 16:28:09
89
// File Name: D:\XEngine_StreamMedia\XEngine_Source\XEngine_ModuleHelp\pch.cpp
@@ -21,6 +22,7 @@ CModuleHelp_JT1078 m_HelpJT1078;
2122
CModuleHelp_SrtCore m_SrtCore;
2223
CModuleHelp_Rtsp m_HelpRtsp;
2324
CModuleHelp_Rtmp m_HelpRtmp;
25+
CModuleHelp_SRTPCore m_HelpSRtp;
2426
//////////////////////////////////////////////////////////////////////////
2527
/// 导出的函数
2628
//////////////////////////////////////////////////////////////////////////
@@ -135,4 +137,19 @@ extern "C" bool ModuleHelp_Rtmp_GetSession(LPCXSTR lpszURLAddr, XCHAR * ptszLive
135137
extern "C" bool ModuleHelp_Rtmp_DeleteSession(LPCXSTR lpszURLAddr)
136138
{
137139
return m_HelpRtmp.ModuleHelp_Rtmp_DeleteSession(lpszURLAddr);
140+
}
141+
/************************************************************************/
142+
/* 导出的SRTP函数 */
143+
/************************************************************************/
144+
extern "C" bool ModuleHelp_SRTPCore_Init()
145+
{
146+
return m_HelpSRtp.ModuleHelp_SRTPCore_Init();
147+
}
148+
extern "C" bool ModuleHelp_SRTPCore_Destory()
149+
{
150+
return m_HelpSRtp.ModuleHelp_SRTPCore_Destory();
151+
}
152+
extern "C" bool ModuleHelp_SRTPCore_Create(LPCXBTR lpszKEYBuffer)
153+
{
154+
return m_HelpSRtp.ModuleHelp_SRTPCore_Create(lpszKEYBuffer);
138155
}

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/StreamMedia_PullStream/PullStream_ClientWebRtc.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ bool PullStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L
3131
{
3232
nSDLen = 2048;
3333
bool bConnect = false;
34-
XBYTE tszSDKey[128] = {};
35-
XBYTE tszRVKey[128] = {};
3634

3735
if (!ModuleSession_PullStream_RTCConnGet(lpszClientAddr, &bConnect))
3836
{
@@ -48,7 +46,9 @@ bool PullStream_ClientProtocol_Handle(LPCXSTR lpszClientAddr, XSOCKET hSocket, L
4846
{
4947
if (OPenSsl_Server_AcceptMemoryEx(xhRTCSsl, hSocket, lpszClientAddr, tszSDBuffer, &nSDLen, lpszMsgBuffer, nMsgLen))
5048
{
51-
OPenSsl_Server_GetKeyEx(xhRTCSsl, lpszClientAddr, tszSDKey, tszRVKey);
49+
XBYTE tszKEYBuffer[MAX_PATH] = {};
50+
OPenSsl_Server_GetKeyEx(xhRTCSsl, lpszClientAddr, tszKEYBuffer);
51+
ModuleHelp_SRTPCore_Create(tszKEYBuffer);
5252
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("RTC客户端:%s,请求的DTLS握手协议处理成功"), lpszClientAddr);
5353
}
5454
else

XEngine_Source/XEngine_ServiceApp/XEngine_StreamMediaApp/XEngine_StreamMediaApp.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ void ServiceApp_Stop(int signo)
9090
ManagePool_Thread_NQDestroy(xhJT1078Pool);
9191
//销毁其他资源
9292
ModuleHelp_SrtCore_Destory();
93+
ModuleHelp_SRTPCore_Destory();
9394
HLSProtocol_M3u8Packet_Delete(xhHLSFile);
9495
srt_cleanup();
9596

@@ -461,6 +462,25 @@ int main(int argc, char** argv)
461462
#else
462463
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,SRT协议编译选项被禁用,无法使用SRT协议"));
463464
#endif
465+
466+
#if 1 == _XENGINE_STREAMMEDIA_BUILDSWITCH_SRTP
467+
if (st_ServiceConfig.st_XPull.st_PullWebRtc.bEnable)
468+
{
469+
if (!ModuleHelp_SRTPCore_Init())
470+
{
471+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_ERROR, _X("启动服务中,启动SRTP的服务失败"));
472+
goto XENGINE_SERVICEAPP_EXIT;
473+
}
474+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,启动SRTP协议处理程序初始化成功"), st_ServiceConfig.st_XMax.nSRTThread);
475+
}
476+
else
477+
{
478+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_INFO, _X("启动服务中,SRTP流协议服务被禁用"));
479+
}
480+
#else
481+
XLOG_PRINT(xhLog, XENGINE_HELPCOMPONENTS_XLOG_IN_LOGLEVEL_WARN, _X("启动服务中,SRTP协议编译选项被禁用,无法使用SRTP协议"));
482+
#endif
483+
464484
if (st_ServiceConfig.st_XPull.st_PullRtsp.bEnable)
465485
{
466486
xhVRTPSocket = NetCore_UDPXCore_StartEx(st_ServiceConfig.st_XPull.st_PullRtsp.nVRTPPort, 1);
@@ -605,6 +625,7 @@ int main(int argc, char** argv)
605625
ManagePool_Thread_NQDestroy(xhJT1078Pool);
606626
//销毁其他资源
607627
ModuleHelp_SrtCore_Destory();
628+
ModuleHelp_SRTPCore_Destory();
608629
HLSProtocol_M3u8Packet_Delete(xhHLSFile);
609630
srt_cleanup();
610631

0 commit comments

Comments
 (0)