Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
0d4cc2fc
Commit
0d4cc2fc
authored
4 years ago
by
ziyue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
srtp自动初始化,支持多线程
parent
bdf2783a
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
66 行增加
和
63 行删除
+66
-63
webrtc/SrtpSession.cpp
+48
-45
webrtc/SrtpSession.hpp
+14
-15
webrtc/WebRtcTransport.cpp
+4
-3
没有找到文件。
webrtc/SrtpSession.cpp
查看文件 @
0d4cc2fc
...
...
@@ -4,15 +4,14 @@
#include "SrtpSession.hpp"
#include <cstring> // std::memset(), std::memcpy()
#include "logger.h"
#include "Util/util.h"
using
namespace
toolkit
;
namespace
RTC
{
/* Static. */
static
constexpr
size_t
EncryptBufferSize
{
65536
};
static
uint8_t
EncryptBuffer
[
EncryptBufferSize
];
std
::
vector
<
const
char
*>
DepLibSRTP
::
errors
=
{
static
std
::
vector
<
const
char
*>
errors
=
{
// From 0 (srtp_err_status_ok) to 24 (srtp_err_status_pfkey_err).
"success (srtp_err_status_ok)"
,
"unspecified failure (srtp_err_status_fail)"
,
...
...
@@ -43,65 +42,69 @@ namespace RTC
/* Static methods. */
void
DepLibSRTP
::
ClassInit
()
{
const
char
*
DepLibSRTP
::
GetErrorString
(
srtp_err_status_t
code
)
{
// This throws out_of_range if the given index is not in the vector.
return
errors
.
at
(
code
);
}
bool
DepLibSRTP
::
IsError
(
srtp_err_status_t
code
)
{
return
(
code
!=
srtp_err_status_ok
);
}
INSTANCE_IMP
(
DepLibSRTP
);
DepLibSRTP
::
DepLibSRTP
(){
MS_TRACE
();
MS_DEBUG_TAG
(
info
,
"libsrtp version:
\"
%s
\"
"
,
srtp_get_version_string
());
srtp_err_status_t
err
=
srtp_init
();
if
(
DepLibSRTP
::
IsError
(
err
))
if
(
DepLibSRTP
::
IsError
(
err
))
{
MS_THROW_ERROR
(
"srtp_init() failed: %s"
,
DepLibSRTP
::
GetErrorString
(
err
));
}
// Set libsrtp event handler.
err
=
srtp_install_event_handler
([](
srtp_event_data_t
*
data
){
MS_TRACE
();
switch
(
data
->
event
)
{
case
event_ssrc_collision
:
MS_WARN_TAG
(
srtp
,
"SSRC collision occurred"
);
break
;
case
event_key_soft_limit
:
MS_WARN_TAG
(
srtp
,
"stream reached the soft key usage limit and will expire soon"
);
break
;
case
event_key_hard_limit
:
MS_WARN_TAG
(
srtp
,
"stream reached the hard key usage limit and has expired"
);
break
;
case
event_packet_index_limit
:
MS_WARN_TAG
(
srtp
,
"stream reached the hard packet limit (2^48 packets)"
);
break
;
}
});
if
(
DepLibSRTP
::
IsError
(
err
))
{
MS_THROW_ERROR
(
"srtp_install_event_handler() failed: %s"
,
DepLibSRTP
::
GetErrorString
(
err
));
}
}
void
DepLibSRTP
::
ClassDestroy
()
{
DepLibSRTP
::~
DepLibSRTP
()
{
MS_TRACE
();
srtp_shutdown
();
}
/* Class methods. */
void
SrtpSession
::
ClassInit
()
{
// Set libsrtp event handler.
srtp_err_status_t
err
=
srtp_install_event_handler
(
static_cast
<
srtp_event_handler_func_t
*>
(
OnSrtpEvent
));
if
(
DepLibSRTP
::
IsError
(
err
))
{
MS_THROW_ERROR
(
"srtp_install_event_handler() failed: %s"
,
DepLibSRTP
::
GetErrorString
(
err
));
}
}
void
SrtpSession
::
OnSrtpEvent
(
srtp_event_data_t
*
data
)
{
MS_TRACE
();
switch
(
data
->
event
)
{
case
event_ssrc_collision
:
MS_WARN_TAG
(
srtp
,
"SSRC collision occurred"
);
break
;
case
event_key_soft_limit
:
MS_WARN_TAG
(
srtp
,
"stream reached the soft key usage limit and will expire soon"
);
break
;
case
event_key_hard_limit
:
MS_WARN_TAG
(
srtp
,
"stream reached the hard key usage limit and has expired"
);
break
;
case
event_packet_index_limit
:
MS_WARN_TAG
(
srtp
,
"stream reached the hard packet limit (2^48 packets)"
);
break
;
}
}
/////////////////////////////////////////////////////////////////////////////////////
/* Instance methods. */
SrtpSession
::
SrtpSession
(
Type
type
,
CryptoSuite
cryptoSuite
,
uint8_t
*
key
,
size_t
keyLen
)
{
_env
=
DepLibSRTP
::
Instance
().
shared_from_this
();
MS_TRACE
();
srtp_policy_t
policy
;
// NOLINT(cppcoreguidelines-pro-type-member-init)
...
...
This diff is collapsed.
Click to expand it.
webrtc/SrtpSession.hpp
查看文件 @
0d4cc2fc
...
...
@@ -4,21 +4,22 @@
#include "Utils.hpp"
#include <srtp2/srtp.h>
#include <vector>
#include <memory>
namespace
RTC
{
class
DepLibSRTP
{
class
DepLibSRTP
:
public
std
::
enable_shared_from_this
<
DepLibSRTP
>
{
public
:
static
void
ClassInit
();
static
void
ClassDestroy
();
static
bool
IsError
(
srtp_err_status_t
code
)
{
return
(
code
!=
srtp_err_status_ok
);
}
static
const
char
*
GetErrorString
(
srtp_err_status_t
code
)
{
// This throws out_of_range if the given index is not in the vector.
return
DepLibSRTP
::
errors
.
at
(
code
);
}
using
Ptr
=
std
::
shared_ptr
<
DepLibSRTP
>
;
~
DepLibSRTP
();
static
bool
IsError
(
srtp_err_status_t
code
);
static
const
char
*
GetErrorString
(
srtp_err_status_t
code
);
static
DepLibSRTP
&
Instance
();
private
:
static
std
::
vector
<
const
char
*>
errors
;
DepLibSRTP
()
;
};
class
SrtpSession
...
...
@@ -41,12 +42,6 @@ namespace RTC
};
public
:
static
void
ClassInit
();
private
:
static
void
OnSrtpEvent
(
srtp_event_data_t
*
data
);
public
:
SrtpSession
(
Type
type
,
CryptoSuite
cryptoSuite
,
uint8_t
*
key
,
size_t
keyLen
);
~
SrtpSession
();
...
...
@@ -63,6 +58,10 @@ namespace RTC
private
:
// Allocated by this.
srtp_t
session
{
nullptr
};
//rtp包最大1600
static
constexpr
size_t
EncryptBufferSize
{
1600
};
uint8_t
EncryptBuffer
[
EncryptBufferSize
];
DepLibSRTP
::
Ptr
_env
;
};
}
// namespace RTC
...
...
This diff is collapsed.
Click to expand it.
webrtc/WebRtcTransport.cpp
查看文件 @
0d4cc2fc
...
...
@@ -5,15 +5,16 @@
WebRtcTransport
::
WebRtcTransport
()
{
static
onceToken
token
([](){
RTC
::
DtlsTransport
::
ClassInit
();
RTC
::
DepLibSRTP
::
ClassInit
();
RTC
::
SrtpSession
::
ClassInit
();
});
dtls_transport_
=
std
::
make_shared
<
RTC
::
DtlsTransport
>
(
EventPollerPool
::
Instance
().
getFirstPoller
(),
this
);
ice_server_
=
std
::
make_shared
<
RTC
::
IceServer
>
(
this
,
makeRandStr
(
4
),
makeRandStr
(
24
));
}
WebRtcTransport
::~
WebRtcTransport
()
{}
WebRtcTransport
::~
WebRtcTransport
()
{
dtls_transport_
=
nullptr
;
ice_server_
=
nullptr
;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论