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 11:40:06 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
e0a6fe63cc86fe4c8e13271f1463723e9c4da52d
e0a6fe63
1 parent
9ed34215
fix bug of reload ffmpeg, support multiple transcode, change to 0.9.57
隐藏空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
89 行增加
和
16 行删除
trunk/src/app/srs_app_config.cpp
trunk/src/app/srs_app_config.hpp
trunk/src/core/srs_core.hpp
trunk/src/app/srs_app_config.cpp
查看文件 @
e0a6fe6
...
...
@@ -612,22 +612,10 @@ int SrsConfig::reload()
}
srs_trace
(
"vhost %s reload hls success."
,
vhost
.
c_str
());
}
// TODO: FIXME: there might be many transcoders per vhost.
// transcode, only one per vhost
if
(
!
srs_directive_equals
(
new_vhost
->
get
(
"transcode"
),
old_vhost
->
get
(
"transcode"
)))
{
for
(
it
=
subscribes
.
begin
();
it
!=
subscribes
.
end
();
++
it
)
{
ISrsReloadHandler
*
subscribe
=
*
it
;
if
((
ret
=
subscribe
->
on_reload_transcode
(
vhost
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"vhost %s notify subscribes transcode failed. ret=%d"
,
vhost
.
c_str
(),
ret
);
return
ret
;
}
}
srs_trace
(
"vhost %s reload transcode success."
,
vhost
.
c_str
());
}
// transcode, many per vhost.
/*
if ((ret = reload_transcode(new_vhost, old_vhost)) != ERROR_SUCCESS) {
if
((
ret
=
reload_transcode
(
new_vhost
,
old_vhost
))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
*/
}
// ingest, many per vhost.
if
((
ret
=
reload_ingest
(
new_vhost
,
old_vhost
))
!=
ERROR_SUCCESS
)
{
return
ret
;
...
...
@@ -698,6 +686,90 @@ int SrsConfig::parse_options(int argc, char** argv)
return
parse_file
(
config_file
.
c_str
());
}
int
SrsConfig
::
reload_transcode
(
SrsConfDirective
*
new_vhost
,
SrsConfDirective
*
old_vhost
)
{
int
ret
=
ERROR_SUCCESS
;
std
::
vector
<
SrsConfDirective
*>
old_transcoders
;
for
(
int
i
=
0
;
i
<
(
int
)
old_vhost
->
directives
.
size
();
i
++
)
{
SrsConfDirective
*
conf
=
old_vhost
->
at
(
i
);
if
(
conf
->
name
==
"transcode"
)
{
old_transcoders
.
push_back
(
conf
);
}
}
std
::
vector
<
SrsConfDirective
*>
new_transcoders
;
for
(
int
i
=
0
;
i
<
(
int
)
new_vhost
->
directives
.
size
();
i
++
)
{
SrsConfDirective
*
conf
=
new_vhost
->
at
(
i
);
if
(
conf
->
name
==
"transcode"
)
{
new_transcoders
.
push_back
(
conf
);
}
}
std
::
vector
<
ISrsReloadHandler
*>::
iterator
it
;
std
::
string
vhost
=
new_vhost
->
arg0
();
// to be simple:
// whatever, once tiny changed of transcode,
// restart all ffmpeg of vhost.
bool
changed
=
false
;
// discovery the removed ffmpeg.
for
(
int
i
=
0
;
!
changed
&&
i
<
(
int
)
old_transcoders
.
size
();
i
++
)
{
SrsConfDirective
*
old_transcoder
=
old_transcoders
.
at
(
i
);
std
::
string
transcoder_id
=
old_transcoder
->
arg0
();
// if transcoder exists in new vhost, not removed, ignore.
if
(
new_vhost
->
get
(
"transcode"
,
transcoder_id
))
{
continue
;
}
changed
=
true
;
}
// discovery the added ffmpeg.
for
(
int
i
=
0
;
!
changed
&&
i
<
(
int
)
new_transcoders
.
size
();
i
++
)
{
SrsConfDirective
*
new_transcoder
=
new_transcoders
.
at
(
i
);
std
::
string
transcoder_id
=
new_transcoder
->
arg0
();
// if transcoder exists in old vhost, not added, ignore.
if
(
old_vhost
->
get
(
"transcode"
,
transcoder_id
))
{
continue
;
}
changed
=
true
;
}
// for updated transcoders, restart them.
for
(
int
i
=
0
;
!
changed
&&
i
<
(
int
)
new_transcoders
.
size
();
i
++
)
{
SrsConfDirective
*
new_transcoder
=
new_transcoders
.
at
(
i
);
std
::
string
transcoder_id
=
new_transcoder
->
arg0
();
SrsConfDirective
*
old_transcoder
=
old_vhost
->
get
(
"transcode"
,
transcoder_id
);
srs_assert
(
old_transcoder
);
if
(
srs_directive_equals
(
new_transcoder
,
old_transcoder
))
{
continue
;
}
changed
=
true
;
}
// transcode, many per vhost
if
(
changed
)
{
for
(
it
=
subscribes
.
begin
();
it
!=
subscribes
.
end
();
++
it
)
{
ISrsReloadHandler
*
subscribe
=
*
it
;
if
((
ret
=
subscribe
->
on_reload_transcode
(
vhost
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"vhost %s notify subscribes transcode failed. ret=%d"
,
vhost
.
c_str
(),
ret
);
return
ret
;
}
}
srs_trace
(
"vhost %s reload transcode success."
,
vhost
.
c_str
());
}
return
ret
;
}
int
SrsConfig
::
reload_ingest
(
SrsConfDirective
*
new_vhost
,
SrsConfDirective
*
old_vhost
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -789,7 +861,7 @@ int SrsConfig::reload_ingest(SrsConfDirective* new_vhost, SrsConfDirective* old_
srs_trace
(
"vhost %s reload ingest=%s updated success."
,
vhost
.
c_str
(),
ingest_id
.
c_str
());
}
srs_
warn
(
"invalid reload ingest
vhost=%s"
,
vhost
.
c_str
());
srs_
trace
(
"ingest not changed for
vhost=%s"
,
vhost
.
c_str
());
return
ret
;
}
...
...
trunk/src/app/srs_app_config.hpp
查看文件 @
e0a6fe6
...
...
@@ -126,6 +126,7 @@ public:
virtual
int
parse_options
(
int
argc
,
char
**
argv
);
private
:
virtual
int
reload_ingest
(
SrsConfDirective
*
new_vhost
,
SrsConfDirective
*
old_vhost
);
virtual
int
reload_transcode
(
SrsConfDirective
*
new_vhost
,
SrsConfDirective
*
old_vhost
);
virtual
int
parse_file
(
const
char
*
filename
);
virtual
int
parse_argv
(
int
&
i
,
char
**
argv
);
virtual
void
print_help
(
char
**
argv
);
...
...
trunk/src/core/srs_core.hpp
查看文件 @
e0a6fe6
...
...
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version
#define VERSION_MAJOR "0"
#define VERSION_MINOR "9"
#define VERSION_REVISION "5
6
"
#define VERSION_REVISION "5
7
"
#define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
// server info.
#define RTMP_SIG_SRS_KEY "srs"
...
...
请
注册
或
登录
后发表评论