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
14da5ab2
Unverified
Commit
14da5ab2
authored
Jul 09, 2022
by
xiongguangjie
Committed by
GitHub
Jul 09, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
when start send rtp wait key rtp previous drop (#1789)
parent
4f7d3d82
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
40 行增加
和
23 行删除
+40
-23
src/Extension/CommonRtp.cpp
+4
-2
src/Extension/Frame.h
+6
-4
src/Rtp/PSEncoder.cpp
+2
-2
src/Rtp/PSEncoder.h
+1
-1
src/Rtp/RawEncoder.cpp
+2
-2
src/Rtp/RawEncoder.h
+1
-2
src/Rtp/RtpCache.cpp
+19
-7
src/Rtp/RtpCache.h
+5
-3
没有找到文件。
src/Extension/CommonRtp.cpp
查看文件 @
14da5ab2
...
...
@@ -76,7 +76,7 @@ bool CommonRtpEncoder::inputFrame(const Frame::Ptr &frame){
auto
len
=
frame
->
size
()
-
frame
->
prefixSize
();
auto
remain_size
=
len
;
auto
max_size
=
getMaxSize
();
bool
is_key
=
frame
->
keyFrame
();
bool
mark
=
false
;
while
(
remain_size
>
0
)
{
size_t
rtp_size
;
...
...
@@ -86,9 +86,10 @@ bool CommonRtpEncoder::inputFrame(const Frame::Ptr &frame){
rtp_size
=
remain_size
;
mark
=
true
;
}
RtpCodec
::
inputRtp
(
makeRtp
(
getTrackType
(),
ptr
,
rtp_size
,
mark
,
stamp
),
false
);
RtpCodec
::
inputRtp
(
makeRtp
(
getTrackType
(),
ptr
,
rtp_size
,
mark
,
stamp
),
is_key
);
ptr
+=
rtp_size
;
remain_size
-=
rtp_size
;
is_key
=
false
;
}
return
len
>
0
;
}
\ No newline at end of file
src/Extension/Frame.h
查看文件 @
14da5ab2
...
...
@@ -391,17 +391,18 @@ class FrameFromPtr : public Frame{
public
:
typedef
std
::
shared_ptr
<
FrameFromPtr
>
Ptr
;
FrameFromPtr
(
CodecId
codec_id
,
char
*
ptr
,
size_t
size
,
uint32_t
dts
,
uint32_t
pts
=
0
,
size_t
prefix_size
=
0
)
:
FrameFromPtr
(
ptr
,
size
,
dts
,
pts
,
prefix_size
)
{
FrameFromPtr
(
CodecId
codec_id
,
char
*
ptr
,
size_t
size
,
uint32_t
dts
,
uint32_t
pts
=
0
,
size_t
prefix_size
=
0
,
bool
is_key
=
false
)
:
FrameFromPtr
(
ptr
,
size
,
dts
,
pts
,
prefix_size
,
is_key
)
{
_codec_id
=
codec_id
;
}
FrameFromPtr
(
char
*
ptr
,
size_t
size
,
uint32_t
dts
,
uint32_t
pts
=
0
,
size_t
prefix_size
=
0
){
FrameFromPtr
(
char
*
ptr
,
size_t
size
,
uint32_t
dts
,
uint32_t
pts
=
0
,
size_t
prefix_size
=
0
,
bool
is_key
=
false
){
_ptr
=
ptr
;
_size
=
size
;
_dts
=
dts
;
_pts
=
pts
;
_prefix_size
=
prefix_size
;
_is_key
=
is_key
;
}
char
*
data
()
const
override
{
...
...
@@ -440,7 +441,7 @@ public:
}
bool
keyFrame
()
const
override
{
return
false
;
return
_is_key
;
}
bool
configFrame
()
const
override
{
...
...
@@ -457,6 +458,7 @@ protected:
size_t
_size
;
size_t
_prefix_size
;
CodecId
_codec_id
=
CodecInvalid
;
bool
_is_key
;
};
/**
...
...
src/Rtp/PSEncoder.cpp
查看文件 @
14da5ab2
...
...
@@ -23,7 +23,7 @@ PSEncoderImp::PSEncoderImp(uint32_t ssrc, uint8_t payload_type) : MpegMuxer(true
_rtp_encoder
=
std
::
make_shared
<
CommonRtpEncoder
>
(
CodecInvalid
,
ssrc
,
video_mtu
,
90000
,
payload_type
,
0
);
_rtp_encoder
->
setRtpRing
(
std
::
make_shared
<
RtpRing
::
RingType
>
());
_rtp_encoder
->
getRtpRing
()
->
setDelegate
(
std
::
make_shared
<
RingDelegateHelper
>
([
this
](
RtpPacket
::
Ptr
rtp
,
bool
is_key
){
onRTP
(
std
::
move
(
rtp
));
onRTP
(
std
::
move
(
rtp
)
,
is_key
);
}));
InfoL
<<
this
<<
" "
<<
printSSRC
(
_rtp_encoder
->
getSsrc
());
}
...
...
@@ -36,7 +36,7 @@ void PSEncoderImp::onWrite(std::shared_ptr<Buffer> buffer, uint32_t stamp, bool
if
(
!
buffer
)
{
return
;
}
_rtp_encoder
->
inputFrame
(
std
::
make_shared
<
FrameFromPtr
>
(
buffer
->
data
(),
buffer
->
size
(),
stamp
,
stamp
));
_rtp_encoder
->
inputFrame
(
std
::
make_shared
<
FrameFromPtr
>
(
buffer
->
data
(),
buffer
->
size
(),
stamp
,
stamp
,
0
,
key_pos
));
}
}
//namespace mediakit
...
...
src/Rtp/PSEncoder.h
查看文件 @
14da5ab2
...
...
@@ -27,7 +27,7 @@ public:
protected
:
//rtp打包后回调
virtual
void
onRTP
(
toolkit
::
Buffer
::
Ptr
rtp
)
=
0
;
virtual
void
onRTP
(
toolkit
::
Buffer
::
Ptr
rtp
,
bool
is_key
=
false
)
=
0
;
protected
:
void
onWrite
(
std
::
shared_ptr
<
toolkit
::
Buffer
>
buffer
,
uint32_t
stamp
,
bool
key_pos
)
override
;
...
...
src/Rtp/RawEncoder.cpp
查看文件 @
14da5ab2
...
...
@@ -35,7 +35,7 @@ bool RawEncoderImp::addTrack(const Track::Ptr &track){
_rtp_encoder
=
createRtpEncoder
(
track
);
_rtp_encoder
->
setRtpRing
(
std
::
make_shared
<
RtpRing
::
RingType
>
());
_rtp_encoder
->
getRtpRing
()
->
setDelegate
(
std
::
make_shared
<
RingDelegateHelper
>
([
this
](
RtpPacket
::
Ptr
rtp
,
bool
is_key
){
onRTP
(
std
::
move
(
rtp
));
onRTP
(
std
::
move
(
rtp
)
,
true
);
}));
return
true
;
}
...
...
@@ -44,7 +44,7 @@ bool RawEncoderImp::addTrack(const Track::Ptr &track){
_rtp_encoder
=
createRtpEncoder
(
track
);
_rtp_encoder
->
setRtpRing
(
std
::
make_shared
<
RtpRing
::
RingType
>
());
_rtp_encoder
->
getRtpRing
()
->
setDelegate
(
std
::
make_shared
<
RingDelegateHelper
>
([
this
](
RtpPacket
::
Ptr
rtp
,
bool
is_key
){
onRTP
(
std
::
move
(
rtp
));
onRTP
(
std
::
move
(
rtp
)
,
is_key
);
}));
return
true
;
}
...
...
src/Rtp/RawEncoder.h
查看文件 @
14da5ab2
...
...
@@ -43,10 +43,9 @@ public:
protected
:
//rtp打包后回调
virtual
void
onRTP
(
toolkit
::
Buffer
::
Ptr
rtp
)
=
0
;
virtual
void
onRTP
(
toolkit
::
Buffer
::
Ptr
rtp
,
bool
is_key
=
false
)
=
0
;
private
:
RtpCodec
::
Ptr
createRtpEncoder
(
const
Track
::
Ptr
&
track
);
uint32_t
_ssrc
;
uint8_t
_payload_type
;
bool
_sendAudio
;
...
...
src/Rtp/RtpCache.cpp
查看文件 @
14da5ab2
...
...
@@ -19,25 +19,37 @@ namespace mediakit{
RtpCache
::
RtpCache
(
onFlushed
cb
)
{
_cb
=
std
::
move
(
cb
);
}
bool
RtpCache
::
firstKeyReady
(
bool
in
)
{
if
(
_first_key
){
return
_first_key
;
}
_first_key
=
in
;
return
_first_key
;
}
void
RtpCache
::
onFlush
(
std
::
shared_ptr
<
List
<
Buffer
::
Ptr
>
>
rtp_list
,
bool
)
{
_cb
(
std
::
move
(
rtp_list
));
}
void
RtpCache
::
input
(
uint64_t
stamp
,
Buffer
::
Ptr
buffer
)
{
inputPacket
(
stamp
,
true
,
std
::
move
(
buffer
),
false
);
void
RtpCache
::
input
(
uint64_t
stamp
,
Buffer
::
Ptr
buffer
,
bool
is_key
)
{
inputPacket
(
stamp
,
true
,
std
::
move
(
buffer
),
is_key
);
}
void
RtpCachePS
::
onRTP
(
Buffer
::
Ptr
buffer
)
{
void
RtpCachePS
::
onRTP
(
Buffer
::
Ptr
buffer
,
bool
is_key
)
{
if
(
!
firstKeyReady
(
is_key
)){
return
;
}
auto
rtp
=
std
::
static_pointer_cast
<
RtpPacket
>
(
buffer
);
auto
stamp
=
rtp
->
getStampMS
();
input
(
stamp
,
std
::
move
(
buffer
));
input
(
stamp
,
std
::
move
(
buffer
)
,
is_key
);
}
void
RtpCacheRaw
::
onRTP
(
Buffer
::
Ptr
buffer
)
{
void
RtpCacheRaw
::
onRTP
(
Buffer
::
Ptr
buffer
,
bool
is_key
)
{
if
(
!
firstKeyReady
(
is_key
)){
return
;
}
auto
rtp
=
std
::
static_pointer_cast
<
RtpPacket
>
(
buffer
);
auto
stamp
=
rtp
->
getStampMS
();
input
(
stamp
,
std
::
move
(
buffer
));
input
(
stamp
,
std
::
move
(
buffer
)
,
is_key
);
}
}
//namespace mediakit
...
...
src/Rtp/RtpCache.h
查看文件 @
14da5ab2
...
...
@@ -30,13 +30,15 @@ protected:
* 输入rtp(目的是为了合并写)
* @param buffer rtp数据
*/
void
input
(
uint64_t
stamp
,
toolkit
::
Buffer
::
Ptr
buffer
);
void
input
(
uint64_t
stamp
,
toolkit
::
Buffer
::
Ptr
buffer
,
bool
is_key
=
false
);
bool
firstKeyReady
(
bool
in
);
protected
:
void
onFlush
(
std
::
shared_ptr
<
toolkit
::
List
<
toolkit
::
Buffer
::
Ptr
>
>
rtp_list
,
bool
)
override
;
private
:
onFlushed
_cb
;
bool
_first_key
=
false
;
};
class
RtpCachePS
:
public
RtpCache
,
public
PSEncoderImp
{
...
...
@@ -45,7 +47,7 @@ public:
~
RtpCachePS
()
override
=
default
;
protected
:
void
onRTP
(
toolkit
::
Buffer
::
Ptr
rtp
)
override
;
void
onRTP
(
toolkit
::
Buffer
::
Ptr
rtp
,
bool
is_key
=
false
)
override
;
};
...
...
@@ -55,7 +57,7 @@ public:
~
RtpCacheRaw
()
override
=
default
;
protected
:
void
onRTP
(
toolkit
::
Buffer
::
Ptr
rtp
)
override
;
void
onRTP
(
toolkit
::
Buffer
::
Ptr
rtp
,
bool
is_key
=
false
)
override
;
};
}
//namespace mediakit
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论