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
250f62e3
Commit
250f62e3
authored
6 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:xiongziliang/ZLMediaKit
parents
5c8914e1
03263e37
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
43 行增加
和
20 行删除
+43
-20
c_wrapper/src/common.cpp
+1
-1
src/RTP/RtpMakerAAC.cpp
+1
-1
src/RTP/RtpMakerH264.cpp
+2
-1
src/Rtsp/RtpParser.cpp
+14
-13
src/Rtsp/Rtsp.cpp
+2
-2
src/Rtsp/Rtsp.h
+3
-2
src/Rtsp/RtspPlayer.cpp
+20
-0
没有找到文件。
c_wrapper/src/common.cpp
查看文件 @
250f62e3
...
@@ -136,7 +136,7 @@ public:
...
@@ -136,7 +136,7 @@ public:
_cb
=
cb
;
_cb
=
cb
;
}
}
virtual
~
LogoutChannel
(){}
virtual
~
LogoutChannel
(){}
void
write
(
const
LogInfo
_p
tr
&
logInfo
){
void
write
(
const
LogInfo
P
tr
&
logInfo
){
if
(
level
()
>
logInfo
->
_level
)
{
if
(
level
()
>
logInfo
->
_level
)
{
return
;
return
;
}
}
...
...
This diff is collapsed.
Click to expand it.
src/RTP/RtpMakerAAC.cpp
查看文件 @
250f62e3
...
@@ -91,7 +91,7 @@ inline void RtpMaker_AAC::makeAACRtp(const void *pData, unsigned int uiLen, bool
...
@@ -91,7 +91,7 @@ inline void RtpMaker_AAC::makeAACRtp(const void *pData, unsigned int uiLen, bool
rtppkt
.
timeStamp
=
m_ui32TimeStamp
;
rtppkt
.
timeStamp
=
m_ui32TimeStamp
;
rtppkt
.
ssrc
=
m_ui32Ssrc
;
rtppkt
.
ssrc
=
m_ui32Ssrc
;
rtppkt
.
type
=
TrackAudio
;
rtppkt
.
type
=
TrackAudio
;
rtppkt
.
offset
=
16
;
memcpy
(
rtppkt
.
payload
+
16
,
pData
,
uiLen
);
memcpy
(
rtppkt
.
payload
+
16
,
pData
,
uiLen
);
onMakeRtp
(
pRtppkt
,
false
);
onMakeRtp
(
pRtppkt
,
false
);
m_ui16Sequence
++
;
m_ui16Sequence
++
;
...
...
This diff is collapsed.
Click to expand it.
src/RTP/RtpMakerH264.cpp
查看文件 @
250f62e3
...
@@ -108,8 +108,9 @@ inline void RtpMaker_H264::makeH264Rtp(const void* data, unsigned int len, bool
...
@@ -108,8 +108,9 @@ inline void RtpMaker_H264::makeH264Rtp(const void* data, unsigned int len, bool
rtppkt
.
timeStamp
=
m_ui32TimeStamp
;
rtppkt
.
timeStamp
=
m_ui32TimeStamp
;
rtppkt
.
ssrc
=
m_ui32Ssrc
;
rtppkt
.
ssrc
=
m_ui32Ssrc
;
rtppkt
.
type
=
TrackVideo
;
rtppkt
.
type
=
TrackVideo
;
uint8_t
type
=
((
uint8_t
*
)
(
data
))[
0
]
&
0x1F
;
rtppkt
.
offset
=
16
;
memcpy
(
rtppkt
.
payload
+
16
,
data
,
len
);
memcpy
(
rtppkt
.
payload
+
16
,
data
,
len
);
uint8_t
type
=
((
uint8_t
*
)
(
data
))[
0
]
&
0x1F
;
onMakeRtp
(
pRtppkt
,
type
==
5
);
onMakeRtp
(
pRtppkt
,
type
==
5
);
m_ui16Sequence
++
;
m_ui16Sequence
++
;
//InfoL<<timeStamp<<" "<<time<<" "<<sampleRate;
//InfoL<<timeStamp<<" "<<time<<" "<<sampleRate;
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtpParser.cpp
查看文件 @
250f62e3
...
@@ -111,18 +111,18 @@ bool RtpParser::inputRtp(const RtpPacket& rtp) {
...
@@ -111,18 +111,18 @@ bool RtpParser::inputRtp(const RtpPacket& rtp) {
inline
bool
RtpParser
::
inputVideo
(
const
RtpPacket
&
rtppack
,
inline
bool
RtpParser
::
inputVideo
(
const
RtpPacket
&
rtppack
,
const
RtspTrack
&
track
)
{
const
RtspTrack
&
track
)
{
const
char
*
frame
=
(
char
*
)
rtppack
.
payload
+
16
;
const
uint8_t
*
frame
=
(
uint8_t
*
)
rtppack
.
payload
+
rtppack
.
offset
;
int
length
=
rtppack
.
length
-
16
;
int
length
=
rtppack
.
length
-
rtppack
.
offset
;
NALU
nal
;
NALU
nal
;
MakeNalu
(
*
frame
,
nal
);
MakeNalu
(
*
frame
,
nal
);
//Type==1:P frame
//Type==1:P frame
//Type==6:SEI frame
//Type==6:SEI frame
//Type==7:SPS frame
//Type==7:SPS frame
//Type==8:PPS frame
//Type==8:PPS frame
if
(
nal
.
type
>
0
&&
nal
.
type
<
24
)
{
if
(
nal
.
type
>
=
0
&&
nal
.
type
<
24
)
{
//a full frame
//a full frame
m_h264frame
.
data
.
assign
(
"\x0\x0\x0\x1"
,
4
);
m_h264frame
.
data
.
assign
(
"\x0\x0\x0\x1"
,
4
);
m_h264frame
.
data
.
append
(
frame
,
length
);
m_h264frame
.
data
.
append
(
(
char
*
)
frame
,
length
);
m_h264frame
.
type
=
nal
.
type
;
m_h264frame
.
type
=
nal
.
type
;
m_h264frame
.
timeStamp
=
rtppack
.
timeStamp
/
90
;
m_h264frame
.
timeStamp
=
rtppack
.
timeStamp
/
90
;
m_h264frame
.
sequence
=
rtppack
.
sequence
;
m_h264frame
.
sequence
=
rtppack
.
sequence
;
...
@@ -139,7 +139,7 @@ inline bool RtpParser::inputVideo(const RtpPacket& rtppack,
...
@@ -139,7 +139,7 @@ inline bool RtpParser::inputVideo(const RtpPacket& rtppack,
char
tmp
=
(
nal
.
forbidden_zero_bit
<<
7
|
nal
.
nal_ref_idc
<<
5
|
fu
.
type
);
char
tmp
=
(
nal
.
forbidden_zero_bit
<<
7
|
nal
.
nal_ref_idc
<<
5
|
fu
.
type
);
m_h264frame
.
data
.
assign
(
"\x0\x0\x0\x1"
,
4
);
m_h264frame
.
data
.
assign
(
"\x0\x0\x0\x1"
,
4
);
m_h264frame
.
data
.
push_back
(
tmp
);
m_h264frame
.
data
.
push_back
(
tmp
);
m_h264frame
.
data
.
append
(
frame
+
2
,
length
-
2
);
m_h264frame
.
data
.
append
(
(
char
*
)
frame
+
2
,
length
-
2
);
m_h264frame
.
type
=
fu
.
type
;
m_h264frame
.
type
=
fu
.
type
;
m_h264frame
.
timeStamp
=
rtppack
.
timeStamp
/
90
;
m_h264frame
.
timeStamp
=
rtppack
.
timeStamp
/
90
;
m_h264frame
.
sequence
=
rtppack
.
sequence
;
m_h264frame
.
sequence
=
rtppack
.
sequence
;
...
@@ -154,17 +154,17 @@ inline bool RtpParser::inputVideo(const RtpPacket& rtppack,
...
@@ -154,17 +154,17 @@ inline bool RtpParser::inputVideo(const RtpPacket& rtppack,
m_h264frame
.
sequence
=
rtppack
.
sequence
;
m_h264frame
.
sequence
=
rtppack
.
sequence
;
if
(
fu
.
E
==
1
)
{
if
(
fu
.
E
==
1
)
{
//FU-A end
//FU-A end
m_h264frame
.
data
.
append
(
frame
+
2
,
length
-
2
);
m_h264frame
.
data
.
append
(
(
char
*
)
frame
+
2
,
length
-
2
);
m_h264frame
.
timeStamp
=
rtppack
.
timeStamp
/
90
;
m_h264frame
.
timeStamp
=
rtppack
.
timeStamp
/
90
;
_onGetH264
(
m_h264frame
);
_onGetH264
(
m_h264frame
);
m_h264frame
.
data
.
clear
();
m_h264frame
.
data
.
clear
();
return
false
;
return
false
;
}
}
//FU-A mid
//FU-A mid
m_h264frame
.
data
.
append
(
frame
+
2
,
length
-
2
);
m_h264frame
.
data
.
append
(
(
char
*
)
frame
+
2
,
length
-
2
);
return
false
;
return
false
;
}
}
WarnL
<<
nal
.
type
;
WarnL
<<
nal
.
type
<<
" "
<<
rtppack
.
sequence
;
return
false
;
return
false
;
// 29 FU-B 单NAL单元B模式
// 29 FU-B 单NAL单元B模式
// 24 STAP-A 单一时间的组合包
// 24 STAP-A 单一时间的组合包
...
@@ -239,8 +239,8 @@ inline void RtpParser::onGetVideoTrack(const RtspTrack& video) {
...
@@ -239,8 +239,8 @@ inline void RtpParser::onGetVideoTrack(const RtspTrack& video) {
inline
bool
RtpParser
::
inputAudio
(
const
RtpPacket
&
rtppack
,
inline
bool
RtpParser
::
inputAudio
(
const
RtpPacket
&
rtppack
,
const
RtspTrack
&
track
)
{
const
RtspTrack
&
track
)
{
char
*
frame
=
(
char
*
)
rtppack
.
payload
+
16
;
char
*
frame
=
(
char
*
)
rtppack
.
payload
+
rtppack
.
offset
;
int
length
=
rtppack
.
length
-
16
;
int
length
=
rtppack
.
length
-
rtppack
.
offset
;
if
(
m_adts
.
aac_frame_length
+
length
-
4
>
sizeof
(
AdtsFrame
::
data
))
{
if
(
m_adts
.
aac_frame_length
+
length
-
4
>
sizeof
(
AdtsFrame
::
data
))
{
m_adts
.
aac_frame_length
=
7
;
m_adts
.
aac_frame_length
=
7
;
...
@@ -271,9 +271,8 @@ inline void RtpParser::_onGetH264(H264Frame& frame) {
...
@@ -271,9 +271,8 @@ inline void RtpParser::_onGetH264(H264Frame& frame) {
insertedFrame
.
timeStamp
=
frame
.
timeStamp
;
insertedFrame
.
timeStamp
=
frame
.
timeStamp
;
insertedFrame
.
data
=
m_strPPS
;
insertedFrame
.
data
=
m_strPPS
;
onGetH264
(
insertedFrame
);
onGetH264
(
insertedFrame
);
}
case
1
:
//P
onGetH264
(
frame
);
onGetH264
(
frame
);
}
break
;
break
;
case
7
:
{
//SPS
case
7
:
{
//SPS
m_strSPS
=
frame
.
data
;
m_strSPS
=
frame
.
data
;
...
@@ -284,8 +283,10 @@ inline void RtpParser::_onGetH264(H264Frame& frame) {
...
@@ -284,8 +283,10 @@ inline void RtpParser::_onGetH264(H264Frame& frame) {
}
}
break
;
break
;
case
8
:
//PPS
case
8
:
//PPS
m_strPPS
=
frame
.
data
;
break
;
m_strPPS
=
frame
.
data
;
break
;
default
:
default
:
onGetH264
(
frame
);
break
;
break
;
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/Rtsp.cpp
查看文件 @
250f62e3
...
@@ -99,7 +99,7 @@ int parserSDP(const string& sdp, RtspTrack Track[2]) {
...
@@ -99,7 +99,7 @@ int parserSDP(const string& sdp, RtspTrack Track[2]) {
// parserSDP(str,track);
// parserSDP(str,track);
// track[0].inited=true;
// track[0].inited=true;
//});
//});
bool
MakeNalu
(
char
in
,
NALU
&
nal
)
{
bool
MakeNalu
(
uint8_t
in
,
NALU
&
nal
)
{
nal
.
forbidden_zero_bit
=
in
>>
7
;
nal
.
forbidden_zero_bit
=
in
>>
7
;
if
(
nal
.
forbidden_zero_bit
)
{
if
(
nal
.
forbidden_zero_bit
)
{
return
false
;
return
false
;
...
@@ -108,7 +108,7 @@ bool MakeNalu(char in, NALU &nal) {
...
@@ -108,7 +108,7 @@ bool MakeNalu(char in, NALU &nal) {
nal
.
type
=
in
&
0x1f
;
nal
.
type
=
in
&
0x1f
;
return
true
;
return
true
;
}
}
bool
MakeFU
(
char
in
,
FU
&
fu
)
{
bool
MakeFU
(
uint8_t
in
,
FU
&
fu
)
{
fu
.
S
=
in
>>
7
;
fu
.
S
=
in
>>
7
;
fu
.
E
=
(
in
>>
6
)
&
0x01
;
fu
.
E
=
(
in
>>
6
)
&
0x01
;
fu
.
R
=
(
in
>>
5
)
&
0x01
;
fu
.
R
=
(
in
>>
5
)
&
0x01
;
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/Rtsp.h
查看文件 @
250f62e3
...
@@ -64,6 +64,7 @@ public:
...
@@ -64,6 +64,7 @@ public:
uint16_t
sequence
;
uint16_t
sequence
;
uint32_t
ssrc
;
uint32_t
ssrc
;
uint8_t
payload
[
1560
];
uint8_t
payload
[
1560
];
uint8_t
offset
;
TrackType
type
;
TrackType
type
;
};
};
...
@@ -209,8 +210,8 @@ typedef struct {
...
@@ -209,8 +210,8 @@ typedef struct {
unsigned
type
:
5
;
unsigned
type
:
5
;
}
FU
;
}
FU
;
bool
MakeNalu
(
char
in
,
NALU
&
nal
)
;
bool
MakeNalu
(
uint8_t
in
,
NALU
&
nal
)
;
bool
MakeFU
(
char
in
,
FU
&
fu
)
;
bool
MakeFU
(
uint8_t
in
,
FU
&
fu
)
;
#endif //RTSP_RTSP_H_
#endif //RTSP_RTSP_H_
This diff is collapsed.
Click to expand it.
src/Rtsp/RtspPlayer.cpp
查看文件 @
250f62e3
...
@@ -583,6 +583,12 @@ void RtspPlayer::splitRtp(unsigned char* pucRtp, unsigned int uiLen) {
...
@@ -583,6 +583,12 @@ void RtspPlayer::splitRtp(unsigned char* pucRtp, unsigned int uiLen) {
}
}
}
}
# define AV_RB16(x) \
((((const uint8_t*)(x))[0] << 8) | \
((const uint8_t*)(x))[1])
bool
RtspPlayer
::
handleOneRtp
(
int
iTrackidx
,
unsigned
char
*
pucData
,
unsigned
int
uiLen
)
{
bool
RtspPlayer
::
handleOneRtp
(
int
iTrackidx
,
unsigned
char
*
pucData
,
unsigned
int
uiLen
)
{
auto
&
track
=
m_aTrackInfo
[
iTrackidx
];
auto
&
track
=
m_aTrackInfo
[
iTrackidx
];
auto
pt_ptr
=
m_pktPool
.
obtain
();
auto
pt_ptr
=
m_pktPool
.
obtain
();
...
@@ -620,6 +626,20 @@ bool RtspPlayer::handleOneRtp(int iTrackidx, unsigned char *pucData, unsigned in
...
@@ -620,6 +626,20 @@ bool RtspPlayer::handleOneRtp(int iTrackidx, unsigned char *pucData, unsigned in
rtppt
.
payload
[
1
]
=
rtppt
.
interleaved
;
rtppt
.
payload
[
1
]
=
rtppt
.
interleaved
;
rtppt
.
payload
[
2
]
=
(
uiLen
&
0xFF00
)
>>
8
;
rtppt
.
payload
[
2
]
=
(
uiLen
&
0xFF00
)
>>
8
;
rtppt
.
payload
[
3
]
=
(
uiLen
&
0x00FF
);
rtppt
.
payload
[
3
]
=
(
uiLen
&
0x00FF
);
rtppt
.
offset
=
16
;
int
csrc
=
pucData
[
0
]
&
0x0f
;
int
ext
=
pucData
[
0
]
&
0x10
;
rtppt
.
offset
+=
4
*
csrc
;
if
(
ext
)
{
if
(
uiLen
<
rtppt
.
offset
){
return
false
;
}
/* calculate the header extension length (stored as number of 32-bit words) */
ext
=
(
AV_RB16
(
pucData
+
rtppt
.
offset
-
2
)
+
1
)
<<
2
;
rtppt
.
offset
+=
ext
;
}
memcpy
(
rtppt
.
payload
+
4
,
pucData
,
uiLen
);
memcpy
(
rtppt
.
payload
+
4
,
pucData
,
uiLen
);
/////////////////////////////////RTP排序逻辑///////////////////////////////////
/////////////////////////////////RTP排序逻辑///////////////////////////////////
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论