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
1167211d
Commit
1167211d
authored
6 years ago
by
xiongziliang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完善rtsp服务器
parent
09c1ae87
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
32 行增加
和
27 行删除
+32
-27
src/Rtsp/RtspSession.cpp
+32
-27
没有找到文件。
src/Rtsp/RtspSession.cpp
查看文件 @
1167211d
...
...
@@ -671,11 +671,7 @@ bool RtspSession::handleReq_Setup() {
}
bool
RtspSession
::
handleReq_Play
()
{
if
(
_aTrackInfo
.
size
()
==
0
)
{
//还没有Describe
return
false
;
}
if
(
_parser
[
"Session"
]
!=
_strSession
)
{
if
(
_aTrackInfo
.
empty
()
||
_parser
[
"Session"
]
!=
_strSession
)
{
send_SessionNotFound
();
return
false
;
}
...
...
@@ -684,7 +680,7 @@ bool RtspSession::handleReq_Play() {
bool
authSuccess
=
err
.
empty
();
char
response
[
2
*
1024
];
_pcBuf
=
response
;
if
(
!
authSuccess
&&
_bFirstPlay
){
if
(
!
authSuccess
){
//第一次play是播放,否则是恢复播放。只对播放鉴权
int
n
=
sprintf
(
_pcBuf
,
"RTSP/1.0 401 Unauthorized
\r\n
"
...
...
@@ -700,24 +696,6 @@ bool RtspSession::handleReq_Play() {
shutdown
();
return
;
}
if
(
_pRtpReader
){
weak_ptr
<
RtspSession
>
weakSelf
=
dynamic_pointer_cast
<
RtspSession
>
(
shared_from_this
());
SockUtil
::
setNoDelay
(
_pSender
->
rawFD
(),
false
);
_pRtpReader
->
setReadCB
([
weakSelf
](
const
RtpPacket
::
Ptr
&
pack
)
{
auto
strongSelf
=
weakSelf
.
lock
();
if
(
!
strongSelf
)
{
return
;
}
strongSelf
->
async
([
weakSelf
,
pack
](){
auto
strongSelf
=
weakSelf
.
lock
();
if
(
!
strongSelf
)
{
return
;
}
strongSelf
->
sendRtpPacket
(
pack
);
});
});
}
auto
pMediaSrc
=
_pMediaSrc
.
lock
();
if
(
!
pMediaSrc
){
...
...
@@ -727,6 +705,7 @@ bool RtspSession::handleReq_Play() {
}
if
(
strRange
.
size
()
&&
!
_bFirstPlay
)
{
//这个是seek操作
auto
strStart
=
FindField
(
strRange
.
data
(),
"npt="
,
"-"
);
if
(
strStart
==
"now"
)
{
strStart
=
"0"
;
...
...
@@ -774,6 +753,25 @@ bool RtspSession::handleReq_Play() {
//提高发送性能
(
*
this
)
<<
SocketFlags
(
kSockFlags
);
SockUtil
::
setNoDelay
(
_pSender
->
rawFD
(),
false
);
if
(
_pRtpReader
){
weak_ptr
<
RtspSession
>
weakSelf
=
dynamic_pointer_cast
<
RtspSession
>
(
shared_from_this
());
SockUtil
::
setNoDelay
(
_pSender
->
rawFD
(),
false
);
_pRtpReader
->
setReadCB
([
weakSelf
](
const
RtpPacket
::
Ptr
&
pack
)
{
auto
strongSelf
=
weakSelf
.
lock
();
if
(
!
strongSelf
)
{
return
;
}
strongSelf
->
async
([
weakSelf
,
pack
](){
auto
strongSelf
=
weakSelf
.
lock
();
if
(
!
strongSelf
)
{
return
;
}
strongSelf
->
sendRtpPacket
(
pack
);
});
});
}
};
weak_ptr
<
RtspSession
>
weakSelf
=
dynamic_pointer_cast
<
RtspSession
>
(
shared_from_this
());
...
...
@@ -790,9 +788,16 @@ bool RtspSession::handleReq_Play() {
onRes
(
err
);
});
};
auto
flag
=
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastMediaPlayed
,
_mediaInfo
,
invoker
,
*
this
);
if
(
!
flag
){
//该事件无人监听,默认不鉴权
if
(
_bFirstPlay
){
_bFirstPlay
=
false
;
//第一次收到play命令,需要鉴权
auto
flag
=
NoticeCenter
::
Instance
().
emitEvent
(
Broadcast
::
kBroadcastMediaPlayed
,
_mediaInfo
,
invoker
,
*
this
);
if
(
!
flag
){
//该事件无人监听,默认不鉴权
onRes
(
""
);
}
}
else
{
//后面是seek或恢复命令,不需要鉴权
onRes
(
""
);
}
return
true
;
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论