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-07-22 11:01:20 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
2c9e16a9e7f652e089b36abcbda71979e3e95570
2c9e16a9
1 parent
d612597a
add utest for config vhosts, transcode/dvr/hls
隐藏空白字符变更
内嵌
并排对比
正在显示
6 个修改的文件
包含
149 行增加
和
166 行删除
trunk/conf/full.conf
trunk/src/app/srs_app_config.cpp
trunk/src/app/srs_app_config.hpp
trunk/src/app/srs_app_dvr.cpp
trunk/src/app/srs_app_rtmp_conn.cpp
trunk/src/utest/srs_utest_config.cpp
trunk/conf/full.conf
查看文件 @
2c9e16a
...
...
@@ -787,7 +787,7 @@ vhost all.transcode.srs.com {
output
rtmp
://
127
.
0
.
0
.
1
:[
port
]/[
app
]?
vhost
=[
vhost
]/[
stream
]
_
[
engine
];
}
engine
vcopy
{
enabled
on
;
enabled
on
;
vcodec
copy
;
acodec
libaacplus
;
abitrate
45
;
...
...
@@ -813,7 +813,7 @@ vhost all.transcode.srs.com {
output
rtmp
://
127
.
0
.
0
.
1
:[
port
]/[
app
]?
vhost
=[
vhost
]/[
stream
]
_
[
engine
];
}
engine
copy
{
enabled
on
;
enabled
on
;
vcodec
copy
;
acodec
copy
;
output
rtmp
://
127
.
0
.
0
.
1
:[
port
]/[
app
]?
vhost
=[
vhost
]/[
stream
]
_
[
engine
];
...
...
trunk/src/app/srs_app_config.cpp
查看文件 @
2c9e16a
...
...
@@ -1630,7 +1630,7 @@ SrsConfDirective* SrsConfig::get_forward(string vhost)
return
conf
->
get
(
"forward"
);
}
SrsConfDirective
*
SrsConfig
::
get_vhost_
on_connect
(
string
vhost
)
SrsConfDirective
*
SrsConfig
::
get_vhost_
http_hooks
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost
(
vhost
);
...
...
@@ -1638,34 +1638,41 @@ SrsConfDirective* SrsConfig::get_vhost_on_connect(string vhost)
return
NULL
;
}
conf
=
conf
->
get
(
"http_hooks"
);
if
(
!
conf
)
{
return
NULL
;
return
conf
->
get
(
"http_hooks"
);
}
bool
SrsConfig
::
get_vhost_http_hooks_enabled
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost_http_hooks
(
vhost
);
if
(
!
conf
)
{
return
false
;
}
SrsConfDirective
*
enabled
=
conf
->
get
(
"enabled"
);
if
(
!
enabled
||
enabled
->
arg0
()
!=
"on"
)
{
return
NULL
;
return
false
;
}
return
conf
->
get
(
"on_connect"
)
;
return
true
;
}
SrsConfDirective
*
SrsConfig
::
get_vhost_on_c
lose
(
string
vhost
)
SrsConfDirective
*
SrsConfig
::
get_vhost_on_c
onnect
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost
(
vhost
);
SrsConfDirective
*
conf
=
get_vhost
_http_hooks
(
vhost
);
if
(
!
conf
)
{
return
NULL
;
}
conf
=
conf
->
get
(
"http_hooks"
);
if
(
!
conf
)
{
return
NULL
;
}
SrsConfDirective
*
enabled
=
conf
->
get
(
"enabled"
);
if
(
!
enabled
||
enabled
->
arg0
()
!=
"on"
)
{
return
conf
->
get
(
"on_connect"
);
}
SrsConfDirective
*
SrsConfig
::
get_vhost_on_close
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost_http_hooks
(
vhost
);
if
(
!
conf
)
{
return
NULL
;
}
...
...
@@ -1674,106 +1681,56 @@ SrsConfDirective* SrsConfig::get_vhost_on_close(string vhost)
SrsConfDirective
*
SrsConfig
::
get_vhost_on_publish
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost
(
vhost
);
SrsConfDirective
*
conf
=
get_vhost
_http_hooks
(
vhost
);
if
(
!
conf
)
{
return
NULL
;
}
conf
=
conf
->
get
(
"http_hooks"
);
if
(
!
conf
)
{
return
NULL
;
}
SrsConfDirective
*
enabled
=
conf
->
get
(
"enabled"
);
if
(
!
enabled
||
enabled
->
arg0
()
!=
"on"
)
{
return
NULL
;
}
return
conf
->
get
(
"on_publish"
);
}
SrsConfDirective
*
SrsConfig
::
get_vhost_on_unpublish
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost
(
vhost
);
SrsConfDirective
*
conf
=
get_vhost
_http_hooks
(
vhost
);
if
(
!
conf
)
{
return
NULL
;
}
conf
=
conf
->
get
(
"http_hooks"
);
if
(
!
conf
)
{
return
NULL
;
}
SrsConfDirective
*
enabled
=
conf
->
get
(
"enabled"
);
if
(
!
enabled
||
enabled
->
arg0
()
!=
"on"
)
{
return
NULL
;
}
return
conf
->
get
(
"on_unpublish"
);
}
SrsConfDirective
*
SrsConfig
::
get_vhost_on_play
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost
(
vhost
);
SrsConfDirective
*
conf
=
get_vhost
_http_hooks
(
vhost
);
if
(
!
conf
)
{
return
NULL
;
}
conf
=
conf
->
get
(
"http_hooks"
);
if
(
!
conf
)
{
return
NULL
;
}
SrsConfDirective
*
enabled
=
conf
->
get
(
"enabled"
);
if
(
!
enabled
||
enabled
->
arg0
()
!=
"on"
)
{
return
NULL
;
}
return
conf
->
get
(
"on_play"
);
}
SrsConfDirective
*
SrsConfig
::
get_vhost_on_stop
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost
(
vhost
);
SrsConfDirective
*
conf
=
get_vhost
_http_hooks
(
vhost
);
if
(
!
conf
)
{
return
NULL
;
}
conf
=
conf
->
get
(
"http_hooks"
);
if
(
!
conf
)
{
return
NULL
;
}
SrsConfDirective
*
enabled
=
conf
->
get
(
"enabled"
);
if
(
!
enabled
||
enabled
->
arg0
()
!=
"on"
)
{
return
NULL
;
}
return
conf
->
get
(
"on_stop"
);
}
SrsConfDirective
*
SrsConfig
::
get_vhost_on_dvr_hss_reap_flv
(
string
vhost
)
{
SrsConfDirective
*
conf
=
get_vhost
(
vhost
);
SrsConfDirective
*
conf
=
get_vhost
_http_hooks
(
vhost
);
if
(
!
conf
)
{
return
NULL
;
}
conf
=
conf
->
get
(
"http_hooks"
);
if
(
!
conf
)
{
return
NULL
;
}
SrsConfDirective
*
enabled
=
conf
->
get
(
"enabled"
);
if
(
!
enabled
||
enabled
->
arg0
()
!=
"on"
)
{
return
NULL
;
}
return
conf
->
get
(
"on_dvr_hss_reap_flv"
);
}
...
...
trunk/src/app/srs_app_config.hpp
查看文件 @
2c9e16a
...
...
@@ -515,8 +515,18 @@ public:
*/
virtual
SrsConfDirective
*
get_forward
(
std
::
string
vhost
);
// http_hooks section
private:
/**
* get the http_hooks directive of vhost.
*/
virtual
SrsConfDirective
*
get_vhost_http_hooks
(
std
::
string
vhost
);
public
:
/**
* whether vhost http-hooks enabled.
* @remark, if not enabled, donot callback all http hooks.
*/
virtual
bool
get_vhost_http_hooks_enabled
(
std
::
string
vhost
);
/**
* get the on_connect callbacks of vhost.
* @return the on_connect callback directive, the args is the url to callback.
*/
...
...
trunk/src/app/srs_app_dvr.cpp
查看文件 @
2c9e16a
...
...
@@ -371,16 +371,18 @@ int SrsDvrPlan::on_dvr_hss_reap_flv()
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
// HTTP: on_dvr_hss_reap_flv
SrsConfDirective
*
on_dvr_hss_reap_flv
=
_srs_config
->
get_vhost_on_dvr_hss_reap_flv
(
_req
->
vhost
);
if
(
!
on_dvr_hss_reap_flv
)
{
srs_info
(
"ignore the empty http callback: on_dvr_hss_reap_flv"
);
return
ret
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_dvr_hss_reap_flv
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_dvr_hss_reap_flv
->
args
.
at
(
i
);
SrsHttpHooks
::
on_dvr_hss_reap_flv
(
url
,
_req
,
segment
);
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
_req
->
vhost
))
{
// HTTP: on_dvr_hss_reap_flv
SrsConfDirective
*
on_dvr_hss_reap_flv
=
_srs_config
->
get_vhost_on_dvr_hss_reap_flv
(
_req
->
vhost
);
if
(
!
on_dvr_hss_reap_flv
)
{
srs_info
(
"ignore the empty http callback: on_dvr_hss_reap_flv"
);
return
ret
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_dvr_hss_reap_flv
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_dvr_hss_reap_flv
->
args
.
at
(
i
);
SrsHttpHooks
::
on_dvr_hss_reap_flv
(
url
,
_req
,
segment
);
}
}
#endif
...
...
@@ -641,16 +643,18 @@ int SrsDvrHssPlan::on_dvr_hss_reap_flv_header(string path)
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
// HTTP: on_dvr_hss_reap_flv_header
SrsConfDirective
*
on_dvr_hss_reap_flv
=
_srs_config
->
get_vhost_on_dvr_hss_reap_flv
(
_req
->
vhost
);
if
(
!
on_dvr_hss_reap_flv
)
{
srs_info
(
"ignore the empty http callback: on_dvr_hss_reap_flv"
);
return
ret
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_dvr_hss_reap_flv
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_dvr_hss_reap_flv
->
args
.
at
(
i
);
SrsHttpHooks
::
on_dvr_hss_reap_flv_header
(
url
,
_req
,
path
);
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
_req
->
vhost
))
{
// HTTP: on_dvr_hss_reap_flv_header
SrsConfDirective
*
on_dvr_hss_reap_flv
=
_srs_config
->
get_vhost_on_dvr_hss_reap_flv
(
_req
->
vhost
);
if
(
!
on_dvr_hss_reap_flv
)
{
srs_info
(
"ignore the empty http callback: on_dvr_hss_reap_flv"
);
return
ret
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_dvr_hss_reap_flv
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_dvr_hss_reap_flv
->
args
.
at
(
i
);
SrsHttpHooks
::
on_dvr_hss_reap_flv_header
(
url
,
_req
,
path
);
}
}
#endif
...
...
trunk/src/app/srs_app_rtmp_conn.cpp
查看文件 @
2c9e16a
...
...
@@ -984,20 +984,22 @@ int SrsRtmpConn::http_hooks_on_connect()
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
// HTTP: on_connect
SrsConfDirective
*
on_connect
=
_srs_config
->
get_vhost_on_connect
(
req
->
vhost
);
if
(
!
on_connect
)
{
srs_info
(
"ignore the empty http callback: on_connect"
);
return
ret
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_connect
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_connect
->
args
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_connect
(
url
,
connection_id
,
ip
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_connect failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// HTTP: on_connect
SrsConfDirective
*
on_connect
=
_srs_config
->
get_vhost_on_connect
(
req
->
vhost
);
if
(
!
on_connect
)
{
srs_info
(
"ignore the empty http callback: on_connect"
);
return
ret
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_connect
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_connect
->
args
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_connect
(
url
,
connection_id
,
ip
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_connect failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
}
#endif
...
...
@@ -1007,18 +1009,20 @@ int SrsRtmpConn::http_hooks_on_connect()
void
SrsRtmpConn
::
http_hooks_on_close
()
{
#ifdef SRS_AUTO_HTTP_CALLBACK
// whatever the ret code, notify the api hooks.
// HTTP: on_close
SrsConfDirective
*
on_close
=
_srs_config
->
get_vhost_on_close
(
req
->
vhost
);
if
(
!
on_close
)
{
srs_info
(
"ignore the empty http callback: on_close"
);
return
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_close
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_close
->
args
.
at
(
i
);
SrsHttpHooks
::
on_close
(
url
,
connection_id
,
ip
,
req
);
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// whatever the ret code, notify the api hooks.
// HTTP: on_close
SrsConfDirective
*
on_close
=
_srs_config
->
get_vhost_on_close
(
req
->
vhost
);
if
(
!
on_close
)
{
srs_info
(
"ignore the empty http callback: on_close"
);
return
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_close
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_close
->
args
.
at
(
i
);
SrsHttpHooks
::
on_close
(
url
,
connection_id
,
ip
,
req
);
}
}
#endif
}
...
...
@@ -1027,21 +1031,23 @@ int SrsRtmpConn::http_hooks_on_publish()
{
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
// HTTP: on_publish
SrsConfDirective
*
on_publish
=
_srs_config
->
get_vhost_on_publish
(
req
->
vhost
);
if
(
!
on_publish
)
{
srs_info
(
"ignore the empty http callback: on_publish"
);
return
ret
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_publish
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_publish
->
args
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_publish
(
url
,
connection_id
,
ip
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_publish failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
#ifdef SRS_AUTO_HTTP_CALLBACK
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// HTTP: on_publish
SrsConfDirective
*
on_publish
=
_srs_config
->
get_vhost_on_publish
(
req
->
vhost
);
if
(
!
on_publish
)
{
srs_info
(
"ignore the empty http callback: on_publish"
);
return
ret
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_publish
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_publish
->
args
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_publish
(
url
,
connection_id
,
ip
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_publish failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
}
#endif
...
...
@@ -1051,18 +1057,20 @@ int SrsRtmpConn::http_hooks_on_publish()
void
SrsRtmpConn
::
http_hooks_on_unpublish
()
{
#ifdef SRS_AUTO_HTTP_CALLBACK
// whatever the ret code, notify the api hooks.
// HTTP: on_unpublish
SrsConfDirective
*
on_unpublish
=
_srs_config
->
get_vhost_on_unpublish
(
req
->
vhost
);
if
(
!
on_unpublish
)
{
srs_info
(
"ignore the empty http callback: on_unpublish"
);
return
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_unpublish
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_unpublish
->
args
.
at
(
i
);
SrsHttpHooks
::
on_unpublish
(
url
,
connection_id
,
ip
,
req
);
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// whatever the ret code, notify the api hooks.
// HTTP: on_unpublish
SrsConfDirective
*
on_unpublish
=
_srs_config
->
get_vhost_on_unpublish
(
req
->
vhost
);
if
(
!
on_unpublish
)
{
srs_info
(
"ignore the empty http callback: on_unpublish"
);
return
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_unpublish
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_unpublish
->
args
.
at
(
i
);
SrsHttpHooks
::
on_unpublish
(
url
,
connection_id
,
ip
,
req
);
}
}
#endif
}
...
...
@@ -1071,21 +1079,23 @@ int SrsRtmpConn::http_hooks_on_play()
{
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
// HTTP: on_play
SrsConfDirective
*
on_play
=
_srs_config
->
get_vhost_on_play
(
req
->
vhost
);
if
(
!
on_play
)
{
srs_info
(
"ignore the empty http callback: on_play"
);
return
ret
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_play
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_play
->
args
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_play
(
url
,
connection_id
,
ip
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_play failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
#ifdef SRS_AUTO_HTTP_CALLBACK
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// HTTP: on_play
SrsConfDirective
*
on_play
=
_srs_config
->
get_vhost_on_play
(
req
->
vhost
);
if
(
!
on_play
)
{
srs_info
(
"ignore the empty http callback: on_play"
);
return
ret
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_play
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_play
->
args
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_play
(
url
,
connection_id
,
ip
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_play failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
}
#endif
...
...
@@ -1095,18 +1105,20 @@ int SrsRtmpConn::http_hooks_on_play()
void
SrsRtmpConn
::
http_hooks_on_stop
()
{
#ifdef SRS_AUTO_HTTP_CALLBACK
// whatever the ret code, notify the api hooks.
// HTTP: on_stop
SrsConfDirective
*
on_stop
=
_srs_config
->
get_vhost_on_stop
(
req
->
vhost
);
if
(
!
on_stop
)
{
srs_info
(
"ignore the empty http callback: on_stop"
);
return
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_stop
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_stop
->
args
.
at
(
i
);
SrsHttpHooks
::
on_stop
(
url
,
connection_id
,
ip
,
req
);
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// whatever the ret code, notify the api hooks.
// HTTP: on_stop
SrsConfDirective
*
on_stop
=
_srs_config
->
get_vhost_on_stop
(
req
->
vhost
);
if
(
!
on_stop
)
{
srs_info
(
"ignore the empty http callback: on_stop"
);
return
;
}
int
connection_id
=
_srs_context
->
get_id
();
for
(
int
i
=
0
;
i
<
(
int
)
on_stop
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_stop
->
args
.
at
(
i
);
SrsHttpHooks
::
on_stop
(
url
,
connection_id
,
ip
,
req
);
}
}
#endif
...
...
trunk/src/utest/srs_utest_config.cpp
查看文件 @
2c9e16a
此 diff 太大无法显示。
请
注册
或
登录
后发表评论