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
b891fc56
Commit
b891fc56
authored
Jul 17, 2021
by
wxf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
_rtp_sort_cache_map -> _pkt_sort_cache_map, 不依赖于 RTP
parent
ac01dc97
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
18 行增加
和
18 行删除
+18
-18
src/Rtsp/RtpReceiver.h
+18
-18
没有找到文件。
src/Rtsp/RtpReceiver.h
查看文件 @
b891fc56
...
@@ -37,7 +37,7 @@ public:
...
@@ -37,7 +37,7 @@ public:
*/
*/
void
clear
()
{
void
clear
()
{
_seq_cycle_count
=
0
;
_seq_cycle_count
=
0
;
_
rtp
_sort_cache_map
.
clear
();
_
pkt
_sort_cache_map
.
clear
();
_next_seq_out
=
0
;
_next_seq_out
=
0
;
_max_sort_size
=
kMin
;
_max_sort_size
=
kMin
;
}
}
...
@@ -46,7 +46,7 @@ public:
...
@@ -46,7 +46,7 @@ public:
* 获取排序缓存长度
* 获取排序缓存长度
*/
*/
size_t
getJitterSize
()
const
{
size_t
getJitterSize
()
const
{
return
_
rtp
_sort_cache_map
.
size
();
return
_
pkt
_sort_cache_map
.
size
();
}
}
/**
/**
...
@@ -73,21 +73,21 @@ public:
...
@@ -73,21 +73,21 @@ public:
}
}
//放入排序缓存
//放入排序缓存
_
rtp
_sort_cache_map
.
emplace
(
seq
,
std
::
move
(
packet
));
_
pkt
_sort_cache_map
.
emplace
(
seq
,
std
::
move
(
packet
));
//尝试输出排序后的包
//尝试输出排序后的包
tryPopPacket
();
tryPopPacket
();
}
}
void
flush
(){
void
flush
(){
//清空缓存
//清空缓存
while
(
!
_
rtp
_sort_cache_map
.
empty
())
{
while
(
!
_
pkt
_sort_cache_map
.
empty
())
{
popIterator
(
_
rtp
_sort_cache_map
.
begin
());
popIterator
(
_
pkt
_sort_cache_map
.
begin
());
}
}
}
}
private
:
private
:
void
popPacket
()
{
void
popPacket
()
{
auto
it
=
_
rtp
_sort_cache_map
.
begin
();
auto
it
=
_
pkt
_sort_cache_map
.
begin
();
if
(
it
->
first
>=
_next_seq_out
)
{
if
(
it
->
first
>=
_next_seq_out
)
{
//过滤回跳包
//过滤回跳包
popIterator
(
it
);
popIterator
(
it
);
...
@@ -96,37 +96,37 @@ private:
...
@@ -96,37 +96,37 @@ private:
if
(
_next_seq_out
-
it
->
first
>
(
0xFFFF
>>
1
))
{
if
(
_next_seq_out
-
it
->
first
>
(
0xFFFF
>>
1
))
{
//产生回环了
//产生回环了
if
(
_
rtp
_sort_cache_map
.
size
()
<
2
*
kMin
)
{
if
(
_
pkt
_sort_cache_map
.
size
()
<
2
*
kMin
)
{
//等足够多的数据后才处理回环, 因为后面还可能出现大的SEQ
//等足够多的数据后才处理回环, 因为后面还可能出现大的SEQ
return
;
return
;
}
}
++
_seq_cycle_count
;
++
_seq_cycle_count
;
//找到大的SEQ并清空掉,然后从小的SEQ重新开始排序
//找到大的SEQ并清空掉,然后从小的SEQ重新开始排序
auto
hit
=
_
rtp_sort_cache_map
.
upper_bound
((
SEQ
)
(
_next_seq_out
-
_rtp
_sort_cache_map
.
size
()));
auto
hit
=
_
pkt_sort_cache_map
.
upper_bound
((
SEQ
)
(
_next_seq_out
-
_pkt
_sort_cache_map
.
size
()));
while
(
hit
!=
_
rtp
_sort_cache_map
.
end
())
{
while
(
hit
!=
_
pkt
_sort_cache_map
.
end
())
{
//回环前,清空剩余的大的SEQ的数据
//回环前,清空剩余的大的SEQ的数据
_cb
(
hit
->
first
,
hit
->
second
);
_cb
(
hit
->
first
,
hit
->
second
);
hit
=
_
rtp
_sort_cache_map
.
erase
(
hit
);
hit
=
_
pkt
_sort_cache_map
.
erase
(
hit
);
}
}
//下一个回环的数据
//下一个回环的数据
popIterator
(
_
rtp
_sort_cache_map
.
begin
());
popIterator
(
_
pkt
_sort_cache_map
.
begin
());
return
;
return
;
}
}
//删除回跳的数据包
//删除回跳的数据包
_
rtp
_sort_cache_map
.
erase
(
it
);
_
pkt
_sort_cache_map
.
erase
(
it
);
}
}
void
popIterator
(
typename
map
<
SEQ
,
T
>::
iterator
it
)
{
void
popIterator
(
typename
map
<
SEQ
,
T
>::
iterator
it
)
{
auto
seq
=
it
->
first
;
auto
seq
=
it
->
first
;
auto
data
=
std
::
move
(
it
->
second
);
auto
data
=
std
::
move
(
it
->
second
);
_
rtp
_sort_cache_map
.
erase
(
it
);
_
pkt
_sort_cache_map
.
erase
(
it
);
_next_seq_out
=
seq
+
1
;
_next_seq_out
=
seq
+
1
;
_cb
(
seq
,
data
);
_cb
(
seq
,
data
);
}
}
void
tryPopPacket
()
{
void
tryPopPacket
()
{
int
count
=
0
;
int
count
=
0
;
while
((
!
_
rtp_sort_cache_map
.
empty
()
&&
_rtp
_sort_cache_map
.
begin
()
->
first
==
_next_seq_out
))
{
while
((
!
_
pkt_sort_cache_map
.
empty
()
&&
_pkt
_sort_cache_map
.
begin
()
->
first
==
_next_seq_out
))
{
//找到下个包,直接输出
//找到下个包,直接输出
popPacket
();
popPacket
();
++
count
;
++
count
;
...
@@ -134,7 +134,7 @@ private:
...
@@ -134,7 +134,7 @@ private:
if
(
count
)
{
if
(
count
)
{
setSortSize
();
setSortSize
();
}
else
if
(
_
rtp
_sort_cache_map
.
size
()
>
_max_sort_size
)
{
}
else
if
(
_
pkt
_sort_cache_map
.
size
()
>
_max_sort_size
)
{
//排序缓存溢出,不再继续排序
//排序缓存溢出,不再继续排序
popPacket
();
popPacket
();
setSortSize
();
setSortSize
();
...
@@ -142,7 +142,7 @@ private:
...
@@ -142,7 +142,7 @@ private:
}
}
void
setSortSize
()
{
void
setSortSize
()
{
_max_sort_size
=
kMin
+
_
rtp
_sort_cache_map
.
size
();
_max_sort_size
=
kMin
+
_
pkt
_sort_cache_map
.
size
();
if
(
_max_sort_size
>
kMax
)
{
if
(
_max_sort_size
>
kMax
)
{
_max_sort_size
=
kMax
;
_max_sort_size
=
kMax
;
}
}
...
@@ -155,8 +155,8 @@ private:
...
@@ -155,8 +155,8 @@ private:
size_t
_seq_cycle_count
=
0
;
size_t
_seq_cycle_count
=
0
;
//排序缓存长度
//排序缓存长度
size_t
_max_sort_size
=
kMin
;
size_t
_max_sort_size
=
kMin
;
//
rtp
排序缓存,根据seq排序
//
pkt
排序缓存,根据seq排序
map
<
SEQ
,
T
>
_
rtp
_sort_cache_map
;
map
<
SEQ
,
T
>
_
pkt
_sort_cache_map
;
//回调
//回调
function
<
void
(
SEQ
seq
,
T
&
packet
)
>
_cb
;
function
<
void
(
SEQ
seq
,
T
&
packet
)
>
_cb
;
};
};
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论