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
4 years ago
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
This diff is collapsed.
Click to expand it.
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
;
}
...
...
This diff is collapsed.
Click to expand it.
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
:
...
...
This diff is collapsed.
Click to expand it.
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
:
...
...
This diff is collapsed.
Click to expand it.
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
:
...
...
This diff is collapsed.
Click to expand it.
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
)
);
}
/**
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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打包后回调
...
...
This diff is collapsed.
Click to expand it.
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
:
...
...
This diff is collapsed.
Click to expand it.
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
);
}
/**
...
...
This diff is collapsed.
Click to expand it.
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
:
...
...
This diff is collapsed.
Click to expand it.
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
:
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论