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
a0b46495
Commit
a0b46495
authored
3 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化rtp重发列队性能
parent
6707b134
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
24 行增加
和
15 行删除
+24
-15
webrtc/Nack.cpp
+23
-15
webrtc/Nack.h
+1
-0
没有找到文件。
webrtc/Nack.cpp
查看文件 @
a0b46495
...
...
@@ -15,12 +15,17 @@ using namespace toolkit;
using
namespace
mediakit
;
static
constexpr
uint32_t
kMaxNackMS
=
5
*
1000
;
static
constexpr
uint32_t
kRtpCacheCheckInterval
=
100
;
void
NackList
::
pushBack
(
RtpPacket
::
Ptr
rtp
)
{
auto
seq
=
rtp
->
getSeq
();
_nack_cache_seq
.
emplace_back
(
seq
);
_nack_cache_pkt
.
emplace
(
seq
,
std
::
move
(
rtp
));
while
(
getCacheMS
()
>
kMaxNackMS
)
{
if
(
++
_cache_ms_check
<
kRtpCacheCheckInterval
)
{
return
;
}
_cache_ms_check
=
0
;
while
(
getCacheMS
()
>=
kMaxNackMS
)
{
//需要清除部分nack缓存
popFront
();
}
...
...
@@ -57,23 +62,26 @@ RtpPacket::Ptr *NackList::getRtp(uint16_t seq) {
}
uint32_t
NackList
::
getCacheMS
()
{
auto
back_stamp
=
getRtpStamp
(
_nack_cache_seq
.
back
());
if
(
back_stamp
==
-
1
)
{
_nack_cache_seq
.
pop_back
();
return
0
;
}
while
(
_nack_cache_seq
.
size
()
>
2
)
{
auto
back_stamp
=
getRtpStamp
(
_nack_cache_seq
.
back
());
if
(
back_stamp
==
-
1
)
{
_nack_cache_seq
.
pop_back
();
continue
;
}
auto
front_stamp
=
getRtpStamp
(
_nack_cache_seq
.
front
());
if
(
front_stamp
==
-
1
)
{
_nack_cache_seq
.
pop_front
();
return
0
;
}
auto
front_stamp
=
getRtpStamp
(
_nack_cache_seq
.
front
());
if
(
front_stamp
==
-
1
)
{
_nack_cache_seq
.
pop_front
();
continue
;
}
if
(
back_stamp
>=
front_stamp
)
{
return
back_stamp
-
front_stamp
;
if
(
back_stamp
>=
front_stamp
)
{
return
back_stamp
-
front_stamp
;
}
//很有可能回环了
return
back_stamp
+
(
UINT32_MAX
-
front_stamp
);
}
//很有可能回环了
return
back_stamp
+
(
UINT32_MAX
-
front_stamp
);
return
0
;
}
int64_t
NackList
::
getRtpStamp
(
uint16_t
seq
)
{
...
...
This diff is collapsed.
Click to expand it.
webrtc/Nack.h
查看文件 @
a0b46495
...
...
@@ -30,6 +30,7 @@ private:
mediakit
::
RtpPacket
::
Ptr
*
getRtp
(
uint16_t
seq
);
private
:
int
_cache_ms_check
=
0
;
std
::
deque
<
uint16_t
>
_nack_cache_seq
;
std
::
unordered_map
<
uint16_t
,
mediakit
::
RtpPacket
::
Ptr
>
_nack_cache_pkt
;
};
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论