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-09-14 12:24:57 +0800
Browse Files
Options
Browse Files
Download
Plain Diff
Commit
3b483094bd63a8b6366792fc309184567d114d2d
3b483094
2 parents
adb74dc7
6d50aa1a
merge from 2.0
显示空白字符变更
内嵌
并排对比
正在显示
4 个修改的文件
包含
164 行增加
和
77 行删除
README.md
trunk/src/app/srs_app_dvr.cpp
trunk/src/app/srs_app_hls.cpp
trunk/src/app/srs_app_rtmp_conn.cpp
README.md
查看文件 @
3b48309
...
...
@@ -1045,6 +1045,7 @@ Winlin
[
bug #367
]:
https://github.com/simple-rtmp-server/srs/issues/367
[
bug #471
]:
https://github.com/simple-rtmp-server/srs/issues/471
[
bug #380
]:
https://github.com/simple-rtmp-server/srs/issues/380
[
bug #475
]:
https://github.com/simple-rtmp-server/srs/issues/475
[
bug #454
]:
https://github.com/simple-rtmp-server/srs/issues/454
[
bug #442
]:
https://github.com/simple-rtmp-server/srs/issues/442
[
bug #169
]:
https://github.com/simple-rtmp-server/srs/issues/169
...
...
trunk/src/app/srs_app_dvr.cpp
查看文件 @
3b48309
...
...
@@ -512,24 +512,33 @@ int SrsDvrAsyncCallOnDvr::call()
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
// http callback for on_dvr in config.
if
(
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// HTTP: on_dvr
SrsConfDirective
*
on_dvr
=
_srs_config
->
get_vhost_on_dvr
(
req
->
vhost
);
if
(
!
on_dvr
)
{
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
ret
;
}
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_dvr
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_dvr"
);
return
ret
;
}
std
::
string
file
=
path
;
for
(
int
i
=
0
;
i
<
(
int
)
on_dvr
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_dvr
->
args
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_dvr
(
url
,
req
,
file
))
!=
ERROR_SUCCESS
)
{
hooks
=
conf
->
args
;
}
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_dvr
(
url
,
req
,
path
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_dvr failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
}
#endif
return
ret
;
...
...
trunk/src/app/srs_app_hls.cpp
查看文件 @
3b48309
...
...
@@ -198,25 +198,33 @@ int SrsDvrAsyncCallOnHls::call()
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
// http callback for on_hls in config.
if
(
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// HTTP: on_hls
SrsConfDirective
*
on_hls
=
_srs_config
->
get_vhost_on_hls
(
req
->
vhost
);
if
(
!
on_hls
)
{
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
ret
;
}
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_hls
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_hls"
);
return
ret
;
}
std
::
string
file
=
path
;
int
sn
=
seq_no
;
for
(
int
i
=
0
;
i
<
(
int
)
on_hls
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_hls
->
args
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_hls
(
url
,
req
,
file
,
ts_url
,
m3u8
,
m3u8_url
,
sn
,
duration
))
!=
ERROR_SUCCESS
)
{
hooks
=
conf
->
args
;
}
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_hls
(
url
,
req
,
path
,
ts_url
,
m3u8
,
m3u8_url
,
seq_no
,
duration
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_hls failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
}
#endif
return
ret
;
...
...
@@ -243,25 +251,31 @@ int SrsDvrAsyncCallOnHlsNotify::call()
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
// http callback for on_hls_notify in config.
if
(
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
// HTTP: on_hls
SrsConfDirective
*
on_hls
=
_srs_config
->
get_vhost_on_hls_notify
(
req
->
vhost
);
if
(
!
on_hls
)
{
srs_info
(
"ignore the empty http callback: on_hls_notify"
);
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
ret
;
}
std
::
string
url
;
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
static
u_int32_t
nb_call
=
0
;
int
index
=
nb_call
++
%
on_hls
->
args
.
size
();
url
=
on_hls
->
args
.
at
(
index
);
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_hls_notify
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_hls_notify"
);
return
ret
;
}
hooks
=
conf
->
args
;
}
int
nb_notify
=
_srs_config
->
get_vhost_hls_nb_notify
(
req
->
vhost
);
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_hls_notify
(
url
,
req
,
ts_url
,
nb_notify
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_hls_notify failed. url=%s,
ts=%s, ret=%d"
,
url
.
c_str
(),
ts_
url
.
c_str
(),
ret
);
srs_error
(
"hook client on_hls_notify failed. url=%s,
ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
...
...
trunk/src/app/srs_app_rtmp_conn.cpp
查看文件 @
3b48309
...
...
@@ -1304,22 +1304,33 @@ int SrsRtmpConn::http_hooks_on_connect()
int
ret
=
ERROR_SUCCESS
;
#ifdef SRS_AUTO_HTTP_CALLBACK
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
)
{
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
ret
;
}
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_connect
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_connect"
);
return
ret
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_connect
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_connect
->
args
.
at
(
i
);
hooks
=
conf
->
args
;
}
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_connect
(
url
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_connect failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
}
#endif
return
ret
;
...
...
@@ -1328,19 +1339,29 @@ int SrsRtmpConn::http_hooks_on_connect()
void
SrsRtmpConn
::
http_hooks_on_close
()
{
#ifdef SRS_AUTO_HTTP_CALLBACK
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
)
{
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
;
}
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_close
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_close"
);
return
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_close
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_close
->
args
.
at
(
i
);
SrsHttpHooks
::
on_close
(
url
,
req
,
kbps
->
get_send_bytes
(),
kbps
->
get_recv_bytes
());
hooks
=
conf
->
args
;
}
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
SrsHttpHooks
::
on_close
(
url
,
req
,
kbps
->
get_send_bytes
(),
kbps
->
get_recv_bytes
());
}
#endif
}
...
...
@@ -1350,22 +1371,33 @@ int SrsRtmpConn::http_hooks_on_publish()
int
ret
=
ERROR_SUCCESS
;
#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
)
{
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
ret
;
}
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_publish
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_publish"
);
return
ret
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_publish
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_publish
->
args
.
at
(
i
);
hooks
=
conf
->
args
;
}
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_publish
(
url
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_publish failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
}
#endif
return
ret
;
...
...
@@ -1374,19 +1406,29 @@ int SrsRtmpConn::http_hooks_on_publish()
void
SrsRtmpConn
::
http_hooks_on_unpublish
()
{
#ifdef SRS_AUTO_HTTP_CALLBACK
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
)
{
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
;
}
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_unpublish
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_unpublish"
);
return
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_unpublish
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_unpublish
->
args
.
at
(
i
);
SrsHttpHooks
::
on_unpublish
(
url
,
req
);
hooks
=
conf
->
args
;
}
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
SrsHttpHooks
::
on_unpublish
(
url
,
req
);
}
#endif
}
...
...
@@ -1396,22 +1438,33 @@ int SrsRtmpConn::http_hooks_on_play()
int
ret
=
ERROR_SUCCESS
;
#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
)
{
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
ret
;
}
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_play
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_play"
);
return
ret
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_play
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_play
->
args
.
at
(
i
);
hooks
=
conf
->
args
;
}
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
if
((
ret
=
SrsHttpHooks
::
on_play
(
url
,
req
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_play failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
}
}
#endif
return
ret
;
...
...
@@ -1420,19 +1473,29 @@ int SrsRtmpConn::http_hooks_on_play()
void
SrsRtmpConn
::
http_hooks_on_stop
()
{
#ifdef SRS_AUTO_HTTP_CALLBACK
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
)
{
if
(
!
_srs_config
->
get_vhost_http_hooks_enabled
(
req
->
vhost
))
{
return
;
}
// the http hooks will cause context switch,
// so we must copy all hooks for the on_connect may freed.
// @see https://github.com/simple-rtmp-server/srs/issues/475
vector
<
string
>
hooks
;
if
(
true
)
{
SrsConfDirective
*
conf
=
_srs_config
->
get_vhost_on_stop
(
req
->
vhost
);
if
(
!
conf
)
{
srs_info
(
"ignore the empty http callback: on_stop"
);
return
;
}
for
(
int
i
=
0
;
i
<
(
int
)
on_stop
->
args
.
size
();
i
++
)
{
std
::
string
url
=
on_stop
->
args
.
at
(
i
);
SrsHttpHooks
::
on_stop
(
url
,
req
);
hooks
=
conf
->
args
;
}
for
(
int
i
=
0
;
i
<
(
int
)
hooks
.
size
();
i
++
)
{
std
::
string
url
=
hooks
.
at
(
i
);
SrsHttpHooks
::
on_stop
(
url
,
req
);
}
#endif
...
...
请
注册
或
登录
后发表评论