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
dfaa8b54
Commit
dfaa8b54
authored
Oct 10, 2020
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
使用临时变量和std::move减少智能指针的拷贝构造
parent
83a24a58
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
31 行增加
和
30 行删除
+31
-30
3rdpart/ZLToolKit
+1
-1
src/Common/MediaSource.h
+4
-4
src/FMP4/FMP4MediaSource.h
+4
-4
src/FMP4/FMP4MediaSourceMuxer.h
+1
-1
src/Rtmp/RtmpMediaSource.h
+5
-4
src/Rtmp/RtmpMediaSourceImp.h
+2
-2
src/Rtp/PSRtpSender.cpp
+1
-1
src/Rtp/PSRtpSender.h
+2
-2
src/Rtsp/RtspMediaSource.h
+4
-4
src/Rtsp/RtspMediaSourceImp.h
+2
-2
src/TS/TSMediaSource.h
+4
-4
src/TS/TSMediaSourceMuxer.h
+1
-1
没有找到文件。
ZLToolKit
@
ac02dc10
Subproject commit
735f194e18d5fb576c0da03024226a6f38537e5a
Subproject commit
ac02dc10fb0cc065d72a0e950e5c1aafff1da0d6
src/Common/MediaSource.h
查看文件 @
dfaa8b54
...
...
@@ -328,13 +328,13 @@ public:
virtual
~
PacketCache
()
=
default
;
void
inputPacket
(
bool
is_video
,
const
std
::
shared_ptr
<
packet
>
&
pkt
,
bool
key_pos
)
{
void
inputPacket
(
bool
is_video
,
std
::
shared_ptr
<
packet
>
pkt
,
bool
key_pos
)
{
if
(
_policy
.
isFlushAble
(
is_video
,
key_pos
,
_policy
.
getStamp
(
pkt
),
_cache
->
size
()))
{
flushAll
();
}
//追加数据到最后
_cache
->
emplace_back
(
pkt
);
_cache
->
emplace_back
(
std
::
move
(
pkt
)
);
if
(
key_pos
)
{
_key_pos
=
key_pos
;
}
...
...
@@ -344,14 +344,14 @@ public:
_cache
->
clear
();
}
virtual
void
onFlush
(
std
::
shared_ptr
<
packet_list
>
&
,
bool
key_pos
)
=
0
;
virtual
void
onFlush
(
std
::
shared_ptr
<
packet_list
>
,
bool
key_pos
)
=
0
;
private
:
void
flushAll
()
{
if
(
_cache
->
empty
())
{
return
;
}
onFlush
(
_cache
,
_key_pos
);
onFlush
(
std
::
move
(
_cache
)
,
_key_pos
);
_cache
=
std
::
make_shared
<
packet_list
>
();
_key_pos
=
false
;
}
...
...
src/FMP4/FMP4MediaSource.h
查看文件 @
dfaa8b54
...
...
@@ -92,7 +92,7 @@ public:
* @param packet FMP4包
* @param key 是否为关键帧第一个包
*/
void
onWrite
(
const
FMP4Packet
::
Ptr
&
packet
,
bool
key
)
override
{
void
onWrite
(
FMP4Packet
::
Ptr
packet
,
bool
key
)
override
{
if
(
!
_ring
)
{
createRing
();
}
...
...
@@ -100,7 +100,7 @@ public:
_have_video
=
true
;
}
_speed
+=
packet
->
size
();
PacketCache
<
FMP4Packet
,
FMP4FlushPolicy
>::
inputPacket
(
true
,
packet
,
key
);
PacketCache
<
FMP4Packet
,
FMP4FlushPolicy
>::
inputPacket
(
true
,
std
::
move
(
packet
)
,
key
);
}
/**
...
...
@@ -132,9 +132,9 @@ private:
* @param packet_list 合并写缓存列队
* @param key_pos 是否包含关键帧
*/
void
onFlush
(
std
::
shared_ptr
<
List
<
FMP4Packet
::
Ptr
>
>
&
packet_list
,
bool
key_pos
)
override
{
void
onFlush
(
std
::
shared_ptr
<
List
<
FMP4Packet
::
Ptr
>
>
packet_list
,
bool
key_pos
)
override
{
//如果不存在视频,那么就没有存在GOP缓存的意义,所以确保一直清空GOP缓存
_ring
->
write
(
packet_list
,
_have_video
?
key_pos
:
true
);
_ring
->
write
(
std
::
move
(
packet_list
)
,
_have_video
?
key_pos
:
true
);
}
private
:
...
...
src/FMP4/FMP4MediaSourceMuxer.h
查看文件 @
dfaa8b54
...
...
@@ -74,7 +74,7 @@ protected:
}
FMP4Packet
::
Ptr
packet
=
std
::
make_shared
<
FMP4Packet
>
(
std
::
move
(
string
));
packet
->
time_stamp
=
stamp
;
_media_src
->
onWrite
(
packet
,
key_frame
);
_media_src
->
onWrite
(
std
::
move
(
packet
)
,
key_frame
);
}
private
:
...
...
src/Rtmp/RtmpMediaSource.h
查看文件 @
dfaa8b54
...
...
@@ -118,7 +118,7 @@ public:
* 输入rtmp包
* @param pkt rtmp包
*/
void
onWrite
(
const
RtmpPacket
::
Ptr
&
pkt
,
bool
=
true
)
override
{
void
onWrite
(
RtmpPacket
::
Ptr
pkt
,
bool
=
true
)
override
{
_speed
+=
pkt
->
size
();
//保存当前时间戳
switch
(
pkt
->
type_id
)
{
...
...
@@ -152,7 +152,8 @@ public:
regist
();
}
}
PacketCache
<
RtmpPacket
>::
inputPacket
(
pkt
->
type_id
==
MSG_VIDEO
,
pkt
,
pkt
->
isVideoKeyFrame
());
bool
key
=
pkt
->
isVideoKeyFrame
();
PacketCache
<
RtmpPacket
>::
inputPacket
(
pkt
->
type_id
==
MSG_VIDEO
,
std
::
move
(
pkt
),
key
);
}
/**
...
...
@@ -186,9 +187,9 @@ private:
* @param rtmp_list rtmp包列表
* @param key_pos 是否包含关键帧
*/
void
onFlush
(
std
::
shared_ptr
<
List
<
RtmpPacket
::
Ptr
>
>
&
rtmp_list
,
bool
key_pos
)
override
{
void
onFlush
(
std
::
shared_ptr
<
List
<
RtmpPacket
::
Ptr
>
>
rtmp_list
,
bool
key_pos
)
override
{
//如果不存在视频,那么就没有存在GOP缓存的意义,所以is_key一直为true确保一直清空GOP缓存
_ring
->
write
(
rtmp_list
,
_have_video
?
key_pos
:
true
);
_ring
->
write
(
std
::
move
(
rtmp_list
)
,
_have_video
?
key_pos
:
true
);
}
private
:
...
...
src/Rtmp/RtmpMediaSourceImp.h
查看文件 @
dfaa8b54
...
...
@@ -60,12 +60,12 @@ public:
/**
* 输入rtmp并解析
*/
void
onWrite
(
const
RtmpPacket
::
Ptr
&
pkt
,
bool
=
true
)
override
{
void
onWrite
(
RtmpPacket
::
Ptr
pkt
,
bool
=
true
)
override
{
if
(
!
_all_track_ready
||
_muxer
->
isEnabled
())
{
//未获取到所有Track后,或者开启转协议,那么需要解复用rtmp
_demuxer
->
inputRtmp
(
pkt
);
}
RtmpMediaSource
::
onWrite
(
pkt
);
RtmpMediaSource
::
onWrite
(
std
::
move
(
pkt
)
);
}
/**
...
...
src/Rtp/PSRtpSender.cpp
查看文件 @
dfaa8b54
...
...
@@ -113,7 +113,7 @@ void PSRtpSender::onRtp(const RtpPacket::Ptr &rtp, bool) {
}
//此函数在其他线程执行
void
PSRtpSender
::
onFlush
(
shared_ptr
<
List
<
RtpPacket
::
Ptr
>
>
&
rtp_list
,
bool
)
{
void
PSRtpSender
::
onFlush
(
shared_ptr
<
List
<
RtpPacket
::
Ptr
>
>
rtp_list
,
bool
)
{
if
(
!
_is_connect
){
//连接成功后才能发送数据
return
;
...
...
src/Rtp/PSRtpSender.h
查看文件 @
dfaa8b54
...
...
@@ -24,7 +24,7 @@ public:
RingDelegateHelper
(
onRtp
on_rtp
){
_on_rtp
=
std
::
move
(
on_rtp
);
}
void
onWrite
(
const
RtpPacket
::
Ptr
&
in
,
bool
is_key
)
override
{
void
onWrite
(
RtpPacket
::
Ptr
in
,
bool
is_key
)
override
{
_on_rtp
(
in
,
is_key
);
}
...
...
@@ -68,7 +68,7 @@ protected:
* @param rtp_list rtp包列表
* @param key_pos 是否包含关键帧
*/
void
onFlush
(
std
::
shared_ptr
<
List
<
RtpPacket
::
Ptr
>
>
&
rtp_list
,
bool
key_pos
)
override
;
void
onFlush
(
std
::
shared_ptr
<
List
<
RtpPacket
::
Ptr
>
>
rtp_list
,
bool
key_pos
)
override
;
private
:
//rtp打包后回调
...
...
src/Rtsp/RtspMediaSource.h
查看文件 @
dfaa8b54
...
...
@@ -156,7 +156,7 @@ public:
* @param rtp rtp包
* @param keyPos 该包是否为关键帧的第一个包
*/
void
onWrite
(
const
RtpPacket
::
Ptr
&
rtp
,
bool
keyPos
)
override
{
void
onWrite
(
RtpPacket
::
Ptr
rtp
,
bool
keyPos
)
override
{
_speed
+=
rtp
->
size
();
assert
(
rtp
->
type
>=
0
&&
rtp
->
type
<
TrackMax
);
auto
track
=
_tracks
[
rtp
->
type
];
...
...
@@ -182,7 +182,7 @@ public:
regist
();
}
}
PacketCache
<
RtpPacket
>::
inputPacket
(
rtp
->
type
==
TrackVideo
,
rtp
,
keyPos
);
PacketCache
<
RtpPacket
>::
inputPacket
(
rtp
->
type
==
TrackVideo
,
std
::
move
(
rtp
)
,
keyPos
);
}
void
clearCache
()
override
{
...
...
@@ -196,9 +196,9 @@ private:
* @param rtp_list rtp包列表
* @param key_pos 是否包含关键帧
*/
void
onFlush
(
std
::
shared_ptr
<
List
<
RtpPacket
::
Ptr
>
>
&
rtp_list
,
bool
key_pos
)
override
{
void
onFlush
(
std
::
shared_ptr
<
List
<
RtpPacket
::
Ptr
>
>
rtp_list
,
bool
key_pos
)
override
{
//如果不存在视频,那么就没有存在GOP缓存的意义,所以is_key一直为true确保一直清空GOP缓存
_ring
->
write
(
rtp_list
,
_have_video
?
key_pos
:
true
);
_ring
->
write
(
std
::
move
(
rtp_list
)
,
_have_video
?
key_pos
:
true
);
}
private
:
...
...
src/Rtsp/RtspMediaSourceImp.h
查看文件 @
dfaa8b54
...
...
@@ -47,7 +47,7 @@ public:
/**
* 输入rtp并解析
*/
void
onWrite
(
const
RtpPacket
::
Ptr
&
rtp
,
bool
key_pos
)
override
{
void
onWrite
(
RtpPacket
::
Ptr
rtp
,
bool
key_pos
)
override
{
if
(
_all_track_ready
&&
!
_muxer
->
isEnabled
())
{
//获取到所有Track后,并且未开启转协议,那么不需要解复用rtp
//在关闭rtp解复用后,无法知道是否为关键帧,这样会导致无法秒开,或者开播花屏
...
...
@@ -56,7 +56,7 @@ public:
//需要解复用rtp
key_pos
=
_demuxer
->
inputRtp
(
rtp
);
}
RtspMediaSource
::
onWrite
(
rtp
,
key_pos
);
RtspMediaSource
::
onWrite
(
std
::
move
(
rtp
)
,
key_pos
);
}
/**
...
...
src/TS/TSMediaSource.h
查看文件 @
dfaa8b54
...
...
@@ -75,7 +75,7 @@ public:
* @param packet TS包
* @param key 是否为关键帧第一个包
*/
void
onWrite
(
const
TSPacket
::
Ptr
&
packet
,
bool
key
)
override
{
void
onWrite
(
TSPacket
::
Ptr
packet
,
bool
key
)
override
{
_speed
+=
packet
->
size
();
if
(
!
_ring
)
{
createRing
();
...
...
@@ -83,7 +83,7 @@ public:
if
(
key
)
{
_have_video
=
true
;
}
PacketCache
<
TSPacket
,
TSFlushPolicy
>::
inputPacket
(
true
,
packet
,
key
);
PacketCache
<
TSPacket
,
TSFlushPolicy
>::
inputPacket
(
true
,
std
::
move
(
packet
)
,
key
);
}
/**
...
...
@@ -114,9 +114,9 @@ private:
* @param packet_list 合并写缓存列队
* @param key_pos 是否包含关键帧
*/
void
onFlush
(
std
::
shared_ptr
<
List
<
TSPacket
::
Ptr
>
>
&
packet_list
,
bool
key_pos
)
override
{
void
onFlush
(
std
::
shared_ptr
<
List
<
TSPacket
::
Ptr
>
>
packet_list
,
bool
key_pos
)
override
{
//如果不存在视频,那么就没有存在GOP缓存的意义,所以确保一直清空GOP缓存
_ring
->
write
(
packet_list
,
_have_video
?
key_pos
:
true
);
_ring
->
write
(
std
::
move
(
packet_list
)
,
_have_video
?
key_pos
:
true
);
}
private
:
...
...
src/TS/TSMediaSourceMuxer.h
查看文件 @
dfaa8b54
...
...
@@ -70,7 +70,7 @@ protected:
TSPacket
::
Ptr
packet
=
_pool
.
obtain
();
packet
->
assign
((
char
*
)
data
,
len
);
packet
->
time_stamp
=
timestamp
;
_media_src
->
onWrite
(
packet
,
is_idr_fast_packet
);
_media_src
->
onWrite
(
std
::
move
(
packet
)
,
is_idr_fast_packet
);
}
private
:
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论