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-08-28 15:11:11 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
04bea781ca9cf989d07b317526c7c98cd6f11221
04bea781
1 parent
e0219bd7
use amf0 encode for json encode.
隐藏空白字符变更
内嵌
并排对比
正在显示
7 个修改的文件
包含
225 行增加
和
213 行删除
trunk/src/app/srs_app_heartbeat.cpp
trunk/src/app/srs_app_http_api.cpp
trunk/src/app/srs_app_http_hooks.cpp
trunk/src/app/srs_app_utility.cpp
trunk/src/app/srs_app_utility.hpp
trunk/src/protocol/srs_protocol_json.hpp
trunk/src/protocol/srs_rtmp_amf0.cpp
trunk/src/app/srs_app_heartbeat.cpp
查看文件 @
04bea78
...
...
@@ -36,6 +36,7 @@ using namespace std;
#include <srs_app_utility.hpp>
#include <srs_core_autofree.hpp>
#include <srs_app_http_conn.hpp>
#include <srs_rtmp_amf0.hpp>
SrsHttpHeartbeat
::
SrsHttpHeartbeat
()
{
...
...
@@ -65,23 +66,25 @@ void SrsHttpHeartbeat::heartbeat()
ip
=
ips
[
_srs_config
->
get_stats_network
()
%
(
int
)
ips
.
size
()];
}
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"device_id"
,
device_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
ip
);
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"device_id"
,
SrsAmf0Any
::
str
(
device_id
.
c_str
()));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
ip
.
c_str
()));
if
(
_srs_config
->
get_heartbeat_summaries
())
{
ss
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"summaries"
,
""
);
srs_api_dump_summaries
(
ss
);
SrsAmf0Object
*
summaries
=
SrsAmf0Any
::
object
();
obj
->
set
(
"summaries"
,
summaries
);
srs_api_dump_summaries
(
summaries
);
}
ss
<<
SRS_JOBJECT_END
;
std
::
string
req
=
ss
.
str
();
SrsHttpClient
http
;
if
((
ret
=
http
.
initialize
(
uri
.
get_host
(),
uri
.
get_port
()))
!=
ERROR_SUCCESS
)
{
return
;
}
std
::
string
req
=
obj
->
to_json
();
ISrsHttpMessage
*
msg
=
NULL
;
if
((
ret
=
http
.
post
(
uri
.
get_path
(),
req
,
&
msg
))
!=
ERROR_SUCCESS
)
{
srs_info
(
"http post hartbeart uri failed. url=%s, request=%s, ret=%d"
,
...
...
trunk/src/app/srs_app_http_api.cpp
查看文件 @
04bea78
...
...
@@ -267,9 +267,12 @@ SrsGoApiSummaries::~SrsGoApiSummaries()
int
SrsGoApiSummaries
::
serve_http
(
ISrsHttpResponseWriter
*
w
,
ISrsHttpMessage
*
r
)
{
std
::
stringstream
ss
;
srs_api_dump_summaries
(
ss
);
return
srs_api_response
(
w
,
r
,
ss
.
str
());
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
srs_api_dump_summaries
(
obj
);
return
srs_api_response
(
w
,
r
,
obj
->
to_json
());
}
SrsGoApiRusages
::
SrsGoApiRusages
()
...
...
@@ -295,7 +298,7 @@ int SrsGoApiRusages::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
SrsRusage
*
ru
=
srs_get_system_rusage
();
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
ru
->
ok
?
"true"
:
"false"
));
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
ru
->
ok
));
data
->
set
(
"sample_time"
,
SrsAmf0Any
::
number
(
ru
->
sample_time
));
data
->
set
(
"ru_utime"
,
SrsAmf0Any
::
number
(
ru
->
r
.
ru_utime
.
tv_sec
));
data
->
set
(
"ru_stime"
,
SrsAmf0Any
::
number
(
ru
->
r
.
ru_stime
.
tv_sec
));
...
...
@@ -343,7 +346,7 @@ int SrsGoApiSelfProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage
string
state
;
state
+=
(
char
)
u
->
state
;
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
u
->
ok
?
"true"
:
"false"
));
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
u
->
ok
));
data
->
set
(
"sample_time"
,
SrsAmf0Any
::
number
(
u
->
sample_time
));
data
->
set
(
"percent"
,
SrsAmf0Any
::
number
(
u
->
percent
));
data
->
set
(
"pid"
,
SrsAmf0Any
::
number
(
u
->
pid
));
...
...
@@ -417,7 +420,7 @@ int SrsGoApiSystemProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
SrsProcSystemStat
*
s
=
srs_get_system_proc_stat
();
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
s
->
ok
?
"true"
:
"false"
));
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
s
->
ok
));
data
->
set
(
"sample_time"
,
SrsAmf0Any
::
number
(
s
->
sample_time
));
data
->
set
(
"percent"
,
SrsAmf0Any
::
number
(
s
->
percent
));
data
->
set
(
"user"
,
SrsAmf0Any
::
number
(
s
->
user
));
...
...
@@ -456,7 +459,7 @@ int SrsGoApiMemInfos::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
SrsMemInfo
*
m
=
srs_get_meminfo
();
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
m
->
ok
?
"true"
:
"false"
));
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
m
->
ok
));
data
->
set
(
"sample_time"
,
SrsAmf0Any
::
number
(
m
->
sample_time
));
data
->
set
(
"percent_ram"
,
SrsAmf0Any
::
number
(
m
->
percent_ram
));
data
->
set
(
"percent_swap"
,
SrsAmf0Any
::
number
(
m
->
percent_swap
));
...
...
trunk/src/app/srs_app_http_hooks.cpp
查看文件 @
04bea78
...
...
@@ -38,6 +38,7 @@ using namespace std;
#include <srs_app_config.hpp>
#include <srs_kernel_utility.hpp>
#include <srs_app_http_conn.hpp>
#include <srs_rtmp_amf0.hpp>
#define SRS_HTTP_RESPONSE_OK SRS_XSTR(ERROR_SUCCESS)
...
...
@@ -62,18 +63,18 @@ int SrsHttpHooks::on_connect(string url, SrsRequest* req)
int
client_id
=
_srs_context
->
get_id
();
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"action"
,
"on_connect"
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"client_id"
,
client_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
req
->
ip
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"vhost"
,
req
->
vhost
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"app"
,
req
->
app
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"tcUrl"
,
req
->
tcUrl
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"pageUrl"
,
req
->
pageUrl
)
<<
SRS_JOBJECT_END
;
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"action"
,
SrsAmf0Any
::
str
(
"on_connect"
));
obj
->
set
(
"client_id"
,
SrsAmf0Any
::
number
(
client_id
));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
req
->
ip
.
c_str
()));
obj
->
set
(
"vhost"
,
SrsAmf0Any
::
str
(
req
->
vhost
.
c_str
()));
obj
->
set
(
"app"
,
SrsAmf0Any
::
str
(
req
->
app
.
c_str
()));
obj
->
set
(
"tcUrl"
,
SrsAmf0Any
::
str
(
req
->
tcUrl
.
c_str
()));
obj
->
set
(
"pageUrl"
,
SrsAmf0Any
::
str
(
req
->
pageUrl
.
c_str
()));
std
::
string
data
=
ss
.
str
();
std
::
string
data
=
obj
->
to_json
();
std
::
string
res
;
int
status_code
;
if
((
ret
=
do_post
(
url
,
data
,
status_code
,
res
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -96,18 +97,18 @@ void SrsHttpHooks::on_close(string url, SrsRequest* req, int64_t send_bytes, int
int
client_id
=
_srs_context
->
get_id
();
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"action"
,
"on_close"
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"client_id"
,
client_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
req
->
ip
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"vhost"
,
req
->
vhost
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"send_bytes"
,
send_bytes
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"recv_bytes"
,
recv_bytes
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"app"
,
req
->
app
)
<<
SRS_JOBJECT_END
;
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"action"
,
SrsAmf0Any
::
str
(
"on_close"
));
obj
->
set
(
"client_id"
,
SrsAmf0Any
::
number
(
client_id
));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
req
->
ip
.
c_str
()));
obj
->
set
(
"vhost"
,
SrsAmf0Any
::
str
(
req
->
vhost
.
c_str
()));
obj
->
set
(
"app"
,
SrsAmf0Any
::
str
(
req
->
app
.
c_str
()));
obj
->
set
(
"send_bytes"
,
SrsAmf0Any
::
number
(
send_bytes
));
obj
->
set
(
"recv_bytes"
,
SrsAmf0Any
::
number
(
recv_bytes
));
std
::
string
data
=
ss
.
str
();
std
::
string
data
=
obj
->
to_json
();
std
::
string
res
;
int
status_code
;
if
((
ret
=
do_post
(
url
,
data
,
status_code
,
res
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -130,17 +131,17 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req)
int
client_id
=
_srs_context
->
get_id
();
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"action"
,
"on_publish"
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"client_id"
,
client_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
req
->
ip
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"vhost"
,
req
->
vhost
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"app"
,
req
->
app
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"stream"
,
req
->
stream
)
<<
SRS_JOBJECT_END
;
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"action"
,
SrsAmf0Any
::
str
(
"on_publish"
));
obj
->
set
(
"client_id"
,
SrsAmf0Any
::
number
(
client_id
));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
req
->
ip
.
c_str
()));
obj
->
set
(
"vhost"
,
SrsAmf0Any
::
str
(
req
->
vhost
.
c_str
()));
obj
->
set
(
"app"
,
SrsAmf0Any
::
str
(
req
->
app
.
c_str
()));
obj
->
set
(
"stream"
,
SrsAmf0Any
::
str
(
req
->
stream
.
c_str
()));
std
::
string
data
=
ss
.
str
();
std
::
string
data
=
obj
->
to_json
();
std
::
string
res
;
int
status_code
;
if
((
ret
=
do_post
(
url
,
data
,
status_code
,
res
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -163,17 +164,17 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req)
int
client_id
=
_srs_context
->
get_id
();
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"action"
,
"on_unpublish"
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"client_id"
,
client_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
req
->
ip
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"vhost"
,
req
->
vhost
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"app"
,
req
->
app
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"stream"
,
req
->
stream
)
<<
SRS_JOBJECT_END
;
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"action"
,
SrsAmf0Any
::
str
(
"on_unpublish"
));
obj
->
set
(
"client_id"
,
SrsAmf0Any
::
number
(
client_id
));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
req
->
ip
.
c_str
()));
obj
->
set
(
"vhost"
,
SrsAmf0Any
::
str
(
req
->
vhost
.
c_str
()));
obj
->
set
(
"app"
,
SrsAmf0Any
::
str
(
req
->
app
.
c_str
()));
obj
->
set
(
"stream"
,
SrsAmf0Any
::
str
(
req
->
stream
.
c_str
()));
std
::
string
data
=
ss
.
str
();
std
::
string
data
=
obj
->
to_json
();
std
::
string
res
;
int
status_code
;
if
((
ret
=
do_post
(
url
,
data
,
status_code
,
res
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -196,18 +197,18 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req)
int
client_id
=
_srs_context
->
get_id
();
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"action"
,
"on_play"
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"client_id"
,
client_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
req
->
ip
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"vhost"
,
req
->
vhost
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"app"
,
req
->
app
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"stream"
,
req
->
stream
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"pageUrl"
,
req
->
pageUrl
)
<<
SRS_JOBJECT_END
;
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"action"
,
SrsAmf0Any
::
str
(
"on_play"
));
obj
->
set
(
"client_id"
,
SrsAmf0Any
::
number
(
client_id
));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
req
->
ip
.
c_str
()));
obj
->
set
(
"vhost"
,
SrsAmf0Any
::
str
(
req
->
vhost
.
c_str
()));
obj
->
set
(
"app"
,
SrsAmf0Any
::
str
(
req
->
app
.
c_str
()));
obj
->
set
(
"stream"
,
SrsAmf0Any
::
str
(
req
->
stream
.
c_str
()));
obj
->
set
(
"pageUrl"
,
SrsAmf0Any
::
str
(
req
->
pageUrl
.
c_str
()));
std
::
string
data
=
ss
.
str
();
std
::
string
data
=
obj
->
to_json
();
std
::
string
res
;
int
status_code
;
if
((
ret
=
do_post
(
url
,
data
,
status_code
,
res
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -230,17 +231,17 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req)
int
client_id
=
_srs_context
->
get_id
();
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"action"
,
"on_stop"
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"client_id"
,
client_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
req
->
ip
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"vhost"
,
req
->
vhost
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"app"
,
req
->
app
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"stream"
,
req
->
stream
)
<<
SRS_JOBJECT_END
;
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"action"
,
SrsAmf0Any
::
str
(
"on_stop"
));
obj
->
set
(
"client_id"
,
SrsAmf0Any
::
number
(
client_id
));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
req
->
ip
.
c_str
()));
obj
->
set
(
"vhost"
,
SrsAmf0Any
::
str
(
req
->
vhost
.
c_str
()));
obj
->
set
(
"app"
,
SrsAmf0Any
::
str
(
req
->
app
.
c_str
()));
obj
->
set
(
"stream"
,
SrsAmf0Any
::
str
(
req
->
stream
.
c_str
()));
std
::
string
data
=
ss
.
str
();
std
::
string
data
=
obj
->
to_json
();
std
::
string
res
;
int
status_code
;
if
((
ret
=
do_post
(
url
,
data
,
status_code
,
res
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -264,19 +265,19 @@ int SrsHttpHooks::on_dvr(string url, SrsRequest* req, string file)
int
client_id
=
_srs_context
->
get_id
();
std
::
string
cwd
=
_srs_config
->
cwd
();
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"action"
,
"on_dvr"
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"client_id"
,
client_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
req
->
ip
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"vhost"
,
req
->
vhost
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"app"
,
req
->
app
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"stream"
,
req
->
stream
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"cwd"
,
cwd
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"file"
,
file
)
<<
SRS_JOBJECT_END
;
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"action"
,
SrsAmf0Any
::
str
(
"on_dvr"
));
obj
->
set
(
"client_id"
,
SrsAmf0Any
::
number
(
client_id
));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
req
->
ip
.
c_str
()));
obj
->
set
(
"vhost"
,
SrsAmf0Any
::
str
(
req
->
vhost
.
c_str
()));
obj
->
set
(
"app"
,
SrsAmf0Any
::
str
(
req
->
app
.
c_str
()));
obj
->
set
(
"stream"
,
SrsAmf0Any
::
str
(
req
->
stream
.
c_str
()));
obj
->
set
(
"cwd"
,
SrsAmf0Any
::
str
(
cwd
.
c_str
()));
obj
->
set
(
"file"
,
SrsAmf0Any
::
str
(
file
.
c_str
()));
std
::
string
data
=
ss
.
str
();
std
::
string
data
=
obj
->
to_json
();
std
::
string
res
;
int
status_code
;
if
((
ret
=
do_post
(
url
,
data
,
status_code
,
res
))
!=
ERROR_SUCCESS
)
{
...
...
@@ -300,24 +301,24 @@ int SrsHttpHooks::on_hls(string url, SrsRequest* req, string file, string ts_url
int
client_id
=
_srs_context
->
get_id
();
std
::
string
cwd
=
_srs_config
->
cwd
();
std
::
stringstream
ss
;
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_STR
(
"action"
,
"on_hls"
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"client_id"
,
client_id
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"ip"
,
req
->
ip
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"vhost"
,
req
->
vhost
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"app"
,
req
->
app
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"stream"
,
req
->
stream
)
<<
SRS_JFIELD_CONT
<<
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
;
SrsAmf0Object
*
obj
=
SrsAmf0Any
::
object
();
SrsAutoFree
(
SrsAmf0Object
,
obj
);
obj
->
set
(
"action"
,
SrsAmf0Any
::
str
(
"on_hls"
));
obj
->
set
(
"client_id"
,
SrsAmf0Any
::
number
(
client_id
));
obj
->
set
(
"ip"
,
SrsAmf0Any
::
str
(
req
->
ip
.
c_str
()));
obj
->
set
(
"vhost"
,
SrsAmf0Any
::
str
(
req
->
vhost
.
c_str
()));
obj
->
set
(
"app"
,
SrsAmf0Any
::
str
(
req
->
app
.
c_str
()));
obj
->
set
(
"stream"
,
SrsAmf0Any
::
str
(
req
->
stream
.
c_str
()));
obj
->
set
(
"duration"
,
SrsAmf0Any
::
number
(
duration
));
obj
->
set
(
"cwd"
,
SrsAmf0Any
::
str
(
cwd
.
c_str
()));
obj
->
set
(
"file"
,
SrsAmf0Any
::
str
(
file
.
c_str
()));
obj
->
set
(
"url"
,
SrsAmf0Any
::
str
(
url
.
c_str
()));
obj
->
set
(
"m3u8"
,
SrsAmf0Any
::
str
(
m3u8
.
c_str
()));
obj
->
set
(
"m3u8_url"
,
SrsAmf0Any
::
str
(
m3u8_url
.
c_str
()));
obj
->
set
(
"seq_no"
,
SrsAmf0Any
::
number
(
sn
));
std
::
string
data
=
ss
.
str
();
std
::
string
data
=
obj
->
to_json
();
std
::
string
res
;
int
status_code
;
if
((
ret
=
do_post
(
url
,
data
,
status_code
,
res
))
!=
ERROR_SUCCESS
)
{
...
...
trunk/src/app/srs_app_utility.cpp
查看文件 @
04bea78
...
...
@@ -45,6 +45,7 @@ using namespace std;
#include <srs_protocol_kbps.hpp>
#include <srs_protocol_json.hpp>
#include <srs_kernel_stream.hpp>
#include <srs_rtmp_amf0.hpp>
// the longest time to wait for a process to quit.
#define SRS_PROCESS_QUIT_TIMEOUT_MS 1000
...
...
@@ -1354,7 +1355,7 @@ string srs_get_peer_ip(int fd)
return
ip
;
}
void
srs_api_dump_summaries
(
std
::
stringstream
&
ss
)
void
srs_api_dump_summaries
(
SrsAmf0Object
*
obj
)
{
SrsRusage
*
r
=
srs_get_system_rusage
();
SrsProcSelfStat
*
u
=
srs_get_self_proc_stat
();
...
...
@@ -1407,57 +1408,61 @@ void srs_api_dump_summaries(std::stringstream& ss)
bool
ok
=
(
r
->
ok
&&
u
->
ok
&&
s
->
ok
&&
c
->
ok
&&
d
->
ok
&&
m
->
ok
&&
p
->
ok
&&
nrs
->
ok
);
ss
<<
SRS_JOBJECT_START
<<
SRS_JFIELD_ERROR
(
ERROR_SUCCESS
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"data"
,
SRS_JOBJECT_START
)
<<
SRS_JFIELD_ORG
(
"ok"
,
(
ok
?
"true"
:
"false"
))
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"now_ms"
,
now
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"self"
,
SRS_JOBJECT_START
)
<<
SRS_JFIELD_STR
(
"version"
,
RTMP_SIG_SRS_VERSION
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"pid"
,
getpid
())
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"ppid"
,
u
->
ppid
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"argv"
,
_srs_config
->
argv
())
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_STR
(
"cwd"
,
_srs_config
->
cwd
())
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"mem_kbyte"
,
r
->
r
.
ru_maxrss
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"mem_percent"
,
self_mem_percent
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"cpu_percent"
,
u
->
percent
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"srs_uptime"
,
srs_uptime
)
<<
SRS_JOBJECT_END
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"system"
,
SRS_JOBJECT_START
)
<<
SRS_JFIELD_ORG
(
"cpu_percent"
,
s
->
percent
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"disk_read_KBps"
,
d
->
in_KBps
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"disk_write_KBps"
,
d
->
out_KBps
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"disk_busy_percent"
,
d
->
busy
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"mem_ram_kbyte"
,
m
->
MemTotal
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"mem_ram_percent"
,
m
->
percent_ram
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"mem_swap_kbyte"
,
m
->
SwapTotal
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"mem_swap_percent"
,
m
->
percent_swap
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"cpus"
,
c
->
nb_processors
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"cpus_online"
,
c
->
nb_processors_online
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"uptime"
,
p
->
os_uptime
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"ilde_time"
,
p
->
os_ilde_time
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"load_1m"
,
p
->
load_one_minutes
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"load_5m"
,
p
->
load_five_minutes
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"load_15m"
,
p
->
load_fifteen_minutes
)
<<
SRS_JFIELD_CONT
// system network bytes stat.
<<
SRS_JFIELD_ORG
(
"net_sample_time"
,
n_sample_time
)
<<
SRS_JFIELD_CONT
// internet public address network device bytes.
<<
SRS_JFIELD_ORG
(
"net_recv_bytes"
,
nr_bytes
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"net_send_bytes"
,
ns_bytes
)
<<
SRS_JFIELD_CONT
// intranet private address network device bytes.
<<
SRS_JFIELD_ORG
(
"net_recvi_bytes"
,
nri_bytes
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"net_sendi_bytes"
,
nsi_bytes
)
<<
SRS_JFIELD_CONT
// srs network bytes stat.
<<
SRS_JFIELD_ORG
(
"srs_sample_time"
,
nrs
->
sample_time
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"srs_recv_bytes"
,
nrs
->
rbytes
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"srs_send_bytes"
,
nrs
->
sbytes
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"conn_sys"
,
nrs
->
nb_conn_sys
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"conn_sys_et"
,
nrs
->
nb_conn_sys_et
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"conn_sys_tw"
,
nrs
->
nb_conn_sys_tw
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"conn_sys_udp"
,
nrs
->
nb_conn_sys_udp
)
<<
SRS_JFIELD_CONT
<<
SRS_JFIELD_ORG
(
"conn_srs"
,
nrs
->
nb_conn_srs
)
<<
SRS_JOBJECT_END
<<
SRS_JOBJECT_END
<<
SRS_JOBJECT_END
;
SrsAmf0Object
*
data
=
SrsAmf0Any
::
object
();
obj
->
set
(
"data"
,
data
);
data
->
set
(
"ok"
,
SrsAmf0Any
::
boolean
(
ok
));
data
->
set
(
"now_ms"
,
SrsAmf0Any
::
number
(
now
));
// self
SrsAmf0Object
*
self
=
SrsAmf0Any
::
object
();
data
->
set
(
"self"
,
self
);
self
->
set
(
"version"
,
SrsAmf0Any
::
str
(
RTMP_SIG_SRS_VERSION
));
self
->
set
(
"pid"
,
SrsAmf0Any
::
number
(
getpid
()));
self
->
set
(
"ppid"
,
SrsAmf0Any
::
number
(
u
->
ppid
));
self
->
set
(
"argv"
,
SrsAmf0Any
::
str
(
_srs_config
->
argv
().
c_str
()));
self
->
set
(
"cwd"
,
SrsAmf0Any
::
str
(
_srs_config
->
cwd
().
c_str
()));
self
->
set
(
"mem_kbyte"
,
SrsAmf0Any
::
number
(
r
->
r
.
ru_maxrss
));
self
->
set
(
"mem_percent"
,
SrsAmf0Any
::
number
(
self_mem_percent
));
self
->
set
(
"cpu_percent"
,
SrsAmf0Any
::
number
(
u
->
percent
));
self
->
set
(
"srs_uptime"
,
SrsAmf0Any
::
number
(
srs_uptime
));
// system
SrsAmf0Object
*
sys
=
SrsAmf0Any
::
object
();
data
->
set
(
"system"
,
sys
);
sys
->
set
(
"cpu_percent"
,
SrsAmf0Any
::
number
(
s
->
percent
));
sys
->
set
(
"disk_read_KBps"
,
SrsAmf0Any
::
number
(
d
->
in_KBps
));
sys
->
set
(
"disk_write_KBps"
,
SrsAmf0Any
::
number
(
d
->
out_KBps
));
sys
->
set
(
"disk_busy_percent"
,
SrsAmf0Any
::
number
(
d
->
busy
));
sys
->
set
(
"mem_ram_kbyte"
,
SrsAmf0Any
::
number
(
m
->
MemTotal
));
sys
->
set
(
"mem_ram_percent"
,
SrsAmf0Any
::
number
(
m
->
percent_ram
));
sys
->
set
(
"mem_swap_kbyte"
,
SrsAmf0Any
::
number
(
m
->
SwapTotal
));
sys
->
set
(
"mem_swap_percent"
,
SrsAmf0Any
::
number
(
m
->
percent_swap
));
sys
->
set
(
"cpus"
,
SrsAmf0Any
::
number
(
c
->
nb_processors
));
sys
->
set
(
"cpus_online"
,
SrsAmf0Any
::
number
(
c
->
nb_processors_online
));
sys
->
set
(
"uptime"
,
SrsAmf0Any
::
number
(
p
->
os_uptime
));
sys
->
set
(
"ilde_time"
,
SrsAmf0Any
::
number
(
p
->
os_ilde_time
));
sys
->
set
(
"load_1m"
,
SrsAmf0Any
::
number
(
p
->
load_one_minutes
));
sys
->
set
(
"load_5m"
,
SrsAmf0Any
::
number
(
p
->
load_five_minutes
));
sys
->
set
(
"load_15m"
,
SrsAmf0Any
::
number
(
p
->
load_fifteen_minutes
));
// system network bytes stat.
sys
->
set
(
"net_sample_time"
,
SrsAmf0Any
::
number
(
n_sample_time
));
// internet public address network device bytes.
sys
->
set
(
"net_recv_bytes"
,
SrsAmf0Any
::
number
(
nr_bytes
));
sys
->
set
(
"net_send_bytes"
,
SrsAmf0Any
::
number
(
ns_bytes
));
// intranet private address network device bytes.
sys
->
set
(
"net_recvi_bytes"
,
SrsAmf0Any
::
number
(
nri_bytes
));
sys
->
set
(
"net_sendi_bytes"
,
SrsAmf0Any
::
number
(
nsi_bytes
));
// srs network bytes stat.
sys
->
set
(
"srs_sample_time"
,
SrsAmf0Any
::
number
(
nrs
->
sample_time
));
sys
->
set
(
"srs_recv_bytes"
,
SrsAmf0Any
::
number
(
nrs
->
rbytes
));
sys
->
set
(
"srs_send_bytes"
,
SrsAmf0Any
::
number
(
nrs
->
sbytes
));
sys
->
set
(
"conn_sys"
,
SrsAmf0Any
::
number
(
nrs
->
nb_conn_sys
));
sys
->
set
(
"conn_sys_et"
,
SrsAmf0Any
::
number
(
nrs
->
nb_conn_sys_et
));
sys
->
set
(
"conn_sys_tw"
,
SrsAmf0Any
::
number
(
nrs
->
nb_conn_sys_tw
));
sys
->
set
(
"conn_sys_udp"
,
SrsAmf0Any
::
number
(
nrs
->
nb_conn_sys_udp
));
sys
->
set
(
"conn_srs"
,
SrsAmf0Any
::
number
(
nrs
->
nb_conn_srs
));
}
...
...
trunk/src/app/srs_app_utility.hpp
查看文件 @
04bea78
...
...
@@ -41,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
class
SrsKbps
;
class
SrsStream
;
class
SrsAmf0Object
;
// client open socket and connect to server.
extern
int
srs_socket_connect
(
std
::
string
server
,
int
port
,
int64_t
timeout
,
st_netfd_t
*
pstfd
);
...
...
@@ -669,7 +670,7 @@ extern int srs_get_local_port(int fd);
extern
std
::
string
srs_get_peer_ip
(
int
fd
);
// dump summaries for /api/v1/summaries.
extern
void
srs_api_dump_summaries
(
std
::
stringstream
&
ss
);
extern
void
srs_api_dump_summaries
(
SrsAmf0Object
*
obj
);
#endif
...
...
trunk/src/protocol/srs_protocol_json.hpp
查看文件 @
04bea78
...
...
@@ -174,56 +174,6 @@ public:
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/* json encode
cout<< SRS_JOBJECT_START
<< SRS_JFIELD_STR("name", "srs") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("version", 100) << SRS_JFIELD_CONT
<< SRS_JFIELD_NAME("features") << SRS_JOBJECT_START
<< SRS_JFIELD_STR("rtmp", "released") << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("hls", "released") << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("dash", "plan")
<< SRS_JOBJECT_END << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("author", "srs team")
<< SRS_JOBJECT_END
it's:
cont<< "{"
<< "name:" << "srs" << ","
<< "version:" << 100 << ","
<< "features:" << "{"
<< "rtmp:" << "released" << ","
<< "hls:" << "released" << ","
<< "dash:" << "plan"
<< "}" << ","
<< "author:" << "srs team"
<< "}"
that is:
"""
{
"name": "srs",
"version": 100,
"features": {
"rtmp": "released",
"hls": "released",
"dash": "plan"
},
"author": "srs team"
}
"""
*/
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
#define SRS_JOBJECT_START "{"
#define SRS_JFIELD_NAME(k) "\"" << k << "\":"
#define SRS_JFIELD_OBJ(k) SRS_JFIELD_NAME(k) << SRS_JOBJECT_START
#define SRS_JFIELD_STR(k, v) SRS_JFIELD_NAME(k) << "\"" << v << "\""
#define SRS_JFIELD_ORG(k, v) SRS_JFIELD_NAME(k) << std::dec << v
#define SRS_JFIELD_BOOL(k, v) SRS_JFIELD_ORG(k, (v? "true":"false"))
#define SRS_JFIELD_NULL(k) SRS_JFIELD_NAME(k) << "null"
#define SRS_JFIELD_ERROR(ret) "\"" << "code" << "\":" << ret
#define SRS_JFIELD_CONT ","
#define SRS_JOBJECT_END "}"
#define SRS_JARRAY_START "["
#define SRS_JARRAY_END "]"
// json encode, please use AMF0.to_json() to encode json object.
#endif
...
...
trunk/src/protocol/srs_rtmp_amf0.cpp
查看文件 @
04bea78
...
...
@@ -35,6 +35,55 @@ using namespace std;
using
namespace
_srs_internal
;
/* json encode
cout<< SRS_JOBJECT_START
<< SRS_JFIELD_STR("name", "srs") << SRS_JFIELD_CONT
<< SRS_JFIELD_ORG("version", 100) << SRS_JFIELD_CONT
<< SRS_JFIELD_NAME("features") << SRS_JOBJECT_START
<< SRS_JFIELD_STR("rtmp", "released") << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("hls", "released") << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("dash", "plan")
<< SRS_JOBJECT_END << SRS_JFIELD_CONT
<< SRS_JFIELD_STR("author", "srs team")
<< SRS_JOBJECT_END
it's:
cont<< "{"
<< "name:" << "srs" << ","
<< "version:" << 100 << ","
<< "features:" << "{"
<< "rtmp:" << "released" << ","
<< "hls:" << "released" << ","
<< "dash:" << "plan"
<< "}" << ","
<< "author:" << "srs team"
<< "}"
that is:
"""
{
"name": "srs",
"version": 100,
"features": {
"rtmp": "released",
"hls": "released",
"dash": "plan"
},
"author": "srs team"
}
"""
*/
#define SRS_JOBJECT_START "{"
#define SRS_JFIELD_NAME(k) "\"" << k << "\":"
#define SRS_JFIELD_OBJ(k) SRS_JFIELD_NAME(k) << SRS_JOBJECT_START
#define SRS_JFIELD_STR(k, v) SRS_JFIELD_NAME(k) << "\"" << v << "\""
#define SRS_JFIELD_ORG(k, v) SRS_JFIELD_NAME(k) << std::dec << v
#define SRS_JFIELD_BOOL(k, v) SRS_JFIELD_ORG(k, (v? "true":"false"))
#define SRS_JFIELD_NULL(k) SRS_JFIELD_NAME(k) << "null"
#define SRS_JFIELD_ERROR(ret) "\"" << "code" << "\":" << ret
#define SRS_JFIELD_CONT ","
#define SRS_JOBJECT_END "}"
#define SRS_JARRAY_START "["
#define SRS_JARRAY_END "]"
// AMF0 marker
#define RTMP_AMF0_Number 0x00
#define RTMP_AMF0_Boolean 0x01
...
...
请
注册
或
登录
后发表评论