正在显示
7 个修改的文件
包含
229 行增加
和
217 行删除
| @@ -36,6 +36,7 @@ using namespace std; | @@ -36,6 +36,7 @@ using namespace std; | ||
| 36 | #include <srs_app_utility.hpp> | 36 | #include <srs_app_utility.hpp> |
| 37 | #include <srs_core_autofree.hpp> | 37 | #include <srs_core_autofree.hpp> |
| 38 | #include <srs_app_http_conn.hpp> | 38 | #include <srs_app_http_conn.hpp> |
| 39 | +#include <srs_rtmp_amf0.hpp> | ||
| 39 | 40 | ||
| 40 | SrsHttpHeartbeat::SrsHttpHeartbeat() | 41 | SrsHttpHeartbeat::SrsHttpHeartbeat() |
| 41 | { | 42 | { |
| @@ -65,23 +66,25 @@ void SrsHttpHeartbeat::heartbeat() | @@ -65,23 +66,25 @@ void SrsHttpHeartbeat::heartbeat() | ||
| 65 | ip = ips[_srs_config->get_stats_network() % (int)ips.size()]; | 66 | ip = ips[_srs_config->get_stats_network() % (int)ips.size()]; |
| 66 | } | 67 | } |
| 67 | 68 | ||
| 68 | - std::stringstream ss; | ||
| 69 | - ss << SRS_JOBJECT_START | ||
| 70 | - << SRS_JFIELD_STR("device_id", device_id) << SRS_JFIELD_CONT | ||
| 71 | - << SRS_JFIELD_STR("ip", ip); | 69 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 70 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 71 | + | ||
| 72 | + obj->set("device_id", SrsAmf0Any::str(device_id.c_str())); | ||
| 73 | + obj->set("ip", SrsAmf0Any::str(ip.c_str())); | ||
| 74 | + | ||
| 72 | if (_srs_config->get_heartbeat_summaries()) { | 75 | if (_srs_config->get_heartbeat_summaries()) { |
| 73 | - ss << SRS_JFIELD_CONT << SRS_JFIELD_ORG("summaries", ""); | ||
| 74 | - srs_api_dump_summaries(ss); | ||
| 75 | - } | ||
| 76 | - ss << SRS_JOBJECT_END; | 76 | + SrsAmf0Object* summaries = SrsAmf0Any::object(); |
| 77 | + obj->set("summaries", summaries); | ||
| 77 | 78 | ||
| 78 | - std::string req = ss.str(); | 79 | + srs_api_dump_summaries(summaries); |
| 80 | + } | ||
| 79 | 81 | ||
| 80 | SrsHttpClient http; | 82 | SrsHttpClient http; |
| 81 | if ((ret = http.initialize(uri.get_host(), uri.get_port())) != ERROR_SUCCESS) { | 83 | if ((ret = http.initialize(uri.get_host(), uri.get_port())) != ERROR_SUCCESS) { |
| 82 | return; | 84 | return; |
| 83 | } | 85 | } |
| 84 | 86 | ||
| 87 | + std::string req = obj->to_json(); | ||
| 85 | ISrsHttpMessage* msg = NULL; | 88 | ISrsHttpMessage* msg = NULL; |
| 86 | if ((ret = http.post(uri.get_path(), req, &msg)) != ERROR_SUCCESS) { | 89 | if ((ret = http.post(uri.get_path(), req, &msg)) != ERROR_SUCCESS) { |
| 87 | srs_info("http post hartbeart uri failed. url=%s, request=%s, ret=%d", | 90 | srs_info("http post hartbeart uri failed. url=%s, request=%s, ret=%d", |
| @@ -267,9 +267,12 @@ SrsGoApiSummaries::~SrsGoApiSummaries() | @@ -267,9 +267,12 @@ SrsGoApiSummaries::~SrsGoApiSummaries() | ||
| 267 | 267 | ||
| 268 | int SrsGoApiSummaries::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | 268 | int SrsGoApiSummaries::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) |
| 269 | { | 269 | { |
| 270 | - std::stringstream ss; | ||
| 271 | - srs_api_dump_summaries(ss); | ||
| 272 | - return srs_api_response(w, r, ss.str()); | 270 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 271 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 272 | + | ||
| 273 | + srs_api_dump_summaries(obj); | ||
| 274 | + | ||
| 275 | + return srs_api_response(w, r, obj->to_json()); | ||
| 273 | } | 276 | } |
| 274 | 277 | ||
| 275 | SrsGoApiRusages::SrsGoApiRusages() | 278 | SrsGoApiRusages::SrsGoApiRusages() |
| @@ -295,7 +298,7 @@ int SrsGoApiRusages::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | @@ -295,7 +298,7 @@ int SrsGoApiRusages::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | ||
| 295 | 298 | ||
| 296 | SrsRusage* ru = srs_get_system_rusage(); | 299 | SrsRusage* ru = srs_get_system_rusage(); |
| 297 | 300 | ||
| 298 | - data->set("ok", SrsAmf0Any::boolean(ru->ok? "true":"false")); | 301 | + data->set("ok", SrsAmf0Any::boolean(ru->ok)); |
| 299 | data->set("sample_time", SrsAmf0Any::number(ru->sample_time)); | 302 | data->set("sample_time", SrsAmf0Any::number(ru->sample_time)); |
| 300 | data->set("ru_utime", SrsAmf0Any::number(ru->r.ru_utime.tv_sec)); | 303 | data->set("ru_utime", SrsAmf0Any::number(ru->r.ru_utime.tv_sec)); |
| 301 | data->set("ru_stime", SrsAmf0Any::number(ru->r.ru_stime.tv_sec)); | 304 | data->set("ru_stime", SrsAmf0Any::number(ru->r.ru_stime.tv_sec)); |
| @@ -343,7 +346,7 @@ int SrsGoApiSelfProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage | @@ -343,7 +346,7 @@ int SrsGoApiSelfProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage | ||
| 343 | string state; | 346 | string state; |
| 344 | state += (char)u->state; | 347 | state += (char)u->state; |
| 345 | 348 | ||
| 346 | - data->set("ok", SrsAmf0Any::boolean(u->ok? "true":"false")); | 349 | + data->set("ok", SrsAmf0Any::boolean(u->ok)); |
| 347 | data->set("sample_time", SrsAmf0Any::number(u->sample_time)); | 350 | data->set("sample_time", SrsAmf0Any::number(u->sample_time)); |
| 348 | data->set("percent", SrsAmf0Any::number(u->percent)); | 351 | data->set("percent", SrsAmf0Any::number(u->percent)); |
| 349 | data->set("pid", SrsAmf0Any::number(u->pid)); | 352 | data->set("pid", SrsAmf0Any::number(u->pid)); |
| @@ -417,7 +420,7 @@ int SrsGoApiSystemProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa | @@ -417,7 +420,7 @@ int SrsGoApiSystemProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa | ||
| 417 | 420 | ||
| 418 | SrsProcSystemStat* s = srs_get_system_proc_stat(); | 421 | SrsProcSystemStat* s = srs_get_system_proc_stat(); |
| 419 | 422 | ||
| 420 | - data->set("ok", SrsAmf0Any::boolean(s->ok? "true":"false")); | 423 | + data->set("ok", SrsAmf0Any::boolean(s->ok)); |
| 421 | data->set("sample_time", SrsAmf0Any::number(s->sample_time)); | 424 | data->set("sample_time", SrsAmf0Any::number(s->sample_time)); |
| 422 | data->set("percent", SrsAmf0Any::number(s->percent)); | 425 | data->set("percent", SrsAmf0Any::number(s->percent)); |
| 423 | data->set("user", SrsAmf0Any::number(s->user)); | 426 | data->set("user", SrsAmf0Any::number(s->user)); |
| @@ -456,7 +459,7 @@ int SrsGoApiMemInfos::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | @@ -456,7 +459,7 @@ int SrsGoApiMemInfos::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) | ||
| 456 | 459 | ||
| 457 | SrsMemInfo* m = srs_get_meminfo(); | 460 | SrsMemInfo* m = srs_get_meminfo(); |
| 458 | 461 | ||
| 459 | - data->set("ok", SrsAmf0Any::boolean(m->ok? "true":"false")); | 462 | + data->set("ok", SrsAmf0Any::boolean(m->ok)); |
| 460 | data->set("sample_time", SrsAmf0Any::number(m->sample_time)); | 463 | data->set("sample_time", SrsAmf0Any::number(m->sample_time)); |
| 461 | data->set("percent_ram", SrsAmf0Any::number(m->percent_ram)); | 464 | data->set("percent_ram", SrsAmf0Any::number(m->percent_ram)); |
| 462 | data->set("percent_swap", SrsAmf0Any::number(m->percent_swap)); | 465 | data->set("percent_swap", SrsAmf0Any::number(m->percent_swap)); |
| @@ -38,6 +38,7 @@ using namespace std; | @@ -38,6 +38,7 @@ using namespace std; | ||
| 38 | #include <srs_app_config.hpp> | 38 | #include <srs_app_config.hpp> |
| 39 | #include <srs_kernel_utility.hpp> | 39 | #include <srs_kernel_utility.hpp> |
| 40 | #include <srs_app_http_conn.hpp> | 40 | #include <srs_app_http_conn.hpp> |
| 41 | +#include <srs_rtmp_amf0.hpp> | ||
| 41 | 42 | ||
| 42 | #define SRS_HTTP_RESPONSE_OK SRS_XSTR(ERROR_SUCCESS) | 43 | #define SRS_HTTP_RESPONSE_OK SRS_XSTR(ERROR_SUCCESS) |
| 43 | 44 | ||
| @@ -62,18 +63,18 @@ int SrsHttpHooks::on_connect(string url, SrsRequest* req) | @@ -62,18 +63,18 @@ int SrsHttpHooks::on_connect(string url, SrsRequest* req) | ||
| 62 | 63 | ||
| 63 | int client_id = _srs_context->get_id(); | 64 | int client_id = _srs_context->get_id(); |
| 64 | 65 | ||
| 65 | - std::stringstream ss; | ||
| 66 | - ss << SRS_JOBJECT_START | ||
| 67 | - << SRS_JFIELD_STR("action", "on_connect") << SRS_JFIELD_CONT | ||
| 68 | - << SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT | ||
| 69 | - << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT | ||
| 70 | - << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT | ||
| 71 | - << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT | ||
| 72 | - << SRS_JFIELD_STR("tcUrl", req->tcUrl) << SRS_JFIELD_CONT | ||
| 73 | - << SRS_JFIELD_STR("pageUrl", req->pageUrl) | ||
| 74 | - << SRS_JOBJECT_END; | ||
| 75 | - | ||
| 76 | - std::string data = ss.str(); | 66 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 67 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 68 | + | ||
| 69 | + obj->set("action", SrsAmf0Any::str("on_connect")); | ||
| 70 | + obj->set("client_id", SrsAmf0Any::number(client_id)); | ||
| 71 | + obj->set("ip", SrsAmf0Any::str(req->ip.c_str())); | ||
| 72 | + obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str())); | ||
| 73 | + obj->set("app", SrsAmf0Any::str(req->app.c_str())); | ||
| 74 | + obj->set("tcUrl", SrsAmf0Any::str(req->tcUrl.c_str())); | ||
| 75 | + obj->set("pageUrl", SrsAmf0Any::str(req->pageUrl.c_str())); | ||
| 76 | + | ||
| 77 | + std::string data = obj->to_json(); | ||
| 77 | std::string res; | 78 | std::string res; |
| 78 | int status_code; | 79 | int status_code; |
| 79 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { | 80 | 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 | @@ -96,18 +97,18 @@ void SrsHttpHooks::on_close(string url, SrsRequest* req, int64_t send_bytes, int | ||
| 96 | 97 | ||
| 97 | int client_id = _srs_context->get_id(); | 98 | int client_id = _srs_context->get_id(); |
| 98 | 99 | ||
| 99 | - std::stringstream ss; | ||
| 100 | - ss << SRS_JOBJECT_START | ||
| 101 | - << SRS_JFIELD_STR("action", "on_close") << SRS_JFIELD_CONT | ||
| 102 | - << SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT | ||
| 103 | - << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT | ||
| 104 | - << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT | ||
| 105 | - << SRS_JFIELD_ORG("send_bytes", send_bytes) << SRS_JFIELD_CONT | ||
| 106 | - << SRS_JFIELD_ORG("recv_bytes", recv_bytes) << SRS_JFIELD_CONT | ||
| 107 | - << SRS_JFIELD_STR("app", req->app) | ||
| 108 | - << SRS_JOBJECT_END; | ||
| 109 | - | ||
| 110 | - std::string data = ss.str(); | 100 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 101 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 102 | + | ||
| 103 | + obj->set("action", SrsAmf0Any::str("on_close")); | ||
| 104 | + obj->set("client_id", SrsAmf0Any::number(client_id)); | ||
| 105 | + obj->set("ip", SrsAmf0Any::str(req->ip.c_str())); | ||
| 106 | + obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str())); | ||
| 107 | + obj->set("app", SrsAmf0Any::str(req->app.c_str())); | ||
| 108 | + obj->set("send_bytes", SrsAmf0Any::number(send_bytes)); | ||
| 109 | + obj->set("recv_bytes", SrsAmf0Any::number(recv_bytes)); | ||
| 110 | + | ||
| 111 | + std::string data = obj->to_json(); | ||
| 111 | std::string res; | 112 | std::string res; |
| 112 | int status_code; | 113 | int status_code; |
| 113 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { | 114 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { |
| @@ -130,17 +131,17 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req) | @@ -130,17 +131,17 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req) | ||
| 130 | 131 | ||
| 131 | int client_id = _srs_context->get_id(); | 132 | int client_id = _srs_context->get_id(); |
| 132 | 133 | ||
| 133 | - std::stringstream ss; | ||
| 134 | - ss << SRS_JOBJECT_START | ||
| 135 | - << SRS_JFIELD_STR("action", "on_publish") << SRS_JFIELD_CONT | ||
| 136 | - << SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT | ||
| 137 | - << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT | ||
| 138 | - << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT | ||
| 139 | - << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT | ||
| 140 | - << SRS_JFIELD_STR("stream", req->stream) | ||
| 141 | - << SRS_JOBJECT_END; | ||
| 142 | - | ||
| 143 | - std::string data = ss.str(); | 134 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 135 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 136 | + | ||
| 137 | + obj->set("action", SrsAmf0Any::str("on_publish")); | ||
| 138 | + obj->set("client_id", SrsAmf0Any::number(client_id)); | ||
| 139 | + obj->set("ip", SrsAmf0Any::str(req->ip.c_str())); | ||
| 140 | + obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str())); | ||
| 141 | + obj->set("app", SrsAmf0Any::str(req->app.c_str())); | ||
| 142 | + obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); | ||
| 143 | + | ||
| 144 | + std::string data = obj->to_json(); | ||
| 144 | std::string res; | 145 | std::string res; |
| 145 | int status_code; | 146 | int status_code; |
| 146 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { | 147 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { |
| @@ -163,17 +164,17 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req) | @@ -163,17 +164,17 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req) | ||
| 163 | 164 | ||
| 164 | int client_id = _srs_context->get_id(); | 165 | int client_id = _srs_context->get_id(); |
| 165 | 166 | ||
| 166 | - std::stringstream ss; | ||
| 167 | - ss << SRS_JOBJECT_START | ||
| 168 | - << SRS_JFIELD_STR("action", "on_unpublish") << SRS_JFIELD_CONT | ||
| 169 | - << SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT | ||
| 170 | - << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT | ||
| 171 | - << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT | ||
| 172 | - << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT | ||
| 173 | - << SRS_JFIELD_STR("stream", req->stream) | ||
| 174 | - << SRS_JOBJECT_END; | ||
| 175 | - | ||
| 176 | - std::string data = ss.str(); | 167 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 168 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 169 | + | ||
| 170 | + obj->set("action", SrsAmf0Any::str("on_unpublish")); | ||
| 171 | + obj->set("client_id", SrsAmf0Any::number(client_id)); | ||
| 172 | + obj->set("ip", SrsAmf0Any::str(req->ip.c_str())); | ||
| 173 | + obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str())); | ||
| 174 | + obj->set("app", SrsAmf0Any::str(req->app.c_str())); | ||
| 175 | + obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); | ||
| 176 | + | ||
| 177 | + std::string data = obj->to_json(); | ||
| 177 | std::string res; | 178 | std::string res; |
| 178 | int status_code; | 179 | int status_code; |
| 179 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { | 180 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { |
| @@ -196,18 +197,18 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req) | @@ -196,18 +197,18 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req) | ||
| 196 | 197 | ||
| 197 | int client_id = _srs_context->get_id(); | 198 | int client_id = _srs_context->get_id(); |
| 198 | 199 | ||
| 199 | - std::stringstream ss; | ||
| 200 | - ss << SRS_JOBJECT_START | ||
| 201 | - << SRS_JFIELD_STR("action", "on_play") << SRS_JFIELD_CONT | ||
| 202 | - << SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT | ||
| 203 | - << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT | ||
| 204 | - << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT | ||
| 205 | - << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT | ||
| 206 | - << SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT | ||
| 207 | - << SRS_JFIELD_STR("pageUrl", req->pageUrl) | ||
| 208 | - << SRS_JOBJECT_END; | ||
| 209 | - | ||
| 210 | - std::string data = ss.str(); | 200 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 201 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 202 | + | ||
| 203 | + obj->set("action", SrsAmf0Any::str("on_play")); | ||
| 204 | + obj->set("client_id", SrsAmf0Any::number(client_id)); | ||
| 205 | + obj->set("ip", SrsAmf0Any::str(req->ip.c_str())); | ||
| 206 | + obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str())); | ||
| 207 | + obj->set("app", SrsAmf0Any::str(req->app.c_str())); | ||
| 208 | + obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); | ||
| 209 | + obj->set("pageUrl", SrsAmf0Any::str(req->pageUrl.c_str())); | ||
| 210 | + | ||
| 211 | + std::string data = obj->to_json(); | ||
| 211 | std::string res; | 212 | std::string res; |
| 212 | int status_code; | 213 | int status_code; |
| 213 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { | 214 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { |
| @@ -230,17 +231,17 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req) | @@ -230,17 +231,17 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req) | ||
| 230 | 231 | ||
| 231 | int client_id = _srs_context->get_id(); | 232 | int client_id = _srs_context->get_id(); |
| 232 | 233 | ||
| 233 | - std::stringstream ss; | ||
| 234 | - ss << SRS_JOBJECT_START | ||
| 235 | - << SRS_JFIELD_STR("action", "on_stop") << SRS_JFIELD_CONT | ||
| 236 | - << SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT | ||
| 237 | - << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT | ||
| 238 | - << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT | ||
| 239 | - << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT | ||
| 240 | - << SRS_JFIELD_STR("stream", req->stream) | ||
| 241 | - << SRS_JOBJECT_END; | ||
| 242 | - | ||
| 243 | - std::string data = ss.str(); | 234 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 235 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 236 | + | ||
| 237 | + obj->set("action", SrsAmf0Any::str("on_stop")); | ||
| 238 | + obj->set("client_id", SrsAmf0Any::number(client_id)); | ||
| 239 | + obj->set("ip", SrsAmf0Any::str(req->ip.c_str())); | ||
| 240 | + obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str())); | ||
| 241 | + obj->set("app", SrsAmf0Any::str(req->app.c_str())); | ||
| 242 | + obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); | ||
| 243 | + | ||
| 244 | + std::string data = obj->to_json(); | ||
| 244 | std::string res; | 245 | std::string res; |
| 245 | int status_code; | 246 | int status_code; |
| 246 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { | 247 | 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) | @@ -264,19 +265,19 @@ int SrsHttpHooks::on_dvr(string url, SrsRequest* req, string file) | ||
| 264 | int client_id = _srs_context->get_id(); | 265 | int client_id = _srs_context->get_id(); |
| 265 | std::string cwd = _srs_config->cwd(); | 266 | std::string cwd = _srs_config->cwd(); |
| 266 | 267 | ||
| 267 | - std::stringstream ss; | ||
| 268 | - ss << SRS_JOBJECT_START | ||
| 269 | - << SRS_JFIELD_STR("action", "on_dvr") << SRS_JFIELD_CONT | ||
| 270 | - << SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT | ||
| 271 | - << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT | ||
| 272 | - << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT | ||
| 273 | - << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT | ||
| 274 | - << SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT | ||
| 275 | - << SRS_JFIELD_STR("cwd", cwd) << SRS_JFIELD_CONT | ||
| 276 | - << SRS_JFIELD_STR("file", file) | ||
| 277 | - << SRS_JOBJECT_END; | ||
| 278 | - | ||
| 279 | - std::string data = ss.str(); | 268 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 269 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 270 | + | ||
| 271 | + obj->set("action", SrsAmf0Any::str("on_dvr")); | ||
| 272 | + obj->set("client_id", SrsAmf0Any::number(client_id)); | ||
| 273 | + obj->set("ip", SrsAmf0Any::str(req->ip.c_str())); | ||
| 274 | + obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str())); | ||
| 275 | + obj->set("app", SrsAmf0Any::str(req->app.c_str())); | ||
| 276 | + obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); | ||
| 277 | + obj->set("cwd", SrsAmf0Any::str(cwd.c_str())); | ||
| 278 | + obj->set("file", SrsAmf0Any::str(file.c_str())); | ||
| 279 | + | ||
| 280 | + std::string data = obj->to_json(); | ||
| 280 | std::string res; | 281 | std::string res; |
| 281 | int status_code; | 282 | int status_code; |
| 282 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { | 283 | 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 | @@ -300,24 +301,24 @@ int SrsHttpHooks::on_hls(string url, SrsRequest* req, string file, string ts_url | ||
| 300 | int client_id = _srs_context->get_id(); | 301 | int client_id = _srs_context->get_id(); |
| 301 | std::string cwd = _srs_config->cwd(); | 302 | std::string cwd = _srs_config->cwd(); |
| 302 | 303 | ||
| 303 | - std::stringstream ss; | ||
| 304 | - ss << SRS_JOBJECT_START | ||
| 305 | - << SRS_JFIELD_STR("action", "on_hls") << SRS_JFIELD_CONT | ||
| 306 | - << SRS_JFIELD_ORG("client_id", client_id) << SRS_JFIELD_CONT | ||
| 307 | - << SRS_JFIELD_STR("ip", req->ip) << SRS_JFIELD_CONT | ||
| 308 | - << SRS_JFIELD_STR("vhost", req->vhost) << SRS_JFIELD_CONT | ||
| 309 | - << SRS_JFIELD_STR("app", req->app) << SRS_JFIELD_CONT | ||
| 310 | - << SRS_JFIELD_STR("stream", req->stream) << SRS_JFIELD_CONT | ||
| 311 | - << SRS_JFIELD_ORG("duration", duration) << SRS_JFIELD_CONT | ||
| 312 | - << SRS_JFIELD_STR("cwd", cwd) << SRS_JFIELD_CONT | ||
| 313 | - << SRS_JFIELD_STR("file", file) << SRS_JFIELD_CONT | ||
| 314 | - << SRS_JFIELD_STR("url", ts_url) << SRS_JFIELD_CONT | ||
| 315 | - << SRS_JFIELD_STR("m3u8", m3u8) << SRS_JFIELD_CONT | ||
| 316 | - << SRS_JFIELD_STR("m3u8_url", m3u8_url) << SRS_JFIELD_CONT | ||
| 317 | - << SRS_JFIELD_ORG("seq_no", sn) | ||
| 318 | - << SRS_JOBJECT_END; | ||
| 319 | - | ||
| 320 | - std::string data = ss.str(); | 304 | + SrsAmf0Object* obj = SrsAmf0Any::object(); |
| 305 | + SrsAutoFree(SrsAmf0Object, obj); | ||
| 306 | + | ||
| 307 | + obj->set("action", SrsAmf0Any::str("on_hls")); | ||
| 308 | + obj->set("client_id", SrsAmf0Any::number(client_id)); | ||
| 309 | + obj->set("ip", SrsAmf0Any::str(req->ip.c_str())); | ||
| 310 | + obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str())); | ||
| 311 | + obj->set("app", SrsAmf0Any::str(req->app.c_str())); | ||
| 312 | + obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); | ||
| 313 | + obj->set("duration", SrsAmf0Any::number(duration)); | ||
| 314 | + obj->set("cwd", SrsAmf0Any::str(cwd.c_str())); | ||
| 315 | + obj->set("file", SrsAmf0Any::str(file.c_str())); | ||
| 316 | + obj->set("url", SrsAmf0Any::str(url.c_str())); | ||
| 317 | + obj->set("m3u8", SrsAmf0Any::str(m3u8.c_str())); | ||
| 318 | + obj->set("m3u8_url", SrsAmf0Any::str(m3u8_url.c_str())); | ||
| 319 | + obj->set("seq_no", SrsAmf0Any::number(sn)); | ||
| 320 | + | ||
| 321 | + std::string data = obj->to_json(); | ||
| 321 | std::string res; | 322 | std::string res; |
| 322 | int status_code; | 323 | int status_code; |
| 323 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { | 324 | if ((ret = do_post(url, data, status_code, res)) != ERROR_SUCCESS) { |
| @@ -45,6 +45,7 @@ using namespace std; | @@ -45,6 +45,7 @@ using namespace std; | ||
| 45 | #include <srs_protocol_kbps.hpp> | 45 | #include <srs_protocol_kbps.hpp> |
| 46 | #include <srs_protocol_json.hpp> | 46 | #include <srs_protocol_json.hpp> |
| 47 | #include <srs_kernel_stream.hpp> | 47 | #include <srs_kernel_stream.hpp> |
| 48 | +#include <srs_rtmp_amf0.hpp> | ||
| 48 | 49 | ||
| 49 | // the longest time to wait for a process to quit. | 50 | // the longest time to wait for a process to quit. |
| 50 | #define SRS_PROCESS_QUIT_TIMEOUT_MS 1000 | 51 | #define SRS_PROCESS_QUIT_TIMEOUT_MS 1000 |
| @@ -1354,7 +1355,7 @@ string srs_get_peer_ip(int fd) | @@ -1354,7 +1355,7 @@ string srs_get_peer_ip(int fd) | ||
| 1354 | return ip; | 1355 | return ip; |
| 1355 | } | 1356 | } |
| 1356 | 1357 | ||
| 1357 | -void srs_api_dump_summaries(std::stringstream& ss) | 1358 | +void srs_api_dump_summaries(SrsAmf0Object* obj) |
| 1358 | { | 1359 | { |
| 1359 | SrsRusage* r = srs_get_system_rusage(); | 1360 | SrsRusage* r = srs_get_system_rusage(); |
| 1360 | SrsProcSelfStat* u = srs_get_self_proc_stat(); | 1361 | SrsProcSelfStat* u = srs_get_self_proc_stat(); |
| @@ -1407,57 +1408,61 @@ void srs_api_dump_summaries(std::stringstream& ss) | @@ -1407,57 +1408,61 @@ void srs_api_dump_summaries(std::stringstream& ss) | ||
| 1407 | bool ok = (r->ok && u->ok && s->ok && c->ok | 1408 | bool ok = (r->ok && u->ok && s->ok && c->ok |
| 1408 | && d->ok && m->ok && p->ok && nrs->ok); | 1409 | && d->ok && m->ok && p->ok && nrs->ok); |
| 1409 | 1410 | ||
| 1410 | - ss << SRS_JOBJECT_START | ||
| 1411 | - << SRS_JFIELD_ERROR(ERROR_SUCCESS) << SRS_JFIELD_CONT | ||
| 1412 | - << SRS_JFIELD_ORG("data", SRS_JOBJECT_START) | ||
| 1413 | - << SRS_JFIELD_ORG("ok", (ok? "true":"false")) << SRS_JFIELD_CONT | ||
| 1414 | - << SRS_JFIELD_ORG("now_ms", now) << SRS_JFIELD_CONT | ||
| 1415 | - << SRS_JFIELD_ORG("self", SRS_JOBJECT_START) | ||
| 1416 | - << SRS_JFIELD_STR("version", RTMP_SIG_SRS_VERSION) << SRS_JFIELD_CONT | ||
| 1417 | - << SRS_JFIELD_ORG("pid", getpid()) << SRS_JFIELD_CONT | ||
| 1418 | - << SRS_JFIELD_ORG("ppid", u->ppid) << SRS_JFIELD_CONT | ||
| 1419 | - << SRS_JFIELD_STR("argv", _srs_config->argv()) << SRS_JFIELD_CONT | ||
| 1420 | - << SRS_JFIELD_STR("cwd", _srs_config->cwd()) << SRS_JFIELD_CONT | ||
| 1421 | - << SRS_JFIELD_ORG("mem_kbyte", r->r.ru_maxrss) << SRS_JFIELD_CONT | ||
| 1422 | - << SRS_JFIELD_ORG("mem_percent", self_mem_percent) << SRS_JFIELD_CONT | ||
| 1423 | - << SRS_JFIELD_ORG("cpu_percent", u->percent) << SRS_JFIELD_CONT | ||
| 1424 | - << SRS_JFIELD_ORG("srs_uptime", srs_uptime) | ||
| 1425 | - << SRS_JOBJECT_END << SRS_JFIELD_CONT | ||
| 1426 | - << SRS_JFIELD_ORG("system", SRS_JOBJECT_START) | ||
| 1427 | - << SRS_JFIELD_ORG("cpu_percent", s->percent) << SRS_JFIELD_CONT | ||
| 1428 | - << SRS_JFIELD_ORG("disk_read_KBps", d->in_KBps) << SRS_JFIELD_CONT | ||
| 1429 | - << SRS_JFIELD_ORG("disk_write_KBps", d->out_KBps) << SRS_JFIELD_CONT | ||
| 1430 | - << SRS_JFIELD_ORG("disk_busy_percent", d->busy) << SRS_JFIELD_CONT | ||
| 1431 | - << SRS_JFIELD_ORG("mem_ram_kbyte", m->MemTotal) << SRS_JFIELD_CONT | ||
| 1432 | - << SRS_JFIELD_ORG("mem_ram_percent", m->percent_ram) << SRS_JFIELD_CONT | ||
| 1433 | - << SRS_JFIELD_ORG("mem_swap_kbyte", m->SwapTotal) << SRS_JFIELD_CONT | ||
| 1434 | - << SRS_JFIELD_ORG("mem_swap_percent", m->percent_swap) << SRS_JFIELD_CONT | ||
| 1435 | - << SRS_JFIELD_ORG("cpus", c->nb_processors) << SRS_JFIELD_CONT | ||
| 1436 | - << SRS_JFIELD_ORG("cpus_online", c->nb_processors_online) << SRS_JFIELD_CONT | ||
| 1437 | - << SRS_JFIELD_ORG("uptime", p->os_uptime) << SRS_JFIELD_CONT | ||
| 1438 | - << SRS_JFIELD_ORG("ilde_time", p->os_ilde_time) << SRS_JFIELD_CONT | ||
| 1439 | - << SRS_JFIELD_ORG("load_1m", p->load_one_minutes) << SRS_JFIELD_CONT | ||
| 1440 | - << SRS_JFIELD_ORG("load_5m", p->load_five_minutes) << SRS_JFIELD_CONT | ||
| 1441 | - << SRS_JFIELD_ORG("load_15m", p->load_fifteen_minutes) << SRS_JFIELD_CONT | 1411 | + SrsAmf0Object* data = SrsAmf0Any::object(); |
| 1412 | + obj->set("data", data); | ||
| 1413 | + | ||
| 1414 | + data->set("ok", SrsAmf0Any::boolean(ok)); | ||
| 1415 | + data->set("now_ms", SrsAmf0Any::number(now)); | ||
| 1416 | + | ||
| 1417 | + // self | ||
| 1418 | + SrsAmf0Object* self = SrsAmf0Any::object(); | ||
| 1419 | + data->set("self", self); | ||
| 1420 | + | ||
| 1421 | + self->set("version", SrsAmf0Any::str(RTMP_SIG_SRS_VERSION)); | ||
| 1422 | + self->set("pid", SrsAmf0Any::number(getpid())); | ||
| 1423 | + self->set("ppid", SrsAmf0Any::number(u->ppid)); | ||
| 1424 | + self->set("argv", SrsAmf0Any::str(_srs_config->argv().c_str())); | ||
| 1425 | + self->set("cwd", SrsAmf0Any::str(_srs_config->cwd().c_str())); | ||
| 1426 | + self->set("mem_kbyte", SrsAmf0Any::number(r->r.ru_maxrss)); | ||
| 1427 | + self->set("mem_percent", SrsAmf0Any::number(self_mem_percent)); | ||
| 1428 | + self->set("cpu_percent", SrsAmf0Any::number(u->percent)); | ||
| 1429 | + self->set("srs_uptime", SrsAmf0Any::number(srs_uptime)); | ||
| 1430 | + | ||
| 1431 | + // system | ||
| 1432 | + SrsAmf0Object* sys = SrsAmf0Any::object(); | ||
| 1433 | + data->set("system", sys); | ||
| 1434 | + | ||
| 1435 | + sys->set("cpu_percent", SrsAmf0Any::number(s->percent)); | ||
| 1436 | + sys->set("disk_read_KBps", SrsAmf0Any::number(d->in_KBps)); | ||
| 1437 | + sys->set("disk_write_KBps", SrsAmf0Any::number(d->out_KBps)); | ||
| 1438 | + sys->set("disk_busy_percent", SrsAmf0Any::number(d->busy)); | ||
| 1439 | + sys->set("mem_ram_kbyte", SrsAmf0Any::number(m->MemTotal)); | ||
| 1440 | + sys->set("mem_ram_percent", SrsAmf0Any::number(m->percent_ram)); | ||
| 1441 | + sys->set("mem_swap_kbyte", SrsAmf0Any::number(m->SwapTotal)); | ||
| 1442 | + sys->set("mem_swap_percent", SrsAmf0Any::number(m->percent_swap)); | ||
| 1443 | + sys->set("cpus", SrsAmf0Any::number(c->nb_processors)); | ||
| 1444 | + sys->set("cpus_online", SrsAmf0Any::number(c->nb_processors_online)); | ||
| 1445 | + sys->set("uptime", SrsAmf0Any::number(p->os_uptime)); | ||
| 1446 | + sys->set("ilde_time", SrsAmf0Any::number(p->os_ilde_time)); | ||
| 1447 | + sys->set("load_1m", SrsAmf0Any::number(p->load_one_minutes)); | ||
| 1448 | + sys->set("load_5m", SrsAmf0Any::number(p->load_five_minutes)); | ||
| 1449 | + sys->set("load_15m", SrsAmf0Any::number(p->load_fifteen_minutes)); | ||
| 1442 | // system network bytes stat. | 1450 | // system network bytes stat. |
| 1443 | - << SRS_JFIELD_ORG("net_sample_time", n_sample_time) << SRS_JFIELD_CONT | 1451 | + sys->set("net_sample_time", SrsAmf0Any::number(n_sample_time)); |
| 1444 | // internet public address network device bytes. | 1452 | // internet public address network device bytes. |
| 1445 | - << SRS_JFIELD_ORG("net_recv_bytes", nr_bytes) << SRS_JFIELD_CONT | ||
| 1446 | - << SRS_JFIELD_ORG("net_send_bytes", ns_bytes) << SRS_JFIELD_CONT | 1453 | + sys->set("net_recv_bytes", SrsAmf0Any::number(nr_bytes)); |
| 1454 | + sys->set("net_send_bytes", SrsAmf0Any::number(ns_bytes)); | ||
| 1447 | // intranet private address network device bytes. | 1455 | // intranet private address network device bytes. |
| 1448 | - << SRS_JFIELD_ORG("net_recvi_bytes", nri_bytes) << SRS_JFIELD_CONT | ||
| 1449 | - << SRS_JFIELD_ORG("net_sendi_bytes", nsi_bytes) << SRS_JFIELD_CONT | 1456 | + sys->set("net_recvi_bytes", SrsAmf0Any::number(nri_bytes)); |
| 1457 | + sys->set("net_sendi_bytes", SrsAmf0Any::number(nsi_bytes)); | ||
| 1450 | // srs network bytes stat. | 1458 | // srs network bytes stat. |
| 1451 | - << SRS_JFIELD_ORG("srs_sample_time", nrs->sample_time) << SRS_JFIELD_CONT | ||
| 1452 | - << SRS_JFIELD_ORG("srs_recv_bytes", nrs->rbytes) << SRS_JFIELD_CONT | ||
| 1453 | - << SRS_JFIELD_ORG("srs_send_bytes", nrs->sbytes) << SRS_JFIELD_CONT | ||
| 1454 | - << SRS_JFIELD_ORG("conn_sys", nrs->nb_conn_sys) << SRS_JFIELD_CONT | ||
| 1455 | - << SRS_JFIELD_ORG("conn_sys_et", nrs->nb_conn_sys_et) << SRS_JFIELD_CONT | ||
| 1456 | - << SRS_JFIELD_ORG("conn_sys_tw", nrs->nb_conn_sys_tw) << SRS_JFIELD_CONT | ||
| 1457 | - << SRS_JFIELD_ORG("conn_sys_udp", nrs->nb_conn_sys_udp) << SRS_JFIELD_CONT | ||
| 1458 | - << SRS_JFIELD_ORG("conn_srs", nrs->nb_conn_srs) | ||
| 1459 | - << SRS_JOBJECT_END | ||
| 1460 | - << SRS_JOBJECT_END | ||
| 1461 | - << SRS_JOBJECT_END; | 1459 | + sys->set("srs_sample_time", SrsAmf0Any::number(nrs->sample_time)); |
| 1460 | + sys->set("srs_recv_bytes", SrsAmf0Any::number(nrs->rbytes)); | ||
| 1461 | + sys->set("srs_send_bytes", SrsAmf0Any::number(nrs->sbytes)); | ||
| 1462 | + sys->set("conn_sys", SrsAmf0Any::number(nrs->nb_conn_sys)); | ||
| 1463 | + sys->set("conn_sys_et", SrsAmf0Any::number(nrs->nb_conn_sys_et)); | ||
| 1464 | + sys->set("conn_sys_tw", SrsAmf0Any::number(nrs->nb_conn_sys_tw)); | ||
| 1465 | + sys->set("conn_sys_udp", SrsAmf0Any::number(nrs->nb_conn_sys_udp)); | ||
| 1466 | + sys->set("conn_srs", SrsAmf0Any::number(nrs->nb_conn_srs)); | ||
| 1462 | } | 1467 | } |
| 1463 | 1468 |
| @@ -41,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -41,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 41 | 41 | ||
| 42 | class SrsKbps; | 42 | class SrsKbps; |
| 43 | class SrsStream; | 43 | class SrsStream; |
| 44 | +class SrsAmf0Object; | ||
| 44 | 45 | ||
| 45 | // client open socket and connect to server. | 46 | // client open socket and connect to server. |
| 46 | extern int srs_socket_connect(std::string server, int port, int64_t timeout, st_netfd_t* pstfd); | 47 | 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); | @@ -669,7 +670,7 @@ extern int srs_get_local_port(int fd); | ||
| 669 | extern std::string srs_get_peer_ip(int fd); | 670 | extern std::string srs_get_peer_ip(int fd); |
| 670 | 671 | ||
| 671 | // dump summaries for /api/v1/summaries. | 672 | // dump summaries for /api/v1/summaries. |
| 672 | -extern void srs_api_dump_summaries(std::stringstream& ss); | 673 | +extern void srs_api_dump_summaries(SrsAmf0Object* obj); |
| 673 | 674 | ||
| 674 | #endif | 675 | #endif |
| 675 | 676 |
| @@ -174,56 +174,6 @@ public: | @@ -174,56 +174,6 @@ public: | ||
| 174 | //////////////////////////////////////////////////////////////////////// | 174 | //////////////////////////////////////////////////////////////////////// |
| 175 | //////////////////////////////////////////////////////////////////////// | 175 | //////////////////////////////////////////////////////////////////////// |
| 176 | //////////////////////////////////////////////////////////////////////// | 176 | //////////////////////////////////////////////////////////////////////// |
| 177 | -/* json encode | ||
| 178 | - cout<< SRS_JOBJECT_START | ||
| 179 | - << SRS_JFIELD_STR("name", "srs") << SRS_JFIELD_CONT | ||
| 180 | - << SRS_JFIELD_ORG("version", 100) << SRS_JFIELD_CONT | ||
| 181 | - << SRS_JFIELD_NAME("features") << SRS_JOBJECT_START | ||
| 182 | - << SRS_JFIELD_STR("rtmp", "released") << SRS_JFIELD_CONT | ||
| 183 | - << SRS_JFIELD_STR("hls", "released") << SRS_JFIELD_CONT | ||
| 184 | - << SRS_JFIELD_STR("dash", "plan") | ||
| 185 | - << SRS_JOBJECT_END << SRS_JFIELD_CONT | ||
| 186 | - << SRS_JFIELD_STR("author", "srs team") | ||
| 187 | - << SRS_JOBJECT_END | ||
| 188 | -it's: | ||
| 189 | - cont<< "{" | ||
| 190 | - << "name:" << "srs" << "," | ||
| 191 | - << "version:" << 100 << "," | ||
| 192 | - << "features:" << "{" | ||
| 193 | - << "rtmp:" << "released" << "," | ||
| 194 | - << "hls:" << "released" << "," | ||
| 195 | - << "dash:" << "plan" | ||
| 196 | - << "}" << "," | ||
| 197 | - << "author:" << "srs team" | ||
| 198 | - << "}" | ||
| 199 | -that is: | ||
| 200 | - """ | ||
| 201 | - { | ||
| 202 | - "name": "srs", | ||
| 203 | - "version": 100, | ||
| 204 | - "features": { | ||
| 205 | - "rtmp": "released", | ||
| 206 | - "hls": "released", | ||
| 207 | - "dash": "plan" | ||
| 208 | - }, | ||
| 209 | - "author": "srs team" | ||
| 210 | - } | ||
| 211 | - """ | ||
| 212 | -*/ | ||
| 213 | -//////////////////////////////////////////////////////////////////////// | ||
| 214 | -//////////////////////////////////////////////////////////////////////// | ||
| 215 | -//////////////////////////////////////////////////////////////////////// | ||
| 216 | -#define SRS_JOBJECT_START "{" | ||
| 217 | -#define SRS_JFIELD_NAME(k) "\"" << k << "\":" | ||
| 218 | -#define SRS_JFIELD_OBJ(k) SRS_JFIELD_NAME(k) << SRS_JOBJECT_START | ||
| 219 | -#define SRS_JFIELD_STR(k, v) SRS_JFIELD_NAME(k) << "\"" << v << "\"" | ||
| 220 | -#define SRS_JFIELD_ORG(k, v) SRS_JFIELD_NAME(k) << std::dec << v | ||
| 221 | -#define SRS_JFIELD_BOOL(k, v) SRS_JFIELD_ORG(k, (v? "true":"false")) | ||
| 222 | -#define SRS_JFIELD_NULL(k) SRS_JFIELD_NAME(k) << "null" | ||
| 223 | -#define SRS_JFIELD_ERROR(ret) "\"" << "code" << "\":" << ret | ||
| 224 | -#define SRS_JFIELD_CONT "," | ||
| 225 | -#define SRS_JOBJECT_END "}" | ||
| 226 | -#define SRS_JARRAY_START "[" | ||
| 227 | -#define SRS_JARRAY_END "]" | 177 | +// json encode, please use AMF0.to_json() to encode json object. |
| 228 | 178 | ||
| 229 | #endif | 179 | #endif |
| @@ -35,6 +35,55 @@ using namespace std; | @@ -35,6 +35,55 @@ using namespace std; | ||
| 35 | 35 | ||
| 36 | using namespace _srs_internal; | 36 | using namespace _srs_internal; |
| 37 | 37 | ||
| 38 | +/* json encode | ||
| 39 | + cout<< SRS_JOBJECT_START | ||
| 40 | + << SRS_JFIELD_STR("name", "srs") << SRS_JFIELD_CONT | ||
| 41 | + << SRS_JFIELD_ORG("version", 100) << SRS_JFIELD_CONT | ||
| 42 | + << SRS_JFIELD_NAME("features") << SRS_JOBJECT_START | ||
| 43 | + << SRS_JFIELD_STR("rtmp", "released") << SRS_JFIELD_CONT | ||
| 44 | + << SRS_JFIELD_STR("hls", "released") << SRS_JFIELD_CONT | ||
| 45 | + << SRS_JFIELD_STR("dash", "plan") | ||
| 46 | + << SRS_JOBJECT_END << SRS_JFIELD_CONT | ||
| 47 | + << SRS_JFIELD_STR("author", "srs team") | ||
| 48 | + << SRS_JOBJECT_END | ||
| 49 | + it's: | ||
| 50 | + cont<< "{" | ||
| 51 | + << "name:" << "srs" << "," | ||
| 52 | + << "version:" << 100 << "," | ||
| 53 | + << "features:" << "{" | ||
| 54 | + << "rtmp:" << "released" << "," | ||
| 55 | + << "hls:" << "released" << "," | ||
| 56 | + << "dash:" << "plan" | ||
| 57 | + << "}" << "," | ||
| 58 | + << "author:" << "srs team" | ||
| 59 | + << "}" | ||
| 60 | + that is: | ||
| 61 | + """ | ||
| 62 | + { | ||
| 63 | + "name": "srs", | ||
| 64 | + "version": 100, | ||
| 65 | + "features": { | ||
| 66 | + "rtmp": "released", | ||
| 67 | + "hls": "released", | ||
| 68 | + "dash": "plan" | ||
| 69 | + }, | ||
| 70 | + "author": "srs team" | ||
| 71 | + } | ||
| 72 | + """ | ||
| 73 | + */ | ||
| 74 | +#define SRS_JOBJECT_START "{" | ||
| 75 | +#define SRS_JFIELD_NAME(k) "\"" << k << "\":" | ||
| 76 | +#define SRS_JFIELD_OBJ(k) SRS_JFIELD_NAME(k) << SRS_JOBJECT_START | ||
| 77 | +#define SRS_JFIELD_STR(k, v) SRS_JFIELD_NAME(k) << "\"" << v << "\"" | ||
| 78 | +#define SRS_JFIELD_ORG(k, v) SRS_JFIELD_NAME(k) << std::dec << v | ||
| 79 | +#define SRS_JFIELD_BOOL(k, v) SRS_JFIELD_ORG(k, (v? "true":"false")) | ||
| 80 | +#define SRS_JFIELD_NULL(k) SRS_JFIELD_NAME(k) << "null" | ||
| 81 | +#define SRS_JFIELD_ERROR(ret) "\"" << "code" << "\":" << ret | ||
| 82 | +#define SRS_JFIELD_CONT "," | ||
| 83 | +#define SRS_JOBJECT_END "}" | ||
| 84 | +#define SRS_JARRAY_START "[" | ||
| 85 | +#define SRS_JARRAY_END "]" | ||
| 86 | + | ||
| 38 | // AMF0 marker | 87 | // AMF0 marker |
| 39 | #define RTMP_AMF0_Number 0x00 | 88 | #define RTMP_AMF0_Number 0x00 |
| 40 | #define RTMP_AMF0_Boolean 0x01 | 89 | #define RTMP_AMF0_Boolean 0x01 |
-
请 注册 或 登录 后发表评论