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-04-23 12:05:24 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
0acb942c3a17b0490cdaf5ce13fc2540135cfbba
0acb942c
1 parent
7b157b06
update on_hls, add ts_url, m3u8 and m3u8_url.
显示空白字符变更
内嵌
并排对比
正在显示
5 个修改的文件
包含
28 行增加
和
9 行删除
trunk/conf/full.conf
trunk/src/app/srs_app_hls.cpp
trunk/src/app/srs_app_hls.hpp
trunk/src/app/srs_app_http_hooks.cpp
trunk/src/app/srs_app_http_hooks.hpp
trunk/conf/full.conf
查看文件 @
0acb942
...
...
@@ -780,7 +780,10 @@ vhost hooks.callback.srs.com {
# "stream": "livestream",
# "duration": 9.36, // in seconds
# "cwd": "/usr/local/srs",
# "file": "./objs/nginx/html/live/livestream.1420254068776-100.ts",
# "file": "./objs/nginx/html/live/livestream/2015-04-23/01/476584165.ts",
# "url": "live/livestream/2015-04-23/01/476584165.ts",
# "m3u8": "./objs/nginx/html/live/livestream/live.m3u8",
# "m3u8_url": "live/livestream/live.m3u8",
# "seq_no": 100
# }
# if valid, the hook must return HTTP code 200(Stauts OK) and response
...
...
trunk/src/app/srs_app_hls.cpp
查看文件 @
0acb942
...
...
@@ -170,10 +170,13 @@ void SrsHlsSegment::update_duration(int64_t current_frame_dts)
return
;
}
SrsDvrAsyncCallOnHls
::
SrsDvrAsyncCallOnHls
(
SrsRequest
*
r
,
string
p
,
int
s
,
double
d
)
SrsDvrAsyncCallOnHls
::
SrsDvrAsyncCallOnHls
(
SrsRequest
*
r
,
string
p
,
string
t
,
string
m
,
string
mu
,
int
s
,
double
d
)
{
req
=
r
;
path
=
p
;
ts_url
=
t
;
m3u8
=
m
;
m3u8_url
=
mu
;
seq_no
=
s
;
duration
=
d
;
}
...
...
@@ -200,7 +203,7 @@ int SrsDvrAsyncCallOnHls::call()
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
,
sn
,
duration
))
!=
ERROR_SUCCESS
)
{
if
((
ret
=
SrsHttpHooks
::
on_hls
(
url
,
req
,
file
,
ts_url
,
m3u8
,
m3u8_url
,
sn
,
duration
))
!=
ERROR_SUCCESS
)
{
srs_error
(
"hook client on_hls failed. url=%s, ret=%d"
,
url
.
c_str
(),
ret
);
return
ret
;
}
...
...
@@ -361,8 +364,8 @@ int SrsHlsMuxer::update_config(SrsRequest* r, string entry_prefix,
deviation_ts
=
0
;
// generate the m3u8 dir and path.
m3u8
=
path
+
"/"
+
m3u8_file
;
m3u8
=
srs_path_build_stream
(
m3u8
,
req
->
vhost
,
req
->
app
,
req
->
stream
);
m3u8_url
=
srs_path_build_stream
(
m3u8_file
,
req
->
vhost
,
req
->
app
,
req
->
stream
);
m3u8
=
path
+
"/"
+
m3u8_url
;
// we always keep the target duration increasing.
int
max_td
=
srs_max
(
target_duration
,
(
int
)(
fragment
*
_srs_config
->
get_hls_td_ratio
(
r
->
vhost
)));
...
...
@@ -664,7 +667,10 @@ int SrsHlsMuxer::segment_close(string log_desc)
segments
.
push_back
(
current
);
// use async to call the http hooks, for it will cause thread switch.
if
((
ret
=
async
->
call
(
new
SrsDvrAsyncCallOnHls
(
req
,
current
->
full_path
,
current
->
sequence_no
,
current
->
duration
)))
!=
ERROR_SUCCESS
)
{
if
((
ret
=
async
->
call
(
new
SrsDvrAsyncCallOnHls
(
req
,
current
->
full_path
,
current
->
uri
,
m3u8
,
m3u8_url
,
current
->
sequence_no
,
current
->
duration
)))
!=
ERROR_SUCCESS
)
{
return
ret
;
}
...
...
trunk/src/app/srs_app_hls.hpp
查看文件 @
0acb942
...
...
@@ -163,11 +163,14 @@ class SrsDvrAsyncCallOnHls : public ISrsDvrAsyncCall
{
private
:
std
::
string
path
;
std
::
string
ts_url
;
std
::
string
m3u8
;
std
::
string
m3u8_url
;
int
seq_no
;
SrsRequest
*
req
;
double
duration
;
public
:
SrsDvrAsyncCallOnHls
(
SrsRequest
*
r
,
std
::
string
p
,
int
s
,
double
d
);
SrsDvrAsyncCallOnHls
(
SrsRequest
*
r
,
std
::
string
p
,
std
::
string
t
,
std
::
string
m
,
std
::
string
mu
,
int
s
,
double
d
);
virtual
~
SrsDvrAsyncCallOnHls
();
public
:
virtual
int
call
();
...
...
@@ -227,6 +230,7 @@ private:
int
_sequence_no
;
int
target_duration
;
std
::
string
m3u8
;
std
::
string
m3u8_url
;
private
:
ISrsHlsHandler
*
handler
;
// TODO: FIXME: supports reload.
...
...
trunk/src/app/srs_app_http_hooks.cpp
查看文件 @
0acb942
...
...
@@ -292,7 +292,7 @@ int SrsHttpHooks::on_dvr(string url, SrsRequest* req, string file)
return
ret
;
}
int
SrsHttpHooks
::
on_hls
(
string
url
,
SrsRequest
*
req
,
string
file
,
int
sn
,
double
duration
)
int
SrsHttpHooks
::
on_hls
(
string
url
,
SrsRequest
*
req
,
string
file
,
string
ts_url
,
string
m3u8
,
string
m3u8_url
,
int
sn
,
double
duration
)
{
int
ret
=
ERROR_SUCCESS
;
...
...
@@ -310,6 +310,9 @@ int SrsHttpHooks::on_hls(string url, SrsRequest* req, string file, int sn, doubl
<<
SRS_JFIELD_ORG
(
"duration"
,
duration
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"cwd"
,
cwd
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"file"
,
file
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"url"
,
ts_url
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"m3u8"
,
m3u8
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"m3u8_url"
,
m3u8_url
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"seq_no"
,
sn
)
<<
SRS_JOBJECT_END
;
...
...
trunk/src/app/srs_app_http_hooks.hpp
查看文件 @
0acb942
...
...
@@ -101,10 +101,13 @@ public:
* @param url the api server url, to process the event.
* ignore if empty.
* @param file the ts file path, can be relative or absolute path.
* @param ts_url the ts url, which used for m3u8.
* @param m3u8 the m3u8 file path, can be relative or absolute path.
* @param m3u8_url the m3u8 url, which is used for the http mount path.
* @param sn the seq_no, the sequence number of ts in hls/m3u8.
* @param duration the segment duration in seconds.
*/
static
int
on_hls
(
std
::
string
url
,
SrsRequest
*
req
,
std
::
string
file
,
int
sn
,
double
duration
);
static
int
on_hls
(
std
::
string
url
,
SrsRequest
*
req
,
std
::
string
file
,
std
::
string
ts_url
,
std
::
string
m3u8
,
std
::
string
m3u8_url
,
int
sn
,
double
duration
);
/**
* when hls reap segment, callback.
* @param url the api server url, to process the event.
...
...
请
注册
或
登录
后发表评论