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
9039f8c1
Commit
9039f8c1
authored
5 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
支持超大rtp包
parent
cc7b19de
显示空白字符变更
内嵌
并排
正在显示
9 个修改的文件
包含
30 行增加
和
37 行删除
+30
-37
Android/app/src/main/cpp/native-lib.cpp
+1
-1
src/Rtsp/RtpReceiver.cpp
+15
-15
src/Rtsp/RtspPlayer.cpp
+1
-1
src/Rtsp/RtspSession.h
+2
-2
src/RtspMuxer/AACRtpCodec.cpp
+2
-2
src/RtspMuxer/H264RtpCodec.cpp
+2
-2
src/RtspMuxer/H265RtpCodec.cpp
+2
-2
src/RtspMuxer/RtpCodec.cpp
+4
-2
src/RtspMuxer/RtpCodec.h
+1
-10
没有找到文件。
Android/app/src/main/cpp/native-lib.cpp
查看文件 @
9039f8c1
...
@@ -203,7 +203,7 @@ JNI_API(jlong,createMediaPlayer,jstring url,jobject callback){
...
@@ -203,7 +203,7 @@ JNI_API(jlong,createMediaPlayer,jstring url,jobject callback){
emitEvent
((
jobject
)
globalWeakRef
,
"onShutdown"
,
"(ILjava/lang/String;)V"
,(
jint
)
ex
.
getErrCode
(),
env
->
NewStringUTF
(
ex
.
what
()));
emitEvent
((
jobject
)
globalWeakRef
,
"onShutdown"
,
"(ILjava/lang/String;)V"
,(
jint
)
ex
.
getErrCode
(),
env
->
NewStringUTF
(
ex
.
what
()));
});
});
(
*
player
)[
Client
::
kRtpType
]
=
Rtsp
::
RTP_
UD
P
;
(
*
player
)[
Client
::
kRtpType
]
=
Rtsp
::
RTP_
TC
P
;
player
->
play
(
stringFromJstring
(
env
,
url
));
player
->
play
(
stringFromJstring
(
env
,
url
));
return
(
jlong
)(
ret
);
return
(
jlong
)(
ret
);
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtpReceiver.cpp
查看文件 @
9039f8c1
...
@@ -45,9 +45,9 @@ RtpReceiver::~RtpReceiver() {}
...
@@ -45,9 +45,9 @@ RtpReceiver::~RtpReceiver() {}
bool
RtpReceiver
::
handleOneRtp
(
int
iTrackidx
,
SdpTrack
::
Ptr
&
track
,
unsigned
char
*
pucData
,
unsigned
int
uiLen
)
{
bool
RtpReceiver
::
handleOneRtp
(
int
iTrackidx
,
SdpTrack
::
Ptr
&
track
,
unsigned
char
*
pucData
,
unsigned
int
uiLen
)
{
auto
pt_ptr
=
_pktPool
.
obtain
();
auto
pt_ptr
=
_pktPool
.
obtain
();
auto
&
rtppt
=*
pt_ptr
;
auto
&
rtppt
=*
pt_ptr
;
rtppt
.
interleaved
=
track
->
_interleaved
;
auto
length
=
uiLen
+
4
;
rtppt
.
length
=
uiLen
+
4
;
rtppt
.
interleaved
=
track
->
_interleaved
;
rtppt
.
mark
=
pucData
[
1
]
>>
7
;
rtppt
.
mark
=
pucData
[
1
]
>>
7
;
rtppt
.
PT
=
pucData
[
1
]
&
0x7F
;
rtppt
.
PT
=
pucData
[
1
]
&
0x7F
;
//序列号
//序列号
...
@@ -81,12 +81,8 @@ bool RtpReceiver::handleOneRtp(int iTrackidx,SdpTrack::Ptr &track, unsigned char
...
@@ -81,12 +81,8 @@ bool RtpReceiver::handleOneRtp(int iTrackidx,SdpTrack::Ptr &track, unsigned char
}
}
_aui32SsrcErrorCnt
[
iTrackidx
]
=
0
;
_aui32SsrcErrorCnt
[
iTrackidx
]
=
0
;
rtppt
.
payload
[
0
]
=
'$'
;
//获取rtp中媒体数据偏移量
rtppt
.
payload
[
1
]
=
rtppt
.
interleaved
;
rtppt
.
offset
=
12
+
4
;
rtppt
.
payload
[
2
]
=
uiLen
>>
8
;
rtppt
.
payload
[
3
]
=
(
uiLen
&
0x00FF
);
rtppt
.
offset
=
16
;
int
csrc
=
pucData
[
0
]
&
0x0f
;
int
csrc
=
pucData
[
0
]
&
0x0f
;
int
ext
=
pucData
[
0
]
&
0x10
;
int
ext
=
pucData
[
0
]
&
0x10
;
rtppt
.
offset
+=
4
*
csrc
;
rtppt
.
offset
+=
4
*
csrc
;
...
@@ -99,16 +95,20 @@ bool RtpReceiver::handleOneRtp(int iTrackidx,SdpTrack::Ptr &track, unsigned char
...
@@ -99,16 +95,20 @@ bool RtpReceiver::handleOneRtp(int iTrackidx,SdpTrack::Ptr &track, unsigned char
rtppt
.
offset
+=
ext
;
rtppt
.
offset
+=
ext
;
}
}
if
(
rtppt
.
length
-
rtppt
.
offset
<=
0
){
if
(
length
-
rtppt
.
offset
<=
0
){
WarnL
<<
"无有效负载的rtp包:"
<<
rtppt
.
length
<<
"<="
<<
(
int
)
rtppt
.
offset
;
WarnL
<<
"无有效负载的rtp包:"
<<
length
<<
"<="
<<
(
int
)
rtppt
.
offset
;
return
false
;
return
false
;
}
}
if
(
uiLen
>
sizeof
(
rtppt
.
payload
)
-
4
){
rtppt
.
setCapacity
(
length
);
WarnL
<<
"超长的rtp包:"
<<
uiLen
<<
">"
<<
sizeof
(
rtppt
.
payload
)
-
4
;
rtppt
.
setSize
(
length
);
return
false
;
uint8_t
*
payload_ptr
=
(
uint8_t
*
)
rtppt
.
data
();
}
payload_ptr
[
0
]
=
'$'
;
memcpy
(
rtppt
.
payload
+
4
,
pucData
,
uiLen
);
payload_ptr
[
1
]
=
rtppt
.
interleaved
;
payload_ptr
[
2
]
=
uiLen
>>
8
;
payload_ptr
[
3
]
=
(
uiLen
&
0x00FF
);
//拷贝rtp负载
memcpy
(
payload_ptr
+
4
,
pucData
,
uiLen
);
/////////////////////////////////RTP排序逻辑///////////////////////////////////
/////////////////////////////////RTP排序逻辑///////////////////////////////////
if
(
rtppt
.
sequence
!=
_aui16LastSeq
[
iTrackidx
]
+
1
&&
_aui16LastSeq
[
iTrackidx
]
!=
0
){
if
(
rtppt
.
sequence
!=
_aui16LastSeq
[
iTrackidx
]
+
1
&&
_aui16LastSeq
[
iTrackidx
]
!=
0
){
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtspPlayer.cpp
查看文件 @
9039f8c1
...
@@ -732,7 +732,7 @@ void RtspPlayer::onRecvRTP_l(const RtpPacket::Ptr &pkt, const SdpTrack::Ptr &tra
...
@@ -732,7 +732,7 @@ void RtspPlayer::onRecvRTP_l(const RtpPacket::Ptr &pkt, const SdpTrack::Ptr &tra
//send rtcp every 5 second
//send rtcp every 5 second
counter
.
lastTimeStamp
=
counter
.
timeStamp
;
counter
.
lastTimeStamp
=
counter
.
timeStamp
;
//直接保存网络字节序
//直接保存网络字节序
memcpy
(
&
counter
.
timeStamp
,
pkt
->
payload
+
8
,
4
);
memcpy
(
&
counter
.
timeStamp
,
pkt
->
data
()
+
8
,
4
);
if
(
counter
.
lastTimeStamp
!=
0
){
if
(
counter
.
lastTimeStamp
!=
0
){
sendReceiverReport
(
_eType
==
Rtsp
::
RTP_TCP
,
iTrackIndex
);
sendReceiverReport
(
_eType
==
Rtsp
::
RTP_TCP
,
iTrackIndex
);
ticker
.
resetTime
();
ticker
.
resetTime
();
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtspSession.h
查看文件 @
9039f8c1
...
@@ -57,10 +57,10 @@ public:
...
@@ -57,10 +57,10 @@ public:
virtual
~
BufferRtp
(){}
virtual
~
BufferRtp
(){}
char
*
data
()
const
override
{
char
*
data
()
const
override
{
return
(
char
*
)
_rtp
->
payload
+
_offset
;
return
(
char
*
)
_rtp
->
data
()
+
_offset
;
}
}
uint32_t
size
()
const
override
{
uint32_t
size
()
const
override
{
return
_rtp
->
length
-
_offset
;
return
_rtp
->
size
()
-
_offset
;
}
}
private
:
private
:
RtpPacket
::
Ptr
_rtp
;
RtpPacket
::
Ptr
_rtp
;
...
...
This diff is collapsed.
Click to expand it.
src/RtspMuxer/AACRtpCodec.cpp
查看文件 @
9039f8c1
...
@@ -105,10 +105,10 @@ bool AACRtpDecoder::inputRtp(const RtpPacket::Ptr &rtppack, bool key_pos) {
...
@@ -105,10 +105,10 @@ bool AACRtpDecoder::inputRtp(const RtpPacket::Ptr &rtppack, bool key_pos) {
RtpCodec
::
inputRtp
(
rtppack
,
false
);
RtpCodec
::
inputRtp
(
rtppack
,
false
);
// 获取rtp数据长度
// 获取rtp数据长度
int
length
=
rtppack
->
length
-
rtppack
->
offset
;
int
length
=
rtppack
->
size
()
-
rtppack
->
offset
;
// 获取rtp数据
// 获取rtp数据
const
uint8_t
*
rtp_packet_buf
=
(
uint8_t
*
)
rtppack
->
payload
+
rtppack
->
offset
;
const
uint8_t
*
rtp_packet_buf
=
(
uint8_t
*
)
rtppack
->
data
()
+
rtppack
->
offset
;
do
do
{
{
...
...
This diff is collapsed.
Click to expand it.
src/RtspMuxer/H264RtpCodec.cpp
查看文件 @
9039f8c1
...
@@ -91,8 +91,8 @@ bool H264RtpDecoder::decodeRtp(const RtpPacket::Ptr &rtppack) {
...
@@ -91,8 +91,8 @@ bool H264RtpDecoder::decodeRtp(const RtpPacket::Ptr &rtppack) {
* Type==8:PPS frame
* Type==8:PPS frame
*/
*/
const
uint8_t
*
frame
=
(
uint8_t
*
)
rtppack
->
payload
+
rtppack
->
offset
;
const
uint8_t
*
frame
=
(
uint8_t
*
)
rtppack
->
data
()
+
rtppack
->
offset
;
int
length
=
rtppack
->
length
-
rtppack
->
offset
;
int
length
=
rtppack
->
size
()
-
rtppack
->
offset
;
NALU
nal
;
NALU
nal
;
MakeNalu
(
*
frame
,
nal
);
MakeNalu
(
*
frame
,
nal
);
...
...
This diff is collapsed.
Click to expand it.
src/RtspMuxer/H265RtpCodec.cpp
查看文件 @
9039f8c1
...
@@ -82,8 +82,8 @@ bool H265RtpDecoder::inputRtp(const RtpPacket::Ptr &rtp, bool key_pos) {
...
@@ -82,8 +82,8 @@ bool H265RtpDecoder::inputRtp(const RtpPacket::Ptr &rtp, bool key_pos) {
}
}
bool
H265RtpDecoder
::
decodeRtp
(
const
RtpPacket
::
Ptr
&
rtppack
)
{
bool
H265RtpDecoder
::
decodeRtp
(
const
RtpPacket
::
Ptr
&
rtppack
)
{
const
uint8_t
*
frame
=
(
uint8_t
*
)
rtppack
->
payload
+
rtppack
->
offset
;
const
uint8_t
*
frame
=
(
uint8_t
*
)
rtppack
->
data
()
+
rtppack
->
offset
;
int
length
=
rtppack
->
length
-
rtppack
->
offset
;
int
length
=
rtppack
->
size
()
-
rtppack
->
offset
;
int
nal
=
H265_TYPE
(
frame
[
0
]);
int
nal
=
H265_TYPE
(
frame
[
0
]);
if
(
nal
>
50
){
if
(
nal
>
50
){
...
...
This diff is collapsed.
Click to expand it.
src/RtspMuxer/RtpCodec.cpp
查看文件 @
9039f8c1
...
@@ -35,7 +35,10 @@ RtpPacket::Ptr RtpInfo::makeRtp(TrackType type, const void* data, unsigned int l
...
@@ -35,7 +35,10 @@ RtpPacket::Ptr RtpInfo::makeRtp(TrackType type, const void* data, unsigned int l
uint32_t
sc
=
htonl
(
_ui32Ssrc
);
uint32_t
sc
=
htonl
(
_ui32Ssrc
);
auto
rtppkt
=
ResourcePoolHelper
<
RtpPacket
>::
obtainObj
();
auto
rtppkt
=
ResourcePoolHelper
<
RtpPacket
>::
obtainObj
();
unsigned
char
*
pucRtp
=
rtppkt
->
payload
;
rtppkt
->
setCapacity
(
len
+
16
);
rtppkt
->
setSize
(
len
+
16
);
unsigned
char
*
pucRtp
=
(
unsigned
char
*
)
rtppkt
->
data
();
pucRtp
[
0
]
=
'$'
;
pucRtp
[
0
]
=
'$'
;
pucRtp
[
1
]
=
_ui8Interleaved
;
pucRtp
[
1
]
=
_ui8Interleaved
;
pucRtp
[
2
]
=
ui16RtpLen
>>
8
;
pucRtp
[
2
]
=
ui16RtpLen
>>
8
;
...
@@ -52,7 +55,6 @@ RtpPacket::Ptr RtpInfo::makeRtp(TrackType type, const void* data, unsigned int l
...
@@ -52,7 +55,6 @@ RtpPacket::Ptr RtpInfo::makeRtp(TrackType type, const void* data, unsigned int l
rtppkt
->
PT
=
_ui8PlayloadType
;
rtppkt
->
PT
=
_ui8PlayloadType
;
rtppkt
->
interleaved
=
_ui8Interleaved
;
rtppkt
->
interleaved
=
_ui8Interleaved
;
rtppkt
->
mark
=
mark
;
rtppkt
->
mark
=
mark
;
rtppkt
->
length
=
len
+
16
;
rtppkt
->
sequence
=
_ui16Sequence
;
rtppkt
->
sequence
=
_ui16Sequence
;
rtppkt
->
timeStamp
=
uiStamp
;
rtppkt
->
timeStamp
=
uiStamp
;
rtppkt
->
ssrc
=
_ui32Ssrc
;
rtppkt
->
ssrc
=
_ui32Ssrc
;
...
...
This diff is collapsed.
Click to expand it.
src/RtspMuxer/RtpCodec.h
查看文件 @
9039f8c1
...
@@ -35,27 +35,18 @@ using namespace toolkit;
...
@@ -35,27 +35,18 @@ using namespace toolkit;
namespace
mediakit
{
namespace
mediakit
{
class
RtpPacket
:
public
Buffer
{
class
RtpPacket
:
public
Buffer
Raw
{
public
:
public
:
typedef
std
::
shared_ptr
<
RtpPacket
>
Ptr
;
typedef
std
::
shared_ptr
<
RtpPacket
>
Ptr
;
uint8_t
interleaved
;
uint8_t
interleaved
;
uint8_t
PT
;
uint8_t
PT
;
bool
mark
;
bool
mark
;
uint32_t
length
;
//时间戳,单位毫秒
//时间戳,单位毫秒
uint32_t
timeStamp
;
uint32_t
timeStamp
;
uint16_t
sequence
;
uint16_t
sequence
;
uint32_t
ssrc
;
uint32_t
ssrc
;
uint8_t
payload
[
1604
];
uint8_t
offset
;
uint8_t
offset
;
TrackType
type
;
TrackType
type
;
char
*
data
()
const
override
{
return
(
char
*
)
payload
;
}
uint32_t
size
()
const
override
{
return
length
;
}
};
};
class
RtpRingInterface
{
class
RtpRingInterface
{
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论