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
88e5a199
Commit
88e5a199
authored
7 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加bom、完善rtsp客户端兼容性
parent
906fb061
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
34 行增加
和
18 行删除
+34
-18
src/Common/MediaSource.cpp
+1
-1
src/Common/MediaSource.h
+1
-1
src/Rtsp/Rtsp.cpp
+9
-3
src/Rtsp/Rtsp.h
+2
-1
src/Rtsp/RtspPlayer.cpp
+14
-9
src/Rtsp/RtspSession.cpp
+2
-2
src/Shell/ShellCMD.cpp
+1
-1
tests/test_server.cpp
+4
-0
没有找到文件。
src/Common/MediaSource.cpp
查看文件 @
88e5a199
/*
/*
* MIT License
* MIT License
*
*
* Copyright (c) 2016 xiongziliang <771730766@qq.com>
* Copyright (c) 2016 xiongziliang <771730766@qq.com>
...
...
This diff is collapsed.
Click to expand it.
src/Common/MediaSource.h
查看文件 @
88e5a199
/*
/*
* MIT License
* MIT License
*
*
* Copyright (c) 2016 xiongziliang <771730766@qq.com>
* Copyright (c) 2016 xiongziliang <771730766@qq.com>
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/Rtsp.cpp
查看文件 @
88e5a199
...
@@ -71,7 +71,13 @@ int parserSDP(const string& sdp, RtspTrack Track[2]) {
...
@@ -71,7 +71,13 @@ int parserSDP(const string& sdp, RtspTrack Track[2]) {
if
(
IDStr
==
""
)
{
if
(
IDStr
==
""
)
{
break
;
break
;
}
}
TrackID
=
atoi
(
IDStr
.
c_str
());
if
(
strcasecmp
(
IDStr
.
data
(),
"video"
)
==
0
){
TrackID
=
0
;
}
else
if
(
strcasecmp
(
IDStr
.
data
(),
"audio"
)
==
0
){
TrackID
=
1
;
}
else
{
TrackID
=
atoi
(
IDStr
.
c_str
());
}
pos_end
=
sdp
.
find
(
"m="
,
pos_head
+
2
);
pos_end
=
sdp
.
find
(
"m="
,
pos_head
+
2
);
if
(
pos_end
==
string
::
npos
)
{
if
(
pos_end
==
string
::
npos
)
{
pos_end
=
sdp
.
size
();
pos_end
=
sdp
.
size
();
...
@@ -81,8 +87,8 @@ int parserSDP(const string& sdp, RtspTrack Track[2]) {
...
@@ -81,8 +87,8 @@ int parserSDP(const string& sdp, RtspTrack Track[2]) {
Track
[
track_cnt
].
trackStyle
=
track_str
;
Track
[
track_cnt
].
trackStyle
=
track_str
;
Track
[
track_cnt
].
inited
=
false
;
Track
[
track_cnt
].
inited
=
false
;
Track
[
track_cnt
].
trackId
=
TrackID
;
Track
[
track_cnt
].
trackId
=
TrackID
;
Track
[
track_cnt
].
PT
=
atoi
(
Track
[
track_cnt
].
trackIdStr
=
IDStr
;
FindField
(
mid
.
c_str
(),
"rtpmap:"
,
" "
).
c_str
());
Track
[
track_cnt
].
PT
=
atoi
(
FindField
(
mid
.
c_str
(),
"rtpmap:"
,
" "
).
c_str
());
if
(
mid
.
find
(
"m=video"
)
!=
string
::
npos
)
{
if
(
mid
.
find
(
"m=video"
)
!=
string
::
npos
)
{
//视频通道
//视频通道
Track
[
track_cnt
].
type
=
TrackVideo
;
Track
[
track_cnt
].
type
=
TrackVideo
;
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/Rtsp.h
查看文件 @
88e5a199
...
@@ -44,7 +44,8 @@ class RtspTrack{
...
@@ -44,7 +44,8 @@ class RtspTrack{
public
:
public
:
uint8_t
PT
;
uint8_t
PT
;
uint8_t
trackId
;
uint8_t
trackId
;
uint8_t
interleaved
;
string
trackIdStr
;
uint8_t
interleaved
;
TrackType
type
=
(
TrackType
)
-
1
;
TrackType
type
=
(
TrackType
)
-
1
;
string
trackSdp
;
string
trackSdp
;
string
trackStyle
;
string
trackStyle
;
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtspPlayer.cpp
查看文件 @
88e5a199
...
@@ -225,14 +225,19 @@ inline void RtspPlayer::HandleResDESCRIBE(const Parser& parser) {
...
@@ -225,14 +225,19 @@ inline void RtspPlayer::HandleResDESCRIBE(const Parser& parser) {
}
}
auto
strSdp
=
parser
.
Content
();
auto
strSdp
=
parser
.
Content
();
m_strContentBase
=
parser
[
"Content-Base"
];
m_strContentBase
=
parser
[
"Content-Base"
];
if
(
m_strContentBase
.
empty
()){
m_strContentBase
=
m_strUrl
;
}
if
(
m_strContentBase
[
m_strContentBase
.
length
()
-
1
]
==
'/'
)
{
m_strContentBase
.
pop_back
();
}
auto
iLen
=
atoi
(
parser
[
"Content-Length"
].
data
());
auto
iLen
=
atoi
(
parser
[
"Content-Length"
].
data
());
if
(
iLen
>
0
){
if
(
iLen
>
0
){
strSdp
.
erase
(
iLen
);
strSdp
.
erase
(
iLen
);
}
}
if
(
m_strContentBase
[
m_strContentBase
.
length
()
-
1
]
==
'/'
)
{
m_strContentBase
.
pop_back
();
}
//解析sdp
//解析sdp
m_uiTrackCnt
=
parserSDP
(
strSdp
,
m_aTrackInfo
);
m_uiTrackCnt
=
parserSDP
(
strSdp
,
m_aTrackInfo
);
for
(
unsigned
int
i
=
0
;
i
<
m_uiTrackCnt
;
i
++
)
{
for
(
unsigned
int
i
=
0
;
i
<
m_uiTrackCnt
;
i
++
)
{
...
@@ -256,21 +261,21 @@ inline void RtspPlayer::sendSetup(unsigned int trackIndex) {
...
@@ -256,21 +261,21 @@ inline void RtspPlayer::sendSetup(unsigned int trackIndex) {
auto
&
track
=
m_aTrackInfo
[
trackIndex
];
auto
&
track
=
m_aTrackInfo
[
trackIndex
];
switch
(
m_eType
)
{
switch
(
m_eType
)
{
case
RTP_TCP
:
{
case
RTP_TCP
:
{
iLen
=
sprintf
(
acRtspbuf
,
"SETUP %s/%s%
d
RTSP/1.0
\r\n
"
iLen
=
sprintf
(
acRtspbuf
,
"SETUP %s/%s%
s
RTSP/1.0
\r\n
"
"CSeq: %d
\r\n
"
"CSeq: %d
\r\n
"
"Transport: RTP/AVP/TCP;unicast;interleaved=%d-%d
\r\n
"
"Transport: RTP/AVP/TCP;unicast;interleaved=%d-%d
\r\n
"
"Authorization: Basic %s
\r\n\r\n
"
,
m_strContentBase
.
c_str
(),
"Authorization: Basic %s
\r\n\r\n
"
,
m_strContentBase
.
c_str
(),
track
.
trackStyle
.
c_str
(),
track
.
trackId
,
m_uiCseq
++
,
track
.
trackStyle
.
c_str
(),
track
.
trackId
Str
.
data
()
,
m_uiCseq
++
,
track
.
trackId
*
2
,
track
.
trackId
*
2
+
1
,
track
.
trackId
*
2
,
track
.
trackId
*
2
+
1
,
m_strAuthorization
.
c_str
());
m_strAuthorization
.
c_str
());
}
}
break
;
break
;
case
RTP_MULTICAST
:
{
case
RTP_MULTICAST
:
{
iLen
=
sprintf
(
acRtspbuf
,
"SETUP %s/%s%
d
RTSP/1.0
\r\n
"
iLen
=
sprintf
(
acRtspbuf
,
"SETUP %s/%s%
s
RTSP/1.0
\r\n
"
"CSeq: %d
\r\n
"
"CSeq: %d
\r\n
"
"Transport: RTP/AVP;multicast
\r\n
"
"Transport: RTP/AVP;multicast
\r\n
"
"Authorization: Basic %s
\r\n\r\n
"
,
m_strContentBase
.
c_str
(),
"Authorization: Basic %s
\r\n\r\n
"
,
m_strContentBase
.
c_str
(),
track
.
trackStyle
.
c_str
(),
track
.
trackId
,
m_uiCseq
++
,
track
.
trackStyle
.
c_str
(),
track
.
trackId
Str
.
data
()
,
m_uiCseq
++
,
m_strAuthorization
.
c_str
());
m_strAuthorization
.
c_str
());
}
}
break
;
break
;
...
@@ -281,11 +286,11 @@ inline void RtspPlayer::sendSetup(unsigned int trackIndex) {
...
@@ -281,11 +286,11 @@ inline void RtspPlayer::sendSetup(unsigned int trackIndex) {
throw
std
::
runtime_error
(
"open udp sock err"
);
throw
std
::
runtime_error
(
"open udp sock err"
);
}
}
int
port
=
m_apUdpSock
[
trackIndex
]
->
get_local_port
();
int
port
=
m_apUdpSock
[
trackIndex
]
->
get_local_port
();
iLen
=
sprintf
(
acRtspbuf
,
"SETUP %s/%s%
d
RTSP/1.0
\r\n
"
iLen
=
sprintf
(
acRtspbuf
,
"SETUP %s/%s%
s
RTSP/1.0
\r\n
"
"CSeq: %d
\r\n
"
"CSeq: %d
\r\n
"
"Transport: RTP/AVP;unicast;client_port=%d-%d
\r\n
"
"Transport: RTP/AVP;unicast;client_port=%d-%d
\r\n
"
"Authorization: Basic %s
\r\n\r\n
"
,
m_strContentBase
.
c_str
(),
"Authorization: Basic %s
\r\n\r\n
"
,
m_strContentBase
.
c_str
(),
track
.
trackStyle
.
c_str
(),
track
.
trackId
,
m_uiCseq
++
,
port
,
track
.
trackStyle
.
c_str
(),
track
.
trackId
Str
.
data
()
,
m_uiCseq
++
,
port
,
port
+
1
,
m_strAuthorization
.
c_str
());
port
+
1
,
m_strAuthorization
.
c_str
());
}
}
break
;
break
;
...
...
This diff is collapsed.
Click to expand it.
src/Rtsp/RtspSession.cpp
查看文件 @
88e5a199
...
@@ -734,9 +734,9 @@ bool RtspSession::handleReq_Play() {
...
@@ -734,9 +734,9 @@ bool RtspSession::handleReq_Play() {
shutdown
();
shutdown
();
return
;
return
;
}
}
iLen
+=
sprintf
(
m_pcBuf
+
iLen
,
"url=%s/%s%
d
;seq=%d;rtptime=%u,"
,
iLen
+=
sprintf
(
m_pcBuf
+
iLen
,
"url=%s/%s%
s
;seq=%d;rtptime=%u,"
,
m_strUrl
.
data
(),
track
.
trackStyle
.
data
(),
m_strUrl
.
data
(),
track
.
trackStyle
.
data
(),
track
.
trackId
,
track
.
seq
,
track
.
timeStamp
);
track
.
trackId
Str
.
data
()
,
track
.
seq
,
track
.
timeStamp
);
}
}
iLen
-=
1
;
iLen
-=
1
;
(
m_pcBuf
)[
iLen
]
=
'\0'
;
(
m_pcBuf
)[
iLen
]
=
'\0'
;
...
...
This diff is collapsed.
Click to expand it.
src/Shell/ShellCMD.cpp
查看文件 @
88e5a199
//
//
// Created by xzl on 2017/12/1.
// Created by xzl on 2017/12/1.
//
//
...
...
This diff is collapsed.
Click to expand it.
tests/test_server.cpp
查看文件 @
88e5a199
...
@@ -135,6 +135,10 @@ static onceToken s_token([](){
...
@@ -135,6 +135,10 @@ static onceToken s_token([](){
},
nullptr
);
},
nullptr
);
#if !defined(SIGHUP)
#defined SIGHUP 1
#endif
int
main
(
int
argc
,
char
*
argv
[])
{
int
main
(
int
argc
,
char
*
argv
[])
{
//设置退出信号处理函数
//设置退出信号处理函数
signal
(
SIGINT
,
[](
int
)
{
EventPoller
::
Instance
().
shutdown
();
});
signal
(
SIGINT
,
[](
int
)
{
EventPoller
::
Instance
().
shutdown
();
});
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论