Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2015-06-09 14:38:05 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
1f1776a0d8aa4f4d03ea6ca631a1dcf390ababf8
1f1776a0
1 parent
969ed7b0
fix the export project bug. wakeup connection when dispose server.
隐藏空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
65 行增加
和
17 行删除
trunk/auto/generate-srs-librtmp-single.sh
trunk/src/app/srs_app_rtmp_conn.cpp
trunk/src/app/srs_app_rtmp_conn.hpp
trunk/src/app/srs_app_source.cpp
trunk/src/app/srs_app_source.hpp
trunk/auto/generate-srs-librtmp-single.sh
查看文件 @
1f1776a
...
...
@@ -80,7 +80,7 @@ function build_module_hpp()
}
SRS_LIBRTMP_OBJS
=
"
${
CORE_OBJS
[@]
}
"
&&
build_module_hpp
SRS_LIBRTMP_OBJS
=
"
${
KERNEL_OBJS
[@]
}
"
&&
build_module_hpp
SRS_LIBRTMP_OBJS
=
"
${
RTMP
_OBJS
[@]
}
"
&&
build_module_hpp
SRS_LIBRTMP_OBJS
=
"
${
PROTOCOL
_OBJS
[@]
}
"
&&
build_module_hpp
SRS_LIBRTMP_OBJS
=
"
${
LIBS_OBJS
[@]
}
"
&&
build_module_hpp
# module to cpp files.
function
build_module_cpp
()
...
...
@@ -99,7 +99,7 @@ function build_module_cpp()
}
SRS_LIBRTMP_OBJS
=
"
${
CORE_OBJS
[@]
}
"
&&
build_module_cpp
SRS_LIBRTMP_OBJS
=
"
${
KERNEL_OBJS
[@]
}
"
&&
build_module_cpp
SRS_LIBRTMP_OBJS
=
"
${
RTMP
_OBJS
[@]
}
"
&&
build_module_cpp
SRS_LIBRTMP_OBJS
=
"
${
PROTOCOL
_OBJS
[@]
}
"
&&
build_module_cpp
SRS_LIBRTMP_OBJS
=
"
${
LIBS_OBJS
[@]
}
"
&&
build_module_cpp
# create example.cpp
...
...
trunk/src/app/srs_app_rtmp_conn.cpp
查看文件 @
1f1776a
...
...
@@ -88,6 +88,7 @@ SrsRtmpConn::SrsRtmpConn(SrsServer* svr, st_netfd_t c)
duration
=
0
;
kbps
=
new
SrsKbps
();
kbps
->
set_io
(
skt
,
skt
);
wakable
=
NULL
;
mw_sleep
=
SRS_PERF_MW_SLEEP
;
mw_enabled
=
false
;
...
...
@@ -110,6 +111,16 @@ SrsRtmpConn::~SrsRtmpConn()
srs_freep
(
kbps
);
}
void
SrsRtmpConn
::
dispose
()
{
SrsConnection
::
dispose
();
// wakeup the handler which need to notice.
if
(
wakable
)
{
wakable
->
wakeup
();
}
}
// TODO: return detail message when error for client.
int
SrsRtmpConn
::
do_cycle
()
{
...
...
@@ -597,7 +608,9 @@ int SrsRtmpConn::playing(SrsSource* source)
}
// delivery messages for clients playing stream.
wakable
=
consumer
;
ret
=
do_playing
(
source
,
consumer
,
&
trd
);
wakable
=
NULL
;
// stop isolate recv thread
trd
.
stop
();
...
...
trunk/src/app/srs_app_rtmp_conn.hpp
查看文件 @
1f1776a
...
...
@@ -53,6 +53,7 @@ class SrsSharedPtrMessage;
class
SrsQueueRecvThread
;
class
SrsPublishRecvThread
;
class
SrsSecurity
;
class
ISrsWakable
;
/**
* the client provides the main logic control for RTMP clients.
...
...
@@ -70,6 +71,8 @@ private:
SrsRefer
*
refer
;
SrsBandwidth
*
bandwidth
;
SrsSecurity
*
security
;
// the wakable handler, maybe NULL.
ISrsWakable
*
wakable
;
// elapse duration in ms
// for live play duration, for instance, rtmpdump to record.
// @see https://github.com/simple-rtmp-server/srs/issues/47
...
...
@@ -85,6 +88,8 @@ private:
public
:
SrsRtmpConn
(
SrsServer
*
svr
,
st_netfd_t
c
);
virtual
~
SrsRtmpConn
();
public
:
virtual
void
dispose
();
protected
:
virtual
int
do_cycle
();
// interface ISrsReloadHandler
...
...
trunk/src/app/srs_app_source.cpp
查看文件 @
1f1776a
...
...
@@ -423,6 +423,14 @@ void SrsMessageQueue::clear()
av_start_time
=
av_end_time
=
-
1
;
}
ISrsWakable
::
ISrsWakable
()
{
}
ISrsWakable
::~
ISrsWakable
()
{
}
SrsConsumer
::
SrsConsumer
(
SrsSource
*
_source
)
{
source
=
_source
;
...
...
@@ -551,14 +559,6 @@ void SrsConsumer::wait(int nb_msgs, int duration)
// use cond block wait for high performance mode.
st_cond_wait
(
mw_wait
);
}
void
SrsConsumer
::
wakeup
()
{
if
(
mw_waiting
)
{
st_cond_signal
(
mw_wait
);
mw_waiting
=
false
;
}
}
#endif
int
SrsConsumer
::
on_play_client_pause
(
bool
is_pause
)
...
...
@@ -571,6 +571,16 @@ int SrsConsumer::on_play_client_pause(bool is_pause)
return
ret
;
}
void
SrsConsumer
::
wakeup
()
{
#ifdef SRS_PERF_QUEUE_COND_WAIT
if
(
mw_waiting
)
{
st_cond_signal
(
mw_wait
);
mw_waiting
=
false
;
}
#endif
}
SrsGopCache
::
SrsGopCache
()
{
cached_video_count
=
0
;
...
...
trunk/src/app/srs_app_source.hpp
查看文件 @
1f1776a
...
...
@@ -197,9 +197,27 @@ private:
};
/**
* the wakable used for some object
* which is waiting on cond.
*/
class
ISrsWakable
{
public
:
ISrsWakable
();
virtual
~
ISrsWakable
();
public
:
/**
* when the consumer(for player) got msg from recv thread,
* it must be processed for maybe it's a close msg, so the cond
* wait must be wakeup.
*/
virtual
void
wakeup
()
=
0
;
};
/**
* the consumer for SrsSource, that is a play client.
*/
class
SrsConsumer
class
SrsConsumer
:
public
ISrsWakable
{
private
:
SrsRtmpJitter
*
jitter
;
...
...
@@ -257,17 +275,19 @@ public:
* @param duration the messgae duration to wait.
*/
virtual
void
wait
(
int
nb_msgs
,
int
duration
);
/**
* when the consumer(for player) got msg from recv thread,
* it must be processed for maybe it's a close msg, so the cond
* wait must be wakeup.
*/
virtual
void
wakeup
();
#endif
/**
* when client send the pause message.
*/
virtual
int
on_play_client_pause
(
bool
is_pause
);
// ISrsWakable
public:
/**
* when the consumer(for player) got msg from recv thread,
* it must be processed for maybe it's a close msg, so the cond
* wait must be wakeup.
*/
virtual
void
wakeup
();
};
/**
...
...
请
注册
或
登录
后发表评论