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
452f150f
Commit
452f150f
authored
6 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善Frame相关的接口
parent
8930dd09
显示空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
61 行增加
和
43 行删除
+61
-43
src/Player/Frame.h
+23
-13
src/Player/Track.h
+8
-7
src/RTP/AACRtpCodec.cpp
+3
-4
src/RTP/AACRtpCodec.h
+1
-2
src/RTP/H264RtpCodec.cpp
+4
-8
src/RTP/H264RtpCodec.h
+1
-2
src/RTP/RtpCodec.h
+16
-0
src/Rtsp/RtspEncoder.h
+5
-7
没有找到文件。
src/Player/Frame.h
查看文件 @
452f150f
...
...
@@ -50,13 +50,19 @@ public:
/**
* 时间戳
*/
virtual
uint32_t
stamp
()
=
0
;
virtual
uint32_t
stamp
()
const
=
0
;
/**
* 前缀长度,譬如264前缀为0x00 00 00 01,那么前缀长度就是4
* aac前缀则为7个字节
*/
virtual
uint32_t
prefixSize
()
=
0
;
virtual
uint32_t
prefixSize
()
const
=
0
;
/**
* 返回是否为关键帧
* @return
*/
virtual
bool
keyFrame
()
const
=
0
;
};
/**
...
...
@@ -85,10 +91,8 @@ public:
/**
* 写入帧数据
* @param frame 帧
* @param key_pos 是否为关键帧
* @return 是否为关键帧
*/
virtual
bool
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
)
=
0
;
virtual
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
=
0
;
};
...
...
@@ -120,11 +124,9 @@ public:
/**
* 输入数据帧
* @param frame
* @param key_pos
*/
bool
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
)
override
{
_frameRing
->
write
(
frame
,
key_pos
);
return
key_pos
;
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
override
{
_frameRing
->
write
(
frame
,
frame
->
keyFrame
());
}
protected
:
RingType
::
Ptr
_frameRing
;
...
...
@@ -143,10 +145,10 @@ public:
uint32_t
size
()
const
override
{
return
buffer
.
size
();
}
uint32_t
stamp
()
override
{
uint32_t
stamp
()
const
override
{
return
timeStamp
;
}
uint32_t
prefixSize
()
override
{
uint32_t
prefixSize
()
const
override
{
return
iPrefixSize
;
}
...
...
@@ -157,6 +159,10 @@ public:
CodecId
getCodecId
()
const
override
{
return
CodecH264
;
}
bool
keyFrame
()
const
override
{
return
type
==
5
;
}
public
:
uint16_t
sequence
;
uint32_t
timeStamp
;
...
...
@@ -178,10 +184,10 @@ public:
uint32_t
size
()
const
override
{
return
aac_frame_length
;
}
uint32_t
stamp
()
override
{
uint32_t
stamp
()
const
override
{
return
timeStamp
;
}
uint32_t
prefixSize
()
override
{
uint32_t
prefixSize
()
const
override
{
return
iPrefixSize
;
}
...
...
@@ -192,6 +198,10 @@ public:
CodecId
getCodecId
()
const
override
{
return
CodecAAC
;
}
bool
keyFrame
()
const
override
{
return
false
;
}
public
:
unsigned
int
syncword
;
//12 bslbf 同步字The bit string ‘1111 1111 1111’,说明一个ADTS帧的开始
unsigned
int
id
;
//1 bslbf MPEG 标示符, 设置为1
...
...
This diff is collapsed.
Click to expand it.
src/Player/Track.h
查看文件 @
452f150f
...
...
@@ -21,6 +21,9 @@ public:
Track
(){}
virtual
~
Track
(){}
/**
* 根据sdp生成Track对象
*/
static
Ptr
getTrackBySdp
(
const
string
&
sdp
);
};
...
...
@@ -165,9 +168,8 @@ public:
/**
* 输入数据帧,并获取sps pps
* @param frame 数据帧
* @param key_pos 是否为关键帧
*/
bool
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
)
override
{
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
override
{
int
type
=
(
*
((
uint8_t
*
)
frame
->
data
()
+
frame
->
prefixSize
()))
&
0x1F
;
switch
(
type
){
case
7
:{
...
...
@@ -193,7 +195,7 @@ public:
insertFrame
->
type
=
7
;
insertFrame
->
buffer
=
_sps
;
insertFrame
->
iPrefixSize
=
0
;
VideoTrack
::
inputFrame
(
insertFrame
,
true
);
VideoTrack
::
inputFrame
(
insertFrame
);
}
if
(
!
_pps
.
empty
()){
...
...
@@ -202,19 +204,18 @@ public:
insertFrame
->
type
=
8
;
insertFrame
->
buffer
=
_pps
;
insertFrame
->
iPrefixSize
=
0
;
VideoTrack
::
inputFrame
(
insertFrame
,
false
);
VideoTrack
::
inputFrame
(
insertFrame
);
}
VideoTrack
::
inputFrame
(
frame
,
false
);
VideoTrack
::
inputFrame
(
frame
);
}
break
;
case
1
:{
//B or P
VideoTrack
::
inputFrame
(
frame
,
false
);
VideoTrack
::
inputFrame
(
frame
);
}
break
;
}
return
type
==
5
;
}
private
:
/**
...
...
This diff is collapsed.
Click to expand it.
src/RTP/AACRtpCodec.cpp
查看文件 @
452f150f
...
...
@@ -17,8 +17,8 @@ AACRtpEncoder::AACRtpEncoder(uint32_t ui32Ssrc,
AACRtpDecoder
(
ui32SampleRate
){
}
bool
AACRtpEncoder
::
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
)
{
RtpCodec
::
inputFrame
(
frame
,
false
);
void
AACRtpEncoder
::
inputFrame
(
const
Frame
::
Ptr
&
frame
)
{
RtpCodec
::
inputFrame
(
frame
);
GET_CONFIG_AND_REGISTER
(
uint32_t
,
cycleMS
,
Config
::
Rtp
::
kCycleMS
);
auto
uiStamp
=
frame
->
stamp
();
...
...
@@ -47,7 +47,6 @@ bool AACRtpEncoder::inputFrame(const Frame::Ptr &frame, bool key_pos) {
ptr
+=
(
m_ui32MtuSize
-
20
);
iSize
-=
(
m_ui32MtuSize
-
20
);
}
return
false
;
}
void
AACRtpEncoder
::
makeAACRtp
(
const
void
*
pData
,
unsigned
int
uiLen
,
bool
bMark
,
uint32_t
uiStamp
)
{
...
...
@@ -122,7 +121,7 @@ bool AACRtpDecoder::inputRtp(const RtpPacket::Ptr &rtppack, bool key_pos) {
void
AACRtpDecoder
::
onGetAdts
(
const
AACFrame
::
Ptr
&
frame
)
{
//写入环形缓存
RtpCodec
::
inputFrame
(
frame
,
false
);
RtpCodec
::
inputFrame
(
frame
);
m_adts
=
obtainFrame
();
}
...
...
This diff is collapsed.
Click to expand it.
src/RTP/AACRtpCodec.h
查看文件 @
452f150f
...
...
@@ -68,9 +68,8 @@ public:
/**
* 输入aac 数据,必须带dats头
* @param frame 带dats头的aac数据
* @param key_pos 此参数内部强制转换为false,请忽略之
*/
bool
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
=
fals
e
)
override
;
void
inputFrame
(
const
Frame
::
Ptr
&
fram
e
)
override
;
private
:
void
makeAACRtp
(
const
void
*
pData
,
unsigned
int
uiLen
,
bool
bMark
,
uint32_t
uiStamp
);
private
:
...
...
This diff is collapsed.
Click to expand it.
src/RTP/H264RtpCodec.cpp
查看文件 @
452f150f
...
...
@@ -99,7 +99,7 @@ bool H264RtpDecoder::decodeRtp(const RtpPacket::Ptr &rtppack) {
void
H264RtpDecoder
::
onGetH264
(
const
H264Frame
::
Ptr
&
frame
)
{
//写入环形缓存
RtpCodec
::
inputFrame
(
frame
,
frame
->
type
==
5
);
RtpCodec
::
inputFrame
(
frame
);
m_h264frame
=
obtainFrame
();
}
...
...
@@ -118,13 +118,11 @@ H264RtpEncoder::H264RtpEncoder(uint32_t ui32Ssrc,
ui8Interleaved
)
{
}
bool
H264RtpEncoder
::
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
)
{
auto
pcData
=
frame
->
data
()
+
frame
->
prefixSize
();
key_pos
=
(((
uint8_t
*
)
(
pcData
))[
0
]
&
0x1F
)
==
5
;
RtpCodec
::
inputFrame
(
frame
,
key_pos
);
void
H264RtpEncoder
::
inputFrame
(
const
Frame
::
Ptr
&
frame
)
{
RtpCodec
::
inputFrame
(
frame
);
GET_CONFIG_AND_REGISTER
(
uint32_t
,
cycleMS
,
Config
::
Rtp
::
kCycleMS
);
auto
pcData
=
frame
->
data
()
+
frame
->
prefixSize
();
auto
uiStamp
=
frame
->
stamp
();
auto
iLen
=
frame
->
size
()
-
frame
->
prefixSize
();
...
...
@@ -167,8 +165,6 @@ bool H264RtpEncoder::inputFrame(const Frame::Ptr &frame, bool key_pos) {
}
else
{
makeH264Rtp
(
pcData
,
iLen
,
true
,
uiStamp
);
}
return
key_pos
;
}
void
H264RtpEncoder
::
makeH264Rtp
(
const
void
*
data
,
unsigned
int
len
,
bool
mark
,
uint32_t
uiStamp
)
{
...
...
This diff is collapsed.
Click to expand it.
src/RTP/H264RtpCodec.h
查看文件 @
452f150f
...
...
@@ -67,9 +67,8 @@ public:
/**
* 输入264帧
* @param frame 帧数据,必须
* @param key_pos
*/
bool
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
)
override
;
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
override
;
private
:
void
makeH264Rtp
(
const
void
*
pData
,
unsigned
int
uiLen
,
bool
bMark
,
uint32_t
uiStamp
);
private
:
...
...
This diff is collapsed.
Click to expand it.
src/RTP/RtpCodec.h
查看文件 @
452f150f
...
...
@@ -162,6 +162,16 @@ public:
RtpCodec
(){}
virtual
~
RtpCodec
(){}
/**
* 根据CodecId生成Rtp打包器
* @param codecId
* @param ui32Ssrc
* @param ui32MtuSize
* @param ui32SampleRate
* @param ui8PlayloadType
* @param ui8Interleaved
* @return
*/
static
Ptr
getRtpEncoderById
(
CodecId
codecId
,
uint32_t
ui32Ssrc
,
uint32_t
ui32MtuSize
,
...
...
@@ -169,6 +179,12 @@ public:
uint8_t
ui8PlayloadType
,
uint8_t
ui8Interleaved
);
/**
* 根据CodecId生成Rtp解包器
* @param codecId
* @param ui32SampleRate
* @return
*/
static
Ptr
getRtpDecoderById
(
CodecId
codecId
,
uint32_t
ui32SampleRate
);
};
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtspEncoder.h
查看文件 @
452f150f
...
...
@@ -71,10 +71,9 @@ public:
/**
* 输入帧数据,驱动rtp打包
* @param frame 帧数据
* @param key_pos 是否为关键帧
*/
bool
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
)
override
{
return
_encoder
->
inputFrame
(
frame
,
key_pos
);
void
inputFrame
(
const
Frame
::
Ptr
&
frame
)
override
{
_encoder
->
inputFrame
(
frame
);
}
/**
...
...
@@ -313,14 +312,13 @@ public:
/**
* 写入帧数据然后打包rtp
* @param frame 帧数据
* @param key_pos 是否为关键帧
*/
bool
inputFrame
(
const
Frame
::
Ptr
&
frame
,
bool
key_pos
=
tru
e
)
override
{
void
inputFrame
(
const
Frame
::
Ptr
&
fram
e
)
override
{
auto
it
=
_sdp_map
.
find
(
frame
->
getTrackType
());
if
(
it
==
_sdp_map
.
end
()){
return
false
;
return
;
}
return
it
->
second
->
inputFrame
(
frame
,
key_pos
);
it
->
second
->
inputFrame
(
frame
);
}
/**
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论