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
2014-04-10 10:09:30 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
dc71eef394d766ff485c4158b0f6b545bb1c1190
dc71eef3
1 parent
e5646e3b
support ingest reload: add new vhost with ingester
隐藏空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
59 行增加
和
7 行删除
trunk/src/app/srs_app_config.cpp
trunk/src/app/srs_app_ingest.cpp
trunk/src/app/srs_app_ingest.hpp
trunk/src/app/srs_app_reload.cpp
trunk/src/app/srs_app_reload.hpp
trunk/src/app/srs_app_config.cpp
查看文件 @
dc71eef
...
...
@@ -493,8 +493,36 @@ int SrsConfig::reload()
srs_trace
(
"reload pithy_print success."
);
}
// merge config: vhost added, directly supported.
// merge config: vhost added
for
(
int
i
=
0
;
i
<
(
int
)
root
->
directives
.
size
();
i
++
)
{
// ingest need to start if specified.
// other features, directly supported.
SrsConfDirective
*
new_vhost
=
root
->
at
(
i
);
// only process vhost directives.
if
(
new_vhost
->
name
!=
"vhost"
)
{
continue
;
}
std
::
string
vhost
=
new_vhost
->
arg0
();
// not new added vhost, ignore.
if
(
old_root
->
get
(
"vhost"
,
vhost
))
{
continue
;
}
srs_trace
(
"vhost %s added, reload it."
,
vhost
.
c_str
());
for
(
it
=
subscribes
.
begin
();
it
!=
subscribes
.
end
();
++
it
)
{
ISrsReloadHandler
*
subscribe
=
*
it
;
if
((
ret
=
subscribe
->
on_reload_vhost_added
(
vhost
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"notify subscribes pithy_print remove "
"vhost %s failed. ret=%d"
,
vhost
.
c_str
(),
ret
);
return
ret
;
}
}
srs_trace
(
"reload new vhost %s success."
,
vhost
.
c_str
());
}
// merge config: vhost removed/disabled/modified.
for
(
int
i
=
0
;
i
<
(
int
)
old_root
->
directives
.
size
();
i
++
)
{
SrsConfDirective
*
old_vhost
=
old_root
->
at
(
i
);
...
...
trunk/src/app/srs_app_ingest.cpp
查看文件 @
dc71eef
...
...
@@ -51,13 +51,16 @@ SrsIngesterFFMPEG::~SrsIngesterFFMPEG()
SrsIngester
::
SrsIngester
()
{
// TODO: FIXME: support reload.
_srs_config
->
subscribe
(
this
);
pthread
=
new
SrsThread
(
this
,
SRS_INGESTER_SLEEP_US
);
pithy_print
=
new
SrsPithyPrint
(
SRS_STAGE_INGESTER
);
}
SrsIngester
::~
SrsIngester
()
{
_srs_config
->
unsubscribe
(
this
);
srs_freep
(
pthread
);
clear_engines
();
}
...
...
@@ -72,10 +75,8 @@ int SrsIngester::start()
return
ret
;
}
// return for error or no engine.
if
(
ingesters
.
empty
())
{
return
ret
;
}
// even no ingesters, we must also start it,
// for the reload may add more ingesters.
// start thread to run all encoding engines.
if
((
ret
=
pthread
->
start
())
!=
ERROR_SUCCESS
)
{
...
...
@@ -353,4 +354,16 @@ void SrsIngester::ingester()
}
}
int
SrsIngester
::
on_reload_vhost_added
(
string
vhost
)
{
int
ret
=
ERROR_SUCCESS
;
SrsConfDirective
*
_vhost
=
_srs_config
->
get_vhost
(
vhost
);
if
((
ret
=
parse_ingesters
(
_vhost
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
return
ret
;
}
#endif
...
...
trunk/src/app/srs_app_ingest.hpp
查看文件 @
dc71eef
...
...
@@ -34,6 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <vector>
#include <srs_app_thread.hpp>
#include <srs_app_reload.hpp>
class
SrsFFMPEG
;
class
SrsConfDirective
;
...
...
@@ -57,7 +58,7 @@ struct SrsIngesterFFMPEG
* encode with FFMPEG(optional),
* push to SRS(or any RTMP server) over RTMP.
*/
class
SrsIngester
:
public
ISrsThreadHandler
class
SrsIngester
:
public
ISrsThreadHandler
,
public
ISrsReloadHandler
{
private
:
std
::
string
input_stream_name
;
...
...
@@ -82,6 +83,9 @@ private:
virtual
int
parse_engines
(
SrsConfDirective
*
vhost
,
SrsConfDirective
*
ingest
);
virtual
int
initialize_ffmpeg
(
SrsFFMPEG
*
ffmpeg
,
SrsConfDirective
*
vhost
,
SrsConfDirective
*
ingest
,
SrsConfDirective
*
engine
);
virtual
void
ingester
();
// interface ISrsReloadHandler.
public:
virtual
int
on_reload_vhost_added
(
std
::
string
vhost
);
};
#endif
...
...
trunk/src/app/srs_app_reload.cpp
查看文件 @
dc71eef
...
...
@@ -45,6 +45,11 @@ int ISrsReloadHandler::on_reload_pithy_print()
return
ERROR_SUCCESS
;
}
int
ISrsReloadHandler
::
on_reload_vhost_added
(
string
/*vhost*/
)
{
return
ERROR_SUCCESS
;
}
int
ISrsReloadHandler
::
on_reload_vhost_removed
(
string
/*vhost*/
)
{
return
ERROR_SUCCESS
;
...
...
trunk/src/app/srs_app_reload.hpp
查看文件 @
dc71eef
...
...
@@ -33,6 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/**
* the handler for config reload.
* when reload callback, the config is updated yet.
*/
class
ISrsReloadHandler
{
...
...
@@ -42,6 +43,7 @@ public:
public
:
virtual
int
on_reload_listen
();
virtual
int
on_reload_pithy_print
();
virtual
int
on_reload_vhost_added
(
std
::
string
vhost
);
virtual
int
on_reload_vhost_removed
(
std
::
string
vhost
);
virtual
int
on_reload_gop_cache
(
std
::
string
vhost
);
virtual
int
on_reload_queue_length
(
std
::
string
vhost
);
...
...
请
注册
或
登录
后发表评论