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
Oct 23, 2018
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
...
...
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
:
/**
...
...
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
();
}
...
...
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
:
...
...
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
)
{
...
...
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
:
...
...
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
);
};
...
...
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
);
}
/**
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论