winlin

json objects support dumps to string.

@@ -344,6 +344,7 @@ Remark: @@ -344,6 +344,7 @@ Remark:
344 344
345 ## History 345 ## History
346 346
  347 +* v3.0, 2015-09-19, json objects support dumps to string.
347 * v3.0, 2015-09-14, fix [#459][bug #459], support dvr raw api. 3.0.4 348 * v3.0, 2015-09-14, fix [#459][bug #459], support dvr raw api. 3.0.4
348 * v3.0, 2015-09-14, fix [#459][bug #459], dvr support apply filter for ng-control dvr module. 349 * v3.0, 2015-09-14, fix [#459][bug #459], dvr support apply filter for ng-control dvr module.
349 * v3.0, 2015-09-14, fix [#319][bug #319], http raw api support update global and vhost. 3.0.3 350 * v3.0, 2015-09-14, fix [#319][bug #319], http raw api support update global and vhost. 3.0.3
@@ -75,7 +75,7 @@ using namespace _srs_internal; @@ -75,7 +75,7 @@ using namespace _srs_internal;
75 * @param dir the transcode or ingest config directive. 75 * @param dir the transcode or ingest config directive.
76 * @param engine the amf0 object to dumps to. 76 * @param engine the amf0 object to dumps to.
77 */ 77 */
78 -int srs_config_dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine); 78 +int srs_config_dumps_engine(SrsConfDirective* dir, SrsJsonObject* engine);
79 79
80 /** 80 /**
81 * whether the two vector actual equals, for instance, 81 * whether the two vector actual equals, for instance,
@@ -511,21 +511,21 @@ int srs_config_transform_vhost(SrsConfDirective* root) @@ -511,21 +511,21 @@ int srs_config_transform_vhost(SrsConfDirective* root)
511 return ret; 511 return ret;
512 } 512 }
513 513
514 -int srs_config_dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine) 514 +int srs_config_dumps_engine(SrsConfDirective* dir, SrsJsonObject* engine)
515 { 515 {
516 int ret = ERROR_SUCCESS; 516 int ret = ERROR_SUCCESS;
517 517
518 SrsConfDirective* conf = NULL; 518 SrsConfDirective* conf = NULL;
519 519
520 engine->set("id", dir->dumps_arg0_to_str()); 520 engine->set("id", dir->dumps_arg0_to_str());
521 - engine->set("enabled", SrsAmf0Any::boolean(_srs_config->get_engine_enabled(dir))); 521 + engine->set("enabled", SrsJsonAny::boolean(_srs_config->get_engine_enabled(dir)));
522 522
523 if ((conf = dir->get("iformat")) != NULL) { 523 if ((conf = dir->get("iformat")) != NULL) {
524 engine->set("iformat", conf->dumps_arg0_to_str()); 524 engine->set("iformat", conf->dumps_arg0_to_str());
525 } 525 }
526 526
527 if ((conf = dir->get("vfilter")) != NULL) { 527 if ((conf = dir->get("vfilter")) != NULL) {
528 - SrsAmf0Object* vfilter = SrsAmf0Any::object(); 528 + SrsJsonObject* vfilter = SrsJsonAny::object();
529 engine->set("vfilter", vfilter); 529 engine->set("vfilter", vfilter);
530 530
531 for (int i = 0; i < (int)conf->directives.size(); i++) { 531 for (int i = 0; i < (int)conf->directives.size(); i++) {
@@ -567,7 +567,7 @@ int srs_config_dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine) @@ -567,7 +567,7 @@ int srs_config_dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine)
567 } 567 }
568 568
569 if ((conf = dir->get("vparams")) != NULL) { 569 if ((conf = dir->get("vparams")) != NULL) {
570 - SrsAmf0Object* vparams = SrsAmf0Any::object(); 570 + SrsJsonObject* vparams = SrsJsonAny::object();
571 engine->set("vparams", vparams); 571 engine->set("vparams", vparams);
572 572
573 for (int i = 0; i < (int)conf->directives.size(); i++) { 573 for (int i = 0; i < (int)conf->directives.size(); i++) {
@@ -593,7 +593,7 @@ int srs_config_dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine) @@ -593,7 +593,7 @@ int srs_config_dumps_engine(SrsConfDirective* dir, SrsAmf0Object* engine)
593 } 593 }
594 594
595 if ((conf = dir->get("aparams")) != NULL) { 595 if ((conf = dir->get("aparams")) != NULL) {
596 - SrsAmf0Object* aparams = SrsAmf0Any::object(); 596 + SrsJsonObject* aparams = SrsJsonAny::object();
597 engine->set("aparams", aparams); 597 engine->set("aparams", aparams);
598 598
599 for (int i = 0; i < (int)conf->directives.size(); i++) { 599 for (int i = 0; i < (int)conf->directives.size(); i++) {
@@ -868,29 +868,29 @@ int SrsConfDirective::persistence(SrsFileWriter* writer, int level) @@ -868,29 +868,29 @@ int SrsConfDirective::persistence(SrsFileWriter* writer, int level)
868 return ret; 868 return ret;
869 } 869 }
870 870
871 -SrsAmf0StrictArray* SrsConfDirective::dumps_args() 871 +SrsJsonArray* SrsConfDirective::dumps_args()
872 { 872 {
873 - SrsAmf0StrictArray* arr = SrsAmf0Any::strict_array(); 873 + SrsJsonArray* arr = SrsJsonAny::array();
874 for (int i = 0; i < (int)args.size(); i++) { 874 for (int i = 0; i < (int)args.size(); i++) {
875 string arg = args.at(i); 875 string arg = args.at(i);
876 - arr->append(SrsAmf0Any::str(arg.c_str())); 876 + arr->append(SrsJsonAny::str(arg.c_str()));
877 } 877 }
878 return arr; 878 return arr;
879 } 879 }
880 880
881 -SrsAmf0Any* SrsConfDirective::dumps_arg0_to_str() 881 +SrsJsonAny* SrsConfDirective::dumps_arg0_to_str()
882 { 882 {
883 - return SrsAmf0Any::str(arg0().c_str()); 883 + return SrsJsonAny::str(arg0().c_str());
884 } 884 }
885 885
886 -SrsAmf0Any* SrsConfDirective::dumps_arg0_to_number() 886 +SrsJsonAny* SrsConfDirective::dumps_arg0_to_number()
887 { 887 {
888 - return SrsAmf0Any::number(::atof(arg0().c_str())); 888 + return SrsJsonAny::number(::atof(arg0().c_str()));
889 } 889 }
890 890
891 -SrsAmf0Any* SrsConfDirective::dumps_arg0_to_boolean() 891 +SrsJsonAny* SrsConfDirective::dumps_arg0_to_boolean()
892 { 892 {
893 - return SrsAmf0Any::boolean(arg0() == "on"); 893 + return SrsJsonAny::boolean(arg0() == "on");
894 } 894 }
895 895
896 // see: ngx_conf_parse 896 // see: ngx_conf_parse
@@ -1994,7 +1994,7 @@ int SrsConfig::persistence() @@ -1994,7 +1994,7 @@ int SrsConfig::persistence()
1994 return ret; 1994 return ret;
1995 } 1995 }
1996 1996
1997 -int SrsConfig::minimal_to_json(SrsAmf0Object* obj) 1997 +int SrsConfig::minimal_to_json(SrsJsonObject* obj)
1998 { 1998 {
1999 int ret = ERROR_SUCCESS; 1999 int ret = ERROR_SUCCESS;
2000 2000
@@ -2012,7 +2012,7 @@ int SrsConfig::minimal_to_json(SrsAmf0Object* obj) @@ -2012,7 +2012,7 @@ int SrsConfig::minimal_to_json(SrsAmf0Object* obj)
2012 return ret; 2012 return ret;
2013 } 2013 }
2014 2014
2015 -int SrsConfig::global_to_json(SrsAmf0Object* obj) 2015 +int SrsConfig::global_to_json(SrsJsonObject* obj)
2016 { 2016 {
2017 int ret = ERROR_SUCCESS; 2017 int ret = ERROR_SUCCESS;
2018 2018
@@ -2045,7 +2045,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2045,7 +2045,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2045 } else if (dir->name == "pithy_print_ms") { 2045 } else if (dir->name == "pithy_print_ms") {
2046 obj->set(dir->name, dir->dumps_arg0_to_number()); 2046 obj->set(dir->name, dir->dumps_arg0_to_number());
2047 } else if (dir->name == "heartbeat") { 2047 } else if (dir->name == "heartbeat") {
2048 - SrsAmf0Object* sobj = SrsAmf0Any::object(); 2048 + SrsJsonObject* sobj = SrsJsonAny::object();
2049 for (int j = 0; j < (int)dir->directives.size(); j++) { 2049 for (int j = 0; j < (int)dir->directives.size(); j++) {
2050 SrsConfDirective* sdir = dir->directives.at(j); 2050 SrsConfDirective* sdir = dir->directives.at(j);
2051 if (sdir->name == "enabled") { 2051 if (sdir->name == "enabled") {
@@ -2062,7 +2062,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2062,7 +2062,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2062 } 2062 }
2063 obj->set(dir->name, sobj); 2063 obj->set(dir->name, sobj);
2064 } else if (dir->name == "stats") { 2064 } else if (dir->name == "stats") {
2065 - SrsAmf0Object* sobj = SrsAmf0Any::object(); 2065 + SrsJsonObject* sobj = SrsJsonAny::object();
2066 for (int j = 0; j < (int)dir->directives.size(); j++) { 2066 for (int j = 0; j < (int)dir->directives.size(); j++) {
2067 SrsConfDirective* sdir = dir->directives.at(j); 2067 SrsConfDirective* sdir = dir->directives.at(j);
2068 if (sdir->name == "network") { 2068 if (sdir->name == "network") {
@@ -2073,7 +2073,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2073,7 +2073,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2073 } 2073 }
2074 obj->set(dir->name, sobj); 2074 obj->set(dir->name, sobj);
2075 } else if (dir->name == "http_api") { 2075 } else if (dir->name == "http_api") {
2076 - SrsAmf0Object* sobj = SrsAmf0Any::object(); 2076 + SrsJsonObject* sobj = SrsJsonAny::object();
2077 for (int j = 0; j < (int)dir->directives.size(); j++) { 2077 for (int j = 0; j < (int)dir->directives.size(); j++) {
2078 SrsConfDirective* sdir = dir->directives.at(j); 2078 SrsConfDirective* sdir = dir->directives.at(j);
2079 if (sdir->name == "enabled") { 2079 if (sdir->name == "enabled") {
@@ -2083,7 +2083,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2083,7 +2083,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2083 } else if (sdir->name == "crossdomain") { 2083 } else if (sdir->name == "crossdomain") {
2084 sobj->set(sdir->name, sdir->dumps_arg0_to_boolean()); 2084 sobj->set(sdir->name, sdir->dumps_arg0_to_boolean());
2085 } else if (sdir->name == "raw_api") { 2085 } else if (sdir->name == "raw_api") {
2086 - SrsAmf0Object* ssobj = SrsAmf0Any::object(); 2086 + SrsJsonObject* ssobj = SrsJsonAny::object();
2087 sobj->set(sdir->name, ssobj); 2087 sobj->set(sdir->name, ssobj);
2088 2088
2089 for (int j = 0; j < (int)sdir->directives.size(); j++) { 2089 for (int j = 0; j < (int)sdir->directives.size(); j++) {
@@ -2102,7 +2102,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2102,7 +2102,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2102 } 2102 }
2103 obj->set(dir->name, sobj); 2103 obj->set(dir->name, sobj);
2104 } else if (dir->name == "http_server") { 2104 } else if (dir->name == "http_server") {
2105 - SrsAmf0Object* sobj = SrsAmf0Any::object(); 2105 + SrsJsonObject* sobj = SrsJsonAny::object();
2106 for (int j = 0; j < (int)dir->directives.size(); j++) { 2106 for (int j = 0; j < (int)dir->directives.size(); j++) {
2107 SrsConfDirective* sdir = dir->directives.at(j); 2107 SrsConfDirective* sdir = dir->directives.at(j);
2108 if (sdir->name == "enabled") { 2108 if (sdir->name == "enabled") {
@@ -2115,7 +2115,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2115,7 +2115,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2115 } 2115 }
2116 obj->set(dir->name, sobj); 2116 obj->set(dir->name, sobj);
2117 } else if (dir->name == "stream_caster") { 2117 } else if (dir->name == "stream_caster") {
2118 - SrsAmf0Object* sobj = SrsAmf0Any::object(); 2118 + SrsJsonObject* sobj = SrsJsonAny::object();
2119 for (int j = 0; j < (int)dir->directives.size(); j++) { 2119 for (int j = 0; j < (int)dir->directives.size(); j++) {
2120 SrsConfDirective* sdir = dir->directives.at(j); 2120 SrsConfDirective* sdir = dir->directives.at(j);
2121 if (sdir->name == "enabled") { 2121 if (sdir->name == "enabled") {
@@ -2138,7 +2138,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2138,7 +2138,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2138 } 2138 }
2139 } 2139 }
2140 2140
2141 - SrsAmf0Object* sobjs = SrsAmf0Any::object(); 2141 + SrsJsonObject* sobjs = SrsJsonAny::object();
2142 int nb_vhosts = 0; 2142 int nb_vhosts = 0;
2143 2143
2144 SrsStatistic* stat = SrsStatistic::instance(); 2144 SrsStatistic* stat = SrsStatistic::instance();
@@ -2149,73 +2149,73 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2149,73 +2149,73 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2149 } 2149 }
2150 2150
2151 nb_vhosts++; 2151 nb_vhosts++;
2152 - SrsAmf0Object* sobj = SrsAmf0Any::object(); 2152 + SrsJsonObject* sobj = SrsJsonAny::object();
2153 sobjs->set(dir->arg0(), sobj); 2153 sobjs->set(dir->arg0(), sobj);
2154 2154
2155 SrsStatisticVhost* svhost = stat->find_vhost(dir->arg0()); 2155 SrsStatisticVhost* svhost = stat->find_vhost(dir->arg0());
2156 - sobj->set("id", SrsAmf0Any::number(svhost? (double)svhost->id : 0)); 2156 + sobj->set("id", SrsJsonAny::number(svhost? (double)svhost->id : 0));
2157 sobj->set("name", dir->dumps_arg0_to_str()); 2157 sobj->set("name", dir->dumps_arg0_to_str());
2158 - sobj->set("enabled", SrsAmf0Any::boolean(get_vhost_enabled(dir->arg0()))); 2158 + sobj->set("enabled", SrsJsonAny::boolean(get_vhost_enabled(dir->arg0())));
2159 2159
2160 if (get_dvr_enabled(dir->arg0())) { 2160 if (get_dvr_enabled(dir->arg0())) {
2161 - sobj->set("dvr", SrsAmf0Any::boolean(true)); 2161 + sobj->set("dvr", SrsJsonAny::boolean(true));
2162 } 2162 }
2163 if (get_vhost_http_enabled(dir->arg0())) { 2163 if (get_vhost_http_enabled(dir->arg0())) {
2164 - sobj->set("http_static", SrsAmf0Any::boolean(true)); 2164 + sobj->set("http_static", SrsJsonAny::boolean(true));
2165 } 2165 }
2166 if (get_vhost_http_remux_enabled(dir->arg0())) { 2166 if (get_vhost_http_remux_enabled(dir->arg0())) {
2167 - sobj->set("http_remux", SrsAmf0Any::boolean(true)); 2167 + sobj->set("http_remux", SrsJsonAny::boolean(true));
2168 } 2168 }
2169 if (get_hls_enabled(dir->arg0())) { 2169 if (get_hls_enabled(dir->arg0())) {
2170 - sobj->set("hls", SrsAmf0Any::boolean(true)); 2170 + sobj->set("hls", SrsJsonAny::boolean(true));
2171 } 2171 }
2172 if (get_hds_enabled(dir->arg0())) { 2172 if (get_hds_enabled(dir->arg0())) {
2173 - sobj->set("hds", SrsAmf0Any::boolean(true)); 2173 + sobj->set("hds", SrsJsonAny::boolean(true));
2174 } 2174 }
2175 if (get_vhost_http_hooks(dir->arg0())) { 2175 if (get_vhost_http_hooks(dir->arg0())) {
2176 - sobj->set("http_hooks", SrsAmf0Any::boolean(true)); 2176 + sobj->set("http_hooks", SrsJsonAny::boolean(true));
2177 } 2177 }
2178 if (get_exec_enabled(dir->arg0())) { 2178 if (get_exec_enabled(dir->arg0())) {
2179 - sobj->set("exec", SrsAmf0Any::boolean(true)); 2179 + sobj->set("exec", SrsJsonAny::boolean(true));
2180 } 2180 }
2181 if (get_bw_check_enabled(dir->arg0())) { 2181 if (get_bw_check_enabled(dir->arg0())) {
2182 - sobj->set("bandcheck", SrsAmf0Any::boolean(true)); 2182 + sobj->set("bandcheck", SrsJsonAny::boolean(true));
2183 } 2183 }
2184 if (!get_vhost_is_edge(dir->arg0())) { 2184 if (!get_vhost_is_edge(dir->arg0())) {
2185 - sobj->set("origin", SrsAmf0Any::boolean(true)); 2185 + sobj->set("origin", SrsJsonAny::boolean(true));
2186 } 2186 }
2187 if (get_forward_enabled(dir->arg0())) { 2187 if (get_forward_enabled(dir->arg0())) {
2188 - sobj->set("forward", SrsAmf0Any::boolean(true)); 2188 + sobj->set("forward", SrsJsonAny::boolean(true));
2189 } 2189 }
2190 2190
2191 if (get_security_enabled(dir->arg0())) { 2191 if (get_security_enabled(dir->arg0())) {
2192 - sobj->set("security", SrsAmf0Any::boolean(true)); 2192 + sobj->set("security", SrsJsonAny::boolean(true));
2193 } 2193 }
2194 if (get_refer_enabled(dir->arg0())) { 2194 if (get_refer_enabled(dir->arg0())) {
2195 - sobj->set("refer", SrsAmf0Any::boolean(true)); 2195 + sobj->set("refer", SrsJsonAny::boolean(true));
2196 } 2196 }
2197 2197
2198 if (get_mr_enabled(dir->arg0())) { 2198 if (get_mr_enabled(dir->arg0())) {
2199 - sobj->set("mr", SrsAmf0Any::boolean(true)); 2199 + sobj->set("mr", SrsJsonAny::boolean(true));
2200 } 2200 }
2201 if (get_realtime_enabled(dir->arg0())) { 2201 if (get_realtime_enabled(dir->arg0())) {
2202 - sobj->set("min_latency", SrsAmf0Any::boolean(true)); 2202 + sobj->set("min_latency", SrsJsonAny::boolean(true));
2203 } 2203 }
2204 if (get_gop_cache(dir->arg0())) { 2204 if (get_gop_cache(dir->arg0())) {
2205 - sobj->set("gop_cache", SrsAmf0Any::boolean(true)); 2205 + sobj->set("gop_cache", SrsJsonAny::boolean(true));
2206 } 2206 }
2207 if (get_tcp_nodelay(dir->arg0())) { 2207 if (get_tcp_nodelay(dir->arg0())) {
2208 - sobj->set("tcp_nodelay", SrsAmf0Any::boolean(true)); 2208 + sobj->set("tcp_nodelay", SrsJsonAny::boolean(true));
2209 } 2209 }
2210 2210
2211 if (get_mix_correct(dir->arg0())) { 2211 if (get_mix_correct(dir->arg0())) {
2212 - sobj->set("mix_correct", SrsAmf0Any::boolean(true)); 2212 + sobj->set("mix_correct", SrsJsonAny::boolean(true));
2213 } 2213 }
2214 if (get_time_jitter(dir->arg0()) != SrsRtmpJitterAlgorithmOFF) { 2214 if (get_time_jitter(dir->arg0()) != SrsRtmpJitterAlgorithmOFF) {
2215 - sobj->set("time_jitter", SrsAmf0Any::boolean(true)); 2215 + sobj->set("time_jitter", SrsJsonAny::boolean(true));
2216 } 2216 }
2217 if (get_atc(dir->arg0())) { 2217 if (get_atc(dir->arg0())) {
2218 - sobj->set("atc", SrsAmf0Any::boolean(true)); 2218 + sobj->set("atc", SrsJsonAny::boolean(true));
2219 } 2219 }
2220 2220
2221 bool has_transcode = false; 2221 bool has_transcode = false;
@@ -2242,7 +2242,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2242,7 +2242,7 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2242 } 2242 }
2243 } 2243 }
2244 if (has_transcode) { 2244 if (has_transcode) {
2245 - sobj->set("transcode", SrsAmf0Any::boolean(has_transcode)); 2245 + sobj->set("transcode", SrsJsonAny::boolean(has_transcode));
2246 } 2246 }
2247 2247
2248 bool has_ingest = false; 2248 bool has_ingest = false;
@@ -2258,17 +2258,17 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj) @@ -2258,17 +2258,17 @@ int SrsConfig::global_to_json(SrsAmf0Object* obj)
2258 } 2258 }
2259 } 2259 }
2260 if (has_ingest) { 2260 if (has_ingest) {
2261 - sobj->set("ingest", SrsAmf0Any::boolean(has_ingest)); 2261 + sobj->set("ingest", SrsJsonAny::boolean(has_ingest));
2262 } 2262 }
2263 } 2263 }
2264 2264
2265 - obj->set("nb_vhosts", SrsAmf0Any::number(nb_vhosts)); 2265 + obj->set("nb_vhosts", SrsJsonAny::number(nb_vhosts));
2266 obj->set("vhosts", sobjs); 2266 obj->set("vhosts", sobjs);
2267 2267
2268 return ret; 2268 return ret;
2269 } 2269 }
2270 2270
2271 -int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) 2271 +int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsJsonObject* obj)
2272 { 2272 {
2273 int ret = ERROR_SUCCESS; 2273 int ret = ERROR_SUCCESS;
2274 2274
@@ -2278,10 +2278,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2278,10 +2278,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2278 SrsStatistic* stat = SrsStatistic::instance(); 2278 SrsStatistic* stat = SrsStatistic::instance();
2279 2279
2280 SrsStatisticVhost* svhost = stat->find_vhost(vhost->arg0()); 2280 SrsStatisticVhost* svhost = stat->find_vhost(vhost->arg0());
2281 - obj->set("id", SrsAmf0Any::number(svhost? (double)svhost->id : 0)); 2281 + obj->set("id", SrsJsonAny::number(svhost? (double)svhost->id : 0));
2282 2282
2283 obj->set("name", vhost->dumps_arg0_to_str()); 2283 obj->set("name", vhost->dumps_arg0_to_str());
2284 - obj->set("enabled", SrsAmf0Any::boolean(get_vhost_enabled(vhost))); 2284 + obj->set("enabled", SrsJsonAny::boolean(get_vhost_enabled(vhost)));
2285 2285
2286 // vhost scope configs. 2286 // vhost scope configs.
2287 if ((dir = vhost->get("chunk_size")) != NULL) { 2287 if ((dir = vhost->get("chunk_size")) != NULL) {
@@ -2296,7 +2296,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2296,7 +2296,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2296 2296
2297 // cluster. 2297 // cluster.
2298 if ((dir = vhost->get("cluster")) != NULL) { 2298 if ((dir = vhost->get("cluster")) != NULL) {
2299 - SrsAmf0Object* cluster = SrsAmf0Any::object(); 2299 + SrsJsonObject* cluster = SrsJsonAny::object();
2300 obj->set("cluster", cluster); 2300 obj->set("cluster", cluster);
2301 2301
2302 for (int i = 0; i < (int)dir->directives.size(); i++) { 2302 for (int i = 0; i < (int)dir->directives.size(); i++) {
@@ -2318,10 +2318,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2318,10 +2318,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2318 2318
2319 // forward 2319 // forward
2320 if ((dir = vhost->get("forward")) != NULL) { 2320 if ((dir = vhost->get("forward")) != NULL) {
2321 - SrsAmf0Object* forward = SrsAmf0Any::object(); 2321 + SrsJsonObject* forward = SrsJsonAny::object();
2322 obj->set("forward", forward); 2322 obj->set("forward", forward);
2323 2323
2324 - forward->set("enabled", SrsAmf0Any::boolean(get_forward_enabled(vhost->name))); 2324 + forward->set("enabled", SrsJsonAny::boolean(get_forward_enabled(vhost->name)));
2325 2325
2326 for (int i = 0; i < (int)dir->directives.size(); i++) { 2326 for (int i = 0; i < (int)dir->directives.size(); i++) {
2327 SrsConfDirective* sdir = dir->directives.at(i); 2327 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2334,7 +2334,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2334,7 +2334,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2334 2334
2335 // play 2335 // play
2336 if ((dir = vhost->get("play")) != NULL) { 2336 if ((dir = vhost->get("play")) != NULL) {
2337 - SrsAmf0Object* play = SrsAmf0Any::object(); 2337 + SrsJsonObject* play = SrsJsonAny::object();
2338 obj->set("play", play); 2338 obj->set("play", play);
2339 2339
2340 for (int i = 0; i < (int)dir->directives.size(); i++) { 2340 for (int i = 0; i < (int)dir->directives.size(); i++) {
@@ -2364,7 +2364,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2364,7 +2364,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2364 2364
2365 // publish 2365 // publish
2366 if ((dir = vhost->get("publish")) != NULL) { 2366 if ((dir = vhost->get("publish")) != NULL) {
2367 - SrsAmf0Object* publish = SrsAmf0Any::object(); 2367 + SrsJsonObject* publish = SrsJsonAny::object();
2368 obj->set("publish", publish); 2368 obj->set("publish", publish);
2369 2369
2370 for (int i = 0; i < (int)dir->directives.size(); i++) { 2370 for (int i = 0; i < (int)dir->directives.size(); i++) {
@@ -2384,10 +2384,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2384,10 +2384,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2384 2384
2385 // refer 2385 // refer
2386 if ((dir = vhost->get("refer")) != NULL) { 2386 if ((dir = vhost->get("refer")) != NULL) {
2387 - SrsAmf0Object* refer = SrsAmf0Any::object(); 2387 + SrsJsonObject* refer = SrsJsonAny::object();
2388 obj->set("refer", refer); 2388 obj->set("refer", refer);
2389 2389
2390 - refer->set("enabled", SrsAmf0Any::boolean(get_refer_enabled(vhost->name))); 2390 + refer->set("enabled", SrsJsonAny::boolean(get_refer_enabled(vhost->name)));
2391 2391
2392 for (int i = 0; i < (int)dir->directives.size(); i++) { 2392 for (int i = 0; i < (int)dir->directives.size(); i++) {
2393 SrsConfDirective* sdir = dir->directives.at(i); 2393 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2404,10 +2404,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2404,10 +2404,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2404 2404
2405 // bandcheck 2405 // bandcheck
2406 if ((dir = vhost->get("bandcheck")) != NULL) { 2406 if ((dir = vhost->get("bandcheck")) != NULL) {
2407 - SrsAmf0Object* bandcheck = SrsAmf0Any::object(); 2407 + SrsJsonObject* bandcheck = SrsJsonAny::object();
2408 obj->set("bandcheck", bandcheck); 2408 obj->set("bandcheck", bandcheck);
2409 2409
2410 - bandcheck->set("enabled", SrsAmf0Any::boolean(get_bw_check_enabled(vhost->name))); 2410 + bandcheck->set("enabled", SrsJsonAny::boolean(get_bw_check_enabled(vhost->name)));
2411 2411
2412 for (int i = 0; i < (int)dir->directives.size(); i++) { 2412 for (int i = 0; i < (int)dir->directives.size(); i++) {
2413 SrsConfDirective* sdir = dir->directives.at(i); 2413 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2424,31 +2424,31 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2424,31 +2424,31 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2424 2424
2425 // security 2425 // security
2426 if ((dir = vhost->get("security")) != NULL) { 2426 if ((dir = vhost->get("security")) != NULL) {
2427 - SrsAmf0Object* security = SrsAmf0Any::object(); 2427 + SrsJsonObject* security = SrsJsonAny::object();
2428 obj->set("security", security); 2428 obj->set("security", security);
2429 2429
2430 - security->set("enabled", SrsAmf0Any::boolean(get_security_enabled(vhost->name))); 2430 + security->set("enabled", SrsJsonAny::boolean(get_security_enabled(vhost->name)));
2431 2431
2432 - SrsAmf0StrictArray* allows = SrsAmf0Any::strict_array(); 2432 + SrsJsonArray* allows = SrsJsonAny::array();
2433 security->set("allows", allows); 2433 security->set("allows", allows);
2434 2434
2435 - SrsAmf0StrictArray* denies = SrsAmf0Any::strict_array(); 2435 + SrsJsonArray* denies = SrsJsonAny::array();
2436 security->set("denies", denies); 2436 security->set("denies", denies);
2437 2437
2438 for (int i = 0; i < (int)dir->directives.size(); i++) { 2438 for (int i = 0; i < (int)dir->directives.size(); i++) {
2439 SrsConfDirective* sdir = dir->directives.at(i); 2439 SrsConfDirective* sdir = dir->directives.at(i);
2440 2440
2441 if (sdir->name == "allow") { 2441 if (sdir->name == "allow") {
2442 - SrsAmf0Object* allow = SrsAmf0Any::object();  
2443 - allow->set("action", SrsAmf0Any::str(sdir->name.c_str()));  
2444 - allow->set("method", SrsAmf0Any::str(sdir->arg0().c_str()));  
2445 - allow->set("entry", SrsAmf0Any::str(sdir->arg1().c_str())); 2442 + SrsJsonObject* allow = SrsJsonAny::object();
  2443 + allow->set("action", SrsJsonAny::str(sdir->name.c_str()));
  2444 + allow->set("method", SrsJsonAny::str(sdir->arg0().c_str()));
  2445 + allow->set("entry", SrsJsonAny::str(sdir->arg1().c_str()));
2446 allows->append(allow); 2446 allows->append(allow);
2447 } else if (sdir->name == "deny") { 2447 } else if (sdir->name == "deny") {
2448 - SrsAmf0Object* deny = SrsAmf0Any::object();  
2449 - deny->set("action", SrsAmf0Any::str(sdir->name.c_str()));  
2450 - deny->set("method", SrsAmf0Any::str(sdir->arg0().c_str()));  
2451 - deny->set("entry", SrsAmf0Any::str(sdir->arg1().c_str())); 2448 + SrsJsonObject* deny = SrsJsonAny::object();
  2449 + deny->set("action", SrsJsonAny::str(sdir->name.c_str()));
  2450 + deny->set("method", SrsJsonAny::str(sdir->arg0().c_str()));
  2451 + deny->set("entry", SrsJsonAny::str(sdir->arg1().c_str()));
2452 denies->append(deny); 2452 denies->append(deny);
2453 } 2453 }
2454 } 2454 }
@@ -2456,10 +2456,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2456,10 +2456,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2456 2456
2457 // http_static 2457 // http_static
2458 if ((dir = vhost->get("http_static")) != NULL) { 2458 if ((dir = vhost->get("http_static")) != NULL) {
2459 - SrsAmf0Object* http_static = SrsAmf0Any::object(); 2459 + SrsJsonObject* http_static = SrsJsonAny::object();
2460 obj->set("http_static", http_static); 2460 obj->set("http_static", http_static);
2461 2461
2462 - http_static->set("enabled", SrsAmf0Any::boolean(get_vhost_http_enabled(vhost->name))); 2462 + http_static->set("enabled", SrsJsonAny::boolean(get_vhost_http_enabled(vhost->name)));
2463 2463
2464 for (int i = 0; i < (int)dir->directives.size(); i++) { 2464 for (int i = 0; i < (int)dir->directives.size(); i++) {
2465 SrsConfDirective* sdir = dir->directives.at(i); 2465 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2474,10 +2474,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2474,10 +2474,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2474 2474
2475 // http_remux 2475 // http_remux
2476 if ((dir = vhost->get("http_remux")) != NULL) { 2476 if ((dir = vhost->get("http_remux")) != NULL) {
2477 - SrsAmf0Object* http_remux = SrsAmf0Any::object(); 2477 + SrsJsonObject* http_remux = SrsJsonAny::object();
2478 obj->set("http_remux", http_remux); 2478 obj->set("http_remux", http_remux);
2479 2479
2480 - http_remux->set("enabled", SrsAmf0Any::boolean(get_vhost_http_remux_enabled(vhost->name))); 2480 + http_remux->set("enabled", SrsJsonAny::boolean(get_vhost_http_remux_enabled(vhost->name)));
2481 2481
2482 for (int i = 0; i < (int)dir->directives.size(); i++) { 2482 for (int i = 0; i < (int)dir->directives.size(); i++) {
2483 SrsConfDirective* sdir = dir->directives.at(i); 2483 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2494,10 +2494,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2494,10 +2494,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2494 2494
2495 // http_hooks 2495 // http_hooks
2496 if ((dir = vhost->get("http_hooks")) != NULL) { 2496 if ((dir = vhost->get("http_hooks")) != NULL) {
2497 - SrsAmf0Object* http_hooks = SrsAmf0Any::object(); 2497 + SrsJsonObject* http_hooks = SrsJsonAny::object();
2498 obj->set("http_hooks", http_hooks); 2498 obj->set("http_hooks", http_hooks);
2499 2499
2500 - http_hooks->set("enabled", SrsAmf0Any::boolean(get_vhost_http_hooks_enabled(vhost->name))); 2500 + http_hooks->set("enabled", SrsJsonAny::boolean(get_vhost_http_hooks_enabled(vhost->name)));
2501 2501
2502 for (int i = 0; i < (int)dir->directives.size(); i++) { 2502 for (int i = 0; i < (int)dir->directives.size(); i++) {
2503 SrsConfDirective* sdir = dir->directives.at(i); 2503 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2526,10 +2526,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2526,10 +2526,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2526 2526
2527 // hls 2527 // hls
2528 if ((dir = vhost->get("hls")) != NULL) { 2528 if ((dir = vhost->get("hls")) != NULL) {
2529 - SrsAmf0Object* hls = SrsAmf0Any::object(); 2529 + SrsJsonObject* hls = SrsJsonAny::object();
2530 obj->set("hls", hls); 2530 obj->set("hls", hls);
2531 2531
2532 - hls->set("enabled", SrsAmf0Any::boolean(get_hls_enabled(vhost->name))); 2532 + hls->set("enabled", SrsJsonAny::boolean(get_hls_enabled(vhost->name)));
2533 2533
2534 for (int i = 0; i < (int)dir->directives.size(); i++) { 2534 for (int i = 0; i < (int)dir->directives.size(); i++) {
2535 SrsConfDirective* sdir = dir->directives.at(i); 2535 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2576,10 +2576,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2576,10 +2576,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2576 2576
2577 // hds 2577 // hds
2578 if ((dir = vhost->get("hds")) != NULL) { 2578 if ((dir = vhost->get("hds")) != NULL) {
2579 - SrsAmf0Object* hds = SrsAmf0Any::object(); 2579 + SrsJsonObject* hds = SrsJsonAny::object();
2580 obj->set("hds", hds); 2580 obj->set("hds", hds);
2581 2581
2582 - hds->set("enabled", SrsAmf0Any::boolean(get_hds_enabled(vhost->name))); 2582 + hds->set("enabled", SrsJsonAny::boolean(get_hds_enabled(vhost->name)));
2583 2583
2584 for (int i = 0; i < (int)dir->directives.size(); i++) { 2584 for (int i = 0; i < (int)dir->directives.size(); i++) {
2585 SrsConfDirective* sdir = dir->directives.at(i); 2585 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2596,10 +2596,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2596,10 +2596,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2596 2596
2597 // dvr 2597 // dvr
2598 if ((dir = vhost->get("dvr")) != NULL) { 2598 if ((dir = vhost->get("dvr")) != NULL) {
2599 - SrsAmf0Object* dvr = SrsAmf0Any::object(); 2599 + SrsJsonObject* dvr = SrsJsonAny::object();
2600 obj->set("dvr", dvr); 2600 obj->set("dvr", dvr);
2601 2601
2602 - dvr->set("enabled", SrsAmf0Any::boolean(get_dvr_enabled(vhost->name))); 2602 + dvr->set("enabled", SrsJsonAny::boolean(get_dvr_enabled(vhost->name)));
2603 2603
2604 for (int i = 0; i < (int)dir->directives.size(); i++) { 2604 for (int i = 0; i < (int)dir->directives.size(); i++) {
2605 SrsConfDirective* sdir = dir->directives.at(i); 2605 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2622,10 +2622,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2622,10 +2622,10 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2622 2622
2623 // exec 2623 // exec
2624 if ((dir = vhost->get("exec")) != NULL) { 2624 if ((dir = vhost->get("exec")) != NULL) {
2625 - SrsAmf0Object* ng_exec = SrsAmf0Any::object(); 2625 + SrsJsonObject* ng_exec = SrsJsonAny::object();
2626 obj->set("exec", ng_exec); 2626 obj->set("exec", ng_exec);
2627 2627
2628 - ng_exec->set("enabled", SrsAmf0Any::boolean(get_exec_enabled(vhost->name))); 2628 + ng_exec->set("enabled", SrsJsonAny::boolean(get_exec_enabled(vhost->name)));
2629 2629
2630 for (int i = 0; i < (int)dir->directives.size(); i++) { 2630 for (int i = 0; i < (int)dir->directives.size(); i++) {
2631 SrsConfDirective* sdir = dir->directives.at(i); 2631 SrsConfDirective* sdir = dir->directives.at(i);
@@ -2637,7 +2637,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2637,7 +2637,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2637 } 2637 }
2638 2638
2639 // ingest 2639 // ingest
2640 - SrsAmf0StrictArray* ingests = NULL; 2640 + SrsJsonArray* ingests = NULL;
2641 for (int i = 0; i < (int)vhost->directives.size(); i++) { 2641 for (int i = 0; i < (int)vhost->directives.size(); i++) {
2642 dir = vhost->directives.at(i); 2642 dir = vhost->directives.at(i);
2643 if (dir->name != "ingest") { 2643 if (dir->name != "ingest") {
@@ -2645,20 +2645,20 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2645,20 +2645,20 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2645 } 2645 }
2646 2646
2647 if (!ingests) { 2647 if (!ingests) {
2648 - ingests = SrsAmf0Any::strict_array(); 2648 + ingests = SrsJsonAny::array();
2649 obj->set("ingests", ingests); 2649 obj->set("ingests", ingests);
2650 } 2650 }
2651 2651
2652 - SrsAmf0Object* ingest = SrsAmf0Any::object(); 2652 + SrsJsonObject* ingest = SrsJsonAny::object();
2653 ingest->set("id", dir->dumps_arg0_to_str()); 2653 ingest->set("id", dir->dumps_arg0_to_str());
2654 - ingest->set("enabled", SrsAmf0Any::boolean(get_ingest_enabled(dir))); 2654 + ingest->set("enabled", SrsJsonAny::boolean(get_ingest_enabled(dir)));
2655 ingests->append(ingest); 2655 ingests->append(ingest);
2656 2656
2657 for (int j = 0; j < (int)dir->directives.size(); j++) { 2657 for (int j = 0; j < (int)dir->directives.size(); j++) {
2658 SrsConfDirective* sdir = dir->directives.at(j); 2658 SrsConfDirective* sdir = dir->directives.at(j);
2659 2659
2660 if (sdir->name == "input") { 2660 if (sdir->name == "input") {
2661 - SrsAmf0Object* input = SrsAmf0Any::object(); 2661 + SrsJsonObject* input = SrsJsonAny::object();
2662 ingest->set("input", input); 2662 ingest->set("input", input);
2663 2663
2664 SrsConfDirective* type = sdir->get("type"); 2664 SrsConfDirective* type = sdir->get("type");
@@ -2673,7 +2673,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2673,7 +2673,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2673 } else if (sdir->name == "ffmpeg") { 2673 } else if (sdir->name == "ffmpeg") {
2674 ingest->set("ffmpeg", sdir->dumps_arg0_to_str()); 2674 ingest->set("ffmpeg", sdir->dumps_arg0_to_str());
2675 } else if (sdir->name == "engine") { 2675 } else if (sdir->name == "engine") {
2676 - SrsAmf0Object* engine = SrsAmf0Any::object(); 2676 + SrsJsonObject* engine = SrsJsonAny::object();
2677 ingest->set("engine", engine); 2677 ingest->set("engine", engine);
2678 2678
2679 if ((ret = srs_config_dumps_engine(sdir, engine)) != ERROR_SUCCESS) { 2679 if ((ret = srs_config_dumps_engine(sdir, engine)) != ERROR_SUCCESS) {
@@ -2684,7 +2684,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2684,7 +2684,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2684 } 2684 }
2685 2685
2686 // transcode 2686 // transcode
2687 - SrsAmf0StrictArray* transcodes = NULL; 2687 + SrsJsonArray* transcodes = NULL;
2688 for (int i = 0; i < (int)vhost->directives.size(); i++) { 2688 for (int i = 0; i < (int)vhost->directives.size(); i++) {
2689 dir = vhost->directives.at(i); 2689 dir = vhost->directives.at(i);
2690 if (dir->name != "transcode") { 2690 if (dir->name != "transcode") {
@@ -2692,17 +2692,17 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2692,17 +2692,17 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2692 } 2692 }
2693 2693
2694 if (!transcodes) { 2694 if (!transcodes) {
2695 - transcodes = SrsAmf0Any::strict_array(); 2695 + transcodes = SrsJsonAny::array();
2696 obj->set("transcodes", transcodes); 2696 obj->set("transcodes", transcodes);
2697 } 2697 }
2698 2698
2699 - SrsAmf0Object* transcode = SrsAmf0Any::object(); 2699 + SrsJsonObject* transcode = SrsJsonAny::object();
2700 transcodes->append(transcode); 2700 transcodes->append(transcode);
2701 2701
2702 transcode->set("apply", dir->dumps_arg0_to_str()); 2702 transcode->set("apply", dir->dumps_arg0_to_str());
2703 - transcode->set("enabled", SrsAmf0Any::boolean(get_transcode_enabled(dir))); 2703 + transcode->set("enabled", SrsJsonAny::boolean(get_transcode_enabled(dir)));
2704 2704
2705 - SrsAmf0StrictArray* engines = SrsAmf0Any::strict_array(); 2705 + SrsJsonArray* engines = SrsJsonAny::array();
2706 transcode->set("engines", engines); 2706 transcode->set("engines", engines);
2707 2707
2708 for (int i = 0; i < (int)dir->directives.size(); i++) { 2708 for (int i = 0; i < (int)dir->directives.size(); i++) {
@@ -2711,7 +2711,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2711,7 +2711,7 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2711 if (sdir->name == "ffmpeg") { 2711 if (sdir->name == "ffmpeg") {
2712 transcode->set("ffmpeg", sdir->dumps_arg0_to_str()); 2712 transcode->set("ffmpeg", sdir->dumps_arg0_to_str());
2713 } else if (sdir->name == "engine") { 2713 } else if (sdir->name == "engine") {
2714 - SrsAmf0Object* engine = SrsAmf0Any::object(); 2714 + SrsJsonObject* engine = SrsJsonAny::object();
2715 engines->append(engine); 2715 engines->append(engine);
2716 2716
2717 if ((ret = srs_config_dumps_engine(sdir, engine)) != ERROR_SUCCESS) { 2717 if ((ret = srs_config_dumps_engine(sdir, engine)) != ERROR_SUCCESS) {
@@ -2724,24 +2724,24 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj) @@ -2724,24 +2724,24 @@ int SrsConfig::vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj)
2724 return ret; 2724 return ret;
2725 } 2725 }
2726 2726
2727 -int SrsConfig::raw_to_json(SrsAmf0Object* obj) 2727 +int SrsConfig::raw_to_json(SrsJsonObject* obj)
2728 { 2728 {
2729 int ret = ERROR_SUCCESS; 2729 int ret = ERROR_SUCCESS;
2730 2730
2731 - SrsAmf0Object* sobj = SrsAmf0Any::object(); 2731 + SrsJsonObject* sobj = SrsJsonAny::object();
2732 obj->set("http_api", sobj); 2732 obj->set("http_api", sobj);
2733 2733
2734 - sobj->set("enabled", SrsAmf0Any::boolean(get_http_api_enabled()));  
2735 - sobj->set("listen", SrsAmf0Any::str(get_http_api_listen().c_str()));  
2736 - sobj->set("crossdomain", SrsAmf0Any::boolean(get_http_api_crossdomain())); 2734 + sobj->set("enabled", SrsJsonAny::boolean(get_http_api_enabled()));
  2735 + sobj->set("listen", SrsJsonAny::str(get_http_api_listen().c_str()));
  2736 + sobj->set("crossdomain", SrsJsonAny::boolean(get_http_api_crossdomain()));
2737 2737
2738 - SrsAmf0Object* ssobj = SrsAmf0Any::object(); 2738 + SrsJsonObject* ssobj = SrsJsonAny::object();
2739 sobj->set("raw_api", ssobj); 2739 sobj->set("raw_api", ssobj);
2740 2740
2741 - ssobj->set("enabled", SrsAmf0Any::boolean(get_raw_api()));  
2742 - ssobj->set("allow_reload", SrsAmf0Any::boolean(get_raw_api_allow_reload()));  
2743 - ssobj->set("allow_query", SrsAmf0Any::boolean(get_raw_api_allow_query()));  
2744 - ssobj->set("allow_update", SrsAmf0Any::boolean(get_raw_api_allow_update())); 2741 + ssobj->set("enabled", SrsJsonAny::boolean(get_raw_api()));
  2742 + ssobj->set("allow_reload", SrsJsonAny::boolean(get_raw_api_allow_reload()));
  2743 + ssobj->set("allow_query", SrsJsonAny::boolean(get_raw_api_allow_query()));
  2744 + ssobj->set("allow_update", SrsJsonAny::boolean(get_raw_api_allow_update()));
2745 2745
2746 return ret; 2746 return ret;
2747 } 2747 }
@@ -40,9 +40,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -40,9 +40,9 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40 40
41 class SrsRequest; 41 class SrsRequest;
42 class SrsFileWriter; 42 class SrsFileWriter;
43 -class SrsAmf0Object;  
44 -class SrsAmf0StrictArray;  
45 -class SrsAmf0Any; 43 +class SrsJsonObject;
  44 +class SrsJsonArray;
  45 +class SrsJsonAny;
46 46
47 class SrsConfig; 47 class SrsConfig;
48 class SrsRequest; 48 class SrsRequest;
@@ -250,13 +250,13 @@ public: @@ -250,13 +250,13 @@ public:
250 /** 250 /**
251 * dumps the args[0-N] to array(string). 251 * dumps the args[0-N] to array(string).
252 */ 252 */
253 - virtual SrsAmf0StrictArray* dumps_args(); 253 + virtual SrsJsonArray* dumps_args();
254 /** 254 /**
255 * dumps arg0 to str, number or boolean. 255 * dumps arg0 to str, number or boolean.
256 */ 256 */
257 - virtual SrsAmf0Any* dumps_arg0_to_str();  
258 - virtual SrsAmf0Any* dumps_arg0_to_number();  
259 - virtual SrsAmf0Any* dumps_arg0_to_boolean(); 257 + virtual SrsJsonAny* dumps_arg0_to_str();
  258 + virtual SrsJsonAny* dumps_arg0_to_number();
  259 + virtual SrsJsonAny* dumps_arg0_to_boolean();
260 // private parse. 260 // private parse.
261 private: 261 private:
262 /** 262 /**
@@ -416,19 +416,19 @@ public: @@ -416,19 +416,19 @@ public:
416 /** 416 /**
417 * dumps the global sections to json. 417 * dumps the global sections to json.
418 */ 418 */
419 - virtual int global_to_json(SrsAmf0Object* obj); 419 + virtual int global_to_json(SrsJsonObject* obj);
420 /** 420 /**
421 * dumps the minimal sections to json. 421 * dumps the minimal sections to json.
422 */ 422 */
423 - virtual int minimal_to_json(SrsAmf0Object* obj); 423 + virtual int minimal_to_json(SrsJsonObject* obj);
424 /** 424 /**
425 * dumps the vhost section to json. 425 * dumps the vhost section to json.
426 */ 426 */
427 - virtual int vhost_to_json(SrsConfDirective* vhost, SrsAmf0Object* obj); 427 + virtual int vhost_to_json(SrsConfDirective* vhost, SrsJsonObject* obj);
428 /** 428 /**
429 * dumps the http_api sections to json for raw api info. 429 * dumps the http_api sections to json for raw api info.
430 */ 430 */
431 - virtual int raw_to_json(SrsAmf0Object* obj); 431 + virtual int raw_to_json(SrsJsonObject* obj);
432 /** 432 /**
433 * raw set the global listen. 433 * raw set the global listen.
434 */ 434 */
@@ -66,14 +66,14 @@ void SrsHttpHeartbeat::heartbeat() @@ -66,14 +66,14 @@ void SrsHttpHeartbeat::heartbeat()
66 ip = ips[_srs_config->get_stats_network() % (int)ips.size()]; 66 ip = ips[_srs_config->get_stats_network() % (int)ips.size()];
67 } 67 }
68 68
69 - SrsAmf0Object* obj = SrsAmf0Any::object();  
70 - SrsAutoFree(SrsAmf0Object, obj); 69 + SrsJsonObject* obj = SrsJsonAny::object();
  70 + SrsAutoFree(SrsJsonObject, obj);
71 71
72 - obj->set("device_id", SrsAmf0Any::str(device_id.c_str()));  
73 - obj->set("ip", SrsAmf0Any::str(ip.c_str())); 72 + obj->set("device_id", SrsJsonAny::str(device_id.c_str()));
  73 + obj->set("ip", SrsJsonAny::str(ip.c_str()));
74 74
75 if (_srs_config->get_heartbeat_summaries()) { 75 if (_srs_config->get_heartbeat_summaries()) {
76 - SrsAmf0Object* summaries = SrsAmf0Any::object(); 76 + SrsJsonObject* summaries = SrsJsonAny::object();
77 obj->set("summaries", summaries); 77 obj->set("summaries", summaries);
78 78
79 srs_api_dump_summaries(summaries); 79 srs_api_dump_summaries(summaries);
@@ -78,10 +78,10 @@ int srs_api_response_jsonp(ISrsHttpResponseWriter* w, string callback, string da @@ -78,10 +78,10 @@ int srs_api_response_jsonp(ISrsHttpResponseWriter* w, string callback, string da
78 78
79 int srs_api_response_jsonp_code(ISrsHttpResponseWriter* w, string callback, int code) 79 int srs_api_response_jsonp_code(ISrsHttpResponseWriter* w, string callback, int code)
80 { 80 {
81 - SrsAmf0Object* obj = SrsAmf0Any::object();  
82 - SrsAutoFree(SrsAmf0Object, obj); 81 + SrsJsonObject* obj = SrsJsonAny::object();
  82 + SrsAutoFree(SrsJsonObject, obj);
83 83
84 - obj->set("code", SrsAmf0Any::number(code)); 84 + obj->set("code", SrsJsonAny::ingeter(code));
85 85
86 return srs_api_response_jsonp(w, callback, obj->to_json()); 86 return srs_api_response_jsonp(w, callback, obj->to_json());
87 } 87 }
@@ -98,10 +98,10 @@ int srs_api_response_json(ISrsHttpResponseWriter* w, string data) @@ -98,10 +98,10 @@ int srs_api_response_json(ISrsHttpResponseWriter* w, string data)
98 98
99 int srs_api_response_json_code(ISrsHttpResponseWriter* w, int code) 99 int srs_api_response_json_code(ISrsHttpResponseWriter* w, int code)
100 { 100 {
101 - SrsAmf0Object* obj = SrsAmf0Any::object();  
102 - SrsAutoFree(SrsAmf0Object, obj); 101 + SrsJsonObject* obj = SrsJsonAny::object();
  102 + SrsAutoFree(SrsJsonObject, obj);
103 103
104 - obj->set("code", SrsAmf0Any::number(code)); 104 + obj->set("code", SrsJsonAny::ingeter(code));
105 105
106 return srs_api_response_json(w, obj->to_json()); 106 return srs_api_response_json(w, obj->to_json());
107 } 107 }
@@ -142,16 +142,16 @@ int SrsGoApiRoot::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -142,16 +142,16 @@ int SrsGoApiRoot::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
142 { 142 {
143 SrsStatistic* stat = SrsStatistic::instance(); 143 SrsStatistic* stat = SrsStatistic::instance();
144 144
145 - SrsAmf0Object* obj = SrsAmf0Any::object();  
146 - SrsAutoFree(SrsAmf0Object, obj); 145 + SrsJsonObject* obj = SrsJsonAny::object();
  146 + SrsAutoFree(SrsJsonObject, obj);
147 147
148 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
149 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 148 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  149 + obj->set("server", SrsJsonAny::number(stat->server_id()));
150 150
151 - SrsAmf0Object* urls = SrsAmf0Any::object(); 151 + SrsJsonObject* urls = SrsJsonAny::object();
152 obj->set("urls", urls); 152 obj->set("urls", urls);
153 153
154 - urls->set("api", SrsAmf0Any::str("the api root")); 154 + urls->set("api", SrsJsonAny::str("the api root"));
155 155
156 return srs_api_response(w, r, obj->to_json()); 156 return srs_api_response(w, r, obj->to_json());
157 } 157 }
@@ -168,16 +168,16 @@ int SrsGoApiApi::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -168,16 +168,16 @@ int SrsGoApiApi::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
168 { 168 {
169 SrsStatistic* stat = SrsStatistic::instance(); 169 SrsStatistic* stat = SrsStatistic::instance();
170 170
171 - SrsAmf0Object* obj = SrsAmf0Any::object();  
172 - SrsAutoFree(SrsAmf0Object, obj); 171 + SrsJsonObject* obj = SrsJsonAny::object();
  172 + SrsAutoFree(SrsJsonObject, obj);
173 173
174 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
175 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 174 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  175 + obj->set("server", SrsJsonAny::number(stat->server_id()));
176 176
177 - SrsAmf0Object* urls = SrsAmf0Any::object(); 177 + SrsJsonObject* urls = SrsJsonAny::object();
178 obj->set("urls", urls); 178 obj->set("urls", urls);
179 179
180 - urls->set("v1", SrsAmf0Any::str("the api version 1.0")); 180 + urls->set("v1", SrsJsonAny::str("the api version 1.0"));
181 181
182 return srs_api_response(w, r, obj->to_json()); 182 return srs_api_response(w, r, obj->to_json());
183 } 183 }
@@ -194,36 +194,36 @@ int SrsGoApiV1::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -194,36 +194,36 @@ int SrsGoApiV1::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
194 { 194 {
195 SrsStatistic* stat = SrsStatistic::instance(); 195 SrsStatistic* stat = SrsStatistic::instance();
196 196
197 - SrsAmf0Object* obj = SrsAmf0Any::object();  
198 - SrsAutoFree(SrsAmf0Object, obj); 197 + SrsJsonObject* obj = SrsJsonAny::object();
  198 + SrsAutoFree(SrsJsonObject, obj);
199 199
200 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
201 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 200 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  201 + obj->set("server", SrsJsonAny::number(stat->server_id()));
202 202
203 - SrsAmf0Object* urls = SrsAmf0Any::object(); 203 + SrsJsonObject* urls = SrsJsonAny::object();
204 obj->set("urls", urls); 204 obj->set("urls", urls);
205 205
206 - urls->set("versions", SrsAmf0Any::str("the version of SRS"));  
207 - urls->set("summaries", SrsAmf0Any::str("the summary(pid, argv, pwd, cpu, mem) of SRS"));  
208 - urls->set("rusages", SrsAmf0Any::str("the rusage of SRS"));  
209 - urls->set("self_proc_stats", SrsAmf0Any::str("the self process stats"));  
210 - urls->set("system_proc_stats", SrsAmf0Any::str("the system process stats"));  
211 - urls->set("meminfos", SrsAmf0Any::str("the meminfo of system"));  
212 - urls->set("authors", SrsAmf0Any::str("the license, copyright, authors and contributors"));  
213 - urls->set("features", SrsAmf0Any::str("the supported features of SRS"));  
214 - urls->set("requests", SrsAmf0Any::str("the request itself, for http debug"));  
215 - urls->set("vhosts", SrsAmf0Any::str("manage all vhosts or specified vhost"));  
216 - urls->set("streams", SrsAmf0Any::str("manage all streams or specified stream"));  
217 - urls->set("clients", SrsAmf0Any::str("manage all clients or specified client, default query top 10 clients"));  
218 - urls->set("raw", SrsAmf0Any::str("raw api for srs, support CUID srs for instance the config"));  
219 -  
220 - SrsAmf0Object* tests = SrsAmf0Any::object(); 206 + urls->set("versions", SrsJsonAny::str("the version of SRS"));
  207 + urls->set("summaries", SrsJsonAny::str("the summary(pid, argv, pwd, cpu, mem) of SRS"));
  208 + urls->set("rusages", SrsJsonAny::str("the rusage of SRS"));
  209 + urls->set("self_proc_stats", SrsJsonAny::str("the self process stats"));
  210 + urls->set("system_proc_stats", SrsJsonAny::str("the system process stats"));
  211 + urls->set("meminfos", SrsJsonAny::str("the meminfo of system"));
  212 + urls->set("authors", SrsJsonAny::str("the license, copyright, authors and contributors"));
  213 + urls->set("features", SrsJsonAny::str("the supported features of SRS"));
  214 + urls->set("requests", SrsJsonAny::str("the request itself, for http debug"));
  215 + urls->set("vhosts", SrsJsonAny::str("manage all vhosts or specified vhost"));
  216 + urls->set("streams", SrsJsonAny::str("manage all streams or specified stream"));
  217 + urls->set("clients", SrsJsonAny::str("manage all clients or specified client, default query top 10 clients"));
  218 + urls->set("raw", SrsJsonAny::str("raw api for srs, support CUID srs for instance the config"));
  219 +
  220 + SrsJsonObject* tests = SrsJsonAny::object();
221 obj->set("tests", tests); 221 obj->set("tests", tests);
222 222
223 - tests->set("requests", SrsAmf0Any::str("show the request info"));  
224 - tests->set("errors", SrsAmf0Any::str("always return an error 100"));  
225 - tests->set("redirects", SrsAmf0Any::str("always redirect to /api/v1/test/errors"));  
226 - tests->set("[vhost]", SrsAmf0Any::str("http vhost for http://error.srs.com:1985/api/v1/tests/errors")); 223 + tests->set("requests", SrsJsonAny::str("show the request info"));
  224 + tests->set("errors", SrsJsonAny::str("always return an error 100"));
  225 + tests->set("redirects", SrsJsonAny::str("always redirect to /api/v1/test/errors"));
  226 + tests->set("[vhost]", SrsJsonAny::str("http vhost for http://error.srs.com:1985/api/v1/tests/errors"));
227 227
228 return srs_api_response(w, r, obj->to_json()); 228 return srs_api_response(w, r, obj->to_json());
229 } 229 }
@@ -240,19 +240,19 @@ int SrsGoApiVersion::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -240,19 +240,19 @@ int SrsGoApiVersion::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
240 { 240 {
241 SrsStatistic* stat = SrsStatistic::instance(); 241 SrsStatistic* stat = SrsStatistic::instance();
242 242
243 - SrsAmf0Object* obj = SrsAmf0Any::object();  
244 - SrsAutoFree(SrsAmf0Object, obj); 243 + SrsJsonObject* obj = SrsJsonAny::object();
  244 + SrsAutoFree(SrsJsonObject, obj);
245 245
246 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
247 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 246 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  247 + obj->set("server", SrsJsonAny::number(stat->server_id()));
248 248
249 - SrsAmf0Object* data = SrsAmf0Any::object(); 249 + SrsJsonObject* data = SrsJsonAny::object();
250 obj->set("data", data); 250 obj->set("data", data);
251 251
252 - data->set("major", SrsAmf0Any::number(VERSION_MAJOR));  
253 - data->set("minor", SrsAmf0Any::number(VERSION_MINOR));  
254 - data->set("revision", SrsAmf0Any::number(VERSION_REVISION));  
255 - data->set("version", SrsAmf0Any::str(RTMP_SIG_SRS_VERSION)); 252 + data->set("major", SrsJsonAny::number(VERSION_MAJOR));
  253 + data->set("minor", SrsJsonAny::number(VERSION_MINOR));
  254 + data->set("revision", SrsJsonAny::number(VERSION_REVISION));
  255 + data->set("version", SrsJsonAny::str(RTMP_SIG_SRS_VERSION));
256 256
257 return srs_api_response(w, r, obj->to_json()); 257 return srs_api_response(w, r, obj->to_json());
258 } 258 }
@@ -267,8 +267,8 @@ SrsGoApiSummaries::~SrsGoApiSummaries() @@ -267,8 +267,8 @@ 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 - SrsAmf0Object* obj = SrsAmf0Any::object();  
271 - SrsAutoFree(SrsAmf0Object, obj); 270 + SrsJsonObject* obj = SrsJsonAny::object();
  271 + SrsAutoFree(SrsJsonObject, obj);
272 272
273 srs_api_dump_summaries(obj); 273 srs_api_dump_summaries(obj);
274 274
@@ -287,35 +287,35 @@ int SrsGoApiRusages::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -287,35 +287,35 @@ int SrsGoApiRusages::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
287 { 287 {
288 SrsStatistic* stat = SrsStatistic::instance(); 288 SrsStatistic* stat = SrsStatistic::instance();
289 289
290 - SrsAmf0Object* obj = SrsAmf0Any::object();  
291 - SrsAutoFree(SrsAmf0Object, obj); 290 + SrsJsonObject* obj = SrsJsonAny::object();
  291 + SrsAutoFree(SrsJsonObject, obj);
292 292
293 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
294 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 293 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  294 + obj->set("server", SrsJsonAny::number(stat->server_id()));
295 295
296 - SrsAmf0Object* data = SrsAmf0Any::object(); 296 + SrsJsonObject* data = SrsJsonAny::object();
297 obj->set("data", data); 297 obj->set("data", data);
298 298
299 SrsRusage* ru = srs_get_system_rusage(); 299 SrsRusage* ru = srs_get_system_rusage();
300 300
301 - data->set("ok", SrsAmf0Any::boolean(ru->ok));  
302 - data->set("sample_time", SrsAmf0Any::number(ru->sample_time));  
303 - data->set("ru_utime", SrsAmf0Any::number(ru->r.ru_utime.tv_sec));  
304 - data->set("ru_stime", SrsAmf0Any::number(ru->r.ru_stime.tv_sec));  
305 - data->set("ru_maxrss", SrsAmf0Any::number(ru->r.ru_maxrss));  
306 - data->set("ru_ixrss", SrsAmf0Any::number(ru->r.ru_ixrss));  
307 - data->set("ru_idrss", SrsAmf0Any::number(ru->r.ru_idrss));  
308 - data->set("ru_isrss", SrsAmf0Any::number(ru->r.ru_isrss));  
309 - data->set("ru_minflt", SrsAmf0Any::number(ru->r.ru_minflt));  
310 - data->set("ru_majflt", SrsAmf0Any::number(ru->r.ru_majflt));  
311 - data->set("ru_nswap", SrsAmf0Any::number(ru->r.ru_nswap));  
312 - data->set("ru_inblock", SrsAmf0Any::number(ru->r.ru_inblock));  
313 - data->set("ru_oublock", SrsAmf0Any::number(ru->r.ru_oublock));  
314 - data->set("ru_msgsnd", SrsAmf0Any::number(ru->r.ru_msgsnd));  
315 - data->set("ru_msgrcv", SrsAmf0Any::number(ru->r.ru_msgrcv));  
316 - data->set("ru_nsignals", SrsAmf0Any::number(ru->r.ru_nsignals));  
317 - data->set("ru_nvcsw", SrsAmf0Any::number(ru->r.ru_nvcsw));  
318 - data->set("ru_nivcsw", SrsAmf0Any::number(ru->r.ru_nivcsw)); 301 + data->set("ok", SrsJsonAny::boolean(ru->ok));
  302 + data->set("sample_time", SrsJsonAny::number(ru->sample_time));
  303 + data->set("ru_utime", SrsJsonAny::number(ru->r.ru_utime.tv_sec));
  304 + data->set("ru_stime", SrsJsonAny::number(ru->r.ru_stime.tv_sec));
  305 + data->set("ru_maxrss", SrsJsonAny::number(ru->r.ru_maxrss));
  306 + data->set("ru_ixrss", SrsJsonAny::number(ru->r.ru_ixrss));
  307 + data->set("ru_idrss", SrsJsonAny::number(ru->r.ru_idrss));
  308 + data->set("ru_isrss", SrsJsonAny::number(ru->r.ru_isrss));
  309 + data->set("ru_minflt", SrsJsonAny::number(ru->r.ru_minflt));
  310 + data->set("ru_majflt", SrsJsonAny::number(ru->r.ru_majflt));
  311 + data->set("ru_nswap", SrsJsonAny::number(ru->r.ru_nswap));
  312 + data->set("ru_inblock", SrsJsonAny::number(ru->r.ru_inblock));
  313 + data->set("ru_oublock", SrsJsonAny::number(ru->r.ru_oublock));
  314 + data->set("ru_msgsnd", SrsJsonAny::number(ru->r.ru_msgsnd));
  315 + data->set("ru_msgrcv", SrsJsonAny::number(ru->r.ru_msgrcv));
  316 + data->set("ru_nsignals", SrsJsonAny::number(ru->r.ru_nsignals));
  317 + data->set("ru_nvcsw", SrsJsonAny::number(ru->r.ru_nvcsw));
  318 + data->set("ru_nivcsw", SrsJsonAny::number(ru->r.ru_nivcsw));
319 319
320 return srs_api_response(w, r, obj->to_json()); 320 return srs_api_response(w, r, obj->to_json());
321 } 321 }
@@ -332,13 +332,13 @@ int SrsGoApiSelfProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage @@ -332,13 +332,13 @@ int SrsGoApiSelfProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage
332 { 332 {
333 SrsStatistic* stat = SrsStatistic::instance(); 333 SrsStatistic* stat = SrsStatistic::instance();
334 334
335 - SrsAmf0Object* obj = SrsAmf0Any::object();  
336 - SrsAutoFree(SrsAmf0Object, obj); 335 + SrsJsonObject* obj = SrsJsonAny::object();
  336 + SrsAutoFree(SrsJsonObject, obj);
337 337
338 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
339 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 338 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  339 + obj->set("server", SrsJsonAny::number(stat->server_id()));
340 340
341 - SrsAmf0Object* data = SrsAmf0Any::object(); 341 + SrsJsonObject* data = SrsJsonAny::object();
342 obj->set("data", data); 342 obj->set("data", data);
343 343
344 SrsProcSelfStat* u = srs_get_self_proc_stat(); 344 SrsProcSelfStat* u = srs_get_self_proc_stat();
@@ -346,53 +346,53 @@ int SrsGoApiSelfProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage @@ -346,53 +346,53 @@ int SrsGoApiSelfProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage
346 string state; 346 string state;
347 state += (char)u->state; 347 state += (char)u->state;
348 348
349 - data->set("ok", SrsAmf0Any::boolean(u->ok));  
350 - data->set("sample_time", SrsAmf0Any::number(u->sample_time));  
351 - data->set("percent", SrsAmf0Any::number(u->percent));  
352 - data->set("pid", SrsAmf0Any::number(u->pid));  
353 - data->set("comm", SrsAmf0Any::str(u->comm));  
354 - data->set("state", SrsAmf0Any::str(state.c_str()));  
355 - data->set("ppid", SrsAmf0Any::number(u->ppid));  
356 - data->set("pgrp", SrsAmf0Any::number(u->pgrp));  
357 - data->set("session", SrsAmf0Any::number(u->session));  
358 - data->set("tty_nr", SrsAmf0Any::number(u->tty_nr));  
359 - data->set("tpgid", SrsAmf0Any::number(u->tpgid));  
360 - data->set("flags", SrsAmf0Any::number(u->flags));  
361 - data->set("minflt", SrsAmf0Any::number(u->minflt));  
362 - data->set("cminflt", SrsAmf0Any::number(u->cminflt));  
363 - data->set("majflt", SrsAmf0Any::number(u->majflt));  
364 - data->set("cmajflt", SrsAmf0Any::number(u->cmajflt));  
365 - data->set("utime", SrsAmf0Any::number(u->utime));  
366 - data->set("stime", SrsAmf0Any::number(u->stime));  
367 - data->set("cutime", SrsAmf0Any::number(u->cutime));  
368 - data->set("cstime", SrsAmf0Any::number(u->cstime));  
369 - data->set("priority", SrsAmf0Any::number(u->priority));  
370 - data->set("nice", SrsAmf0Any::number(u->nice));  
371 - data->set("num_threads", SrsAmf0Any::number(u->num_threads));  
372 - data->set("itrealvalue", SrsAmf0Any::number(u->itrealvalue));  
373 - data->set("starttime", SrsAmf0Any::number(u->starttime));  
374 - data->set("vsize", SrsAmf0Any::number(u->vsize));  
375 - data->set("rss", SrsAmf0Any::number(u->rss));  
376 - data->set("rsslim", SrsAmf0Any::number(u->rsslim));  
377 - data->set("startcode", SrsAmf0Any::number(u->startcode));  
378 - data->set("endcode", SrsAmf0Any::number(u->endcode));  
379 - data->set("startstack", SrsAmf0Any::number(u->startstack));  
380 - data->set("kstkesp", SrsAmf0Any::number(u->kstkesp));  
381 - data->set("kstkeip", SrsAmf0Any::number(u->kstkeip));  
382 - data->set("signal", SrsAmf0Any::number(u->signal));  
383 - data->set("blocked", SrsAmf0Any::number(u->blocked));  
384 - data->set("sigignore", SrsAmf0Any::number(u->sigignore));  
385 - data->set("sigcatch", SrsAmf0Any::number(u->sigcatch));  
386 - data->set("wchan", SrsAmf0Any::number(u->wchan));  
387 - data->set("nswap", SrsAmf0Any::number(u->nswap));  
388 - data->set("cnswap", SrsAmf0Any::number(u->cnswap));  
389 - data->set("exit_signal", SrsAmf0Any::number(u->exit_signal));  
390 - data->set("processor", SrsAmf0Any::number(u->processor));  
391 - data->set("rt_priority", SrsAmf0Any::number(u->rt_priority));  
392 - data->set("policy", SrsAmf0Any::number(u->policy));  
393 - data->set("delayacct_blkio_ticks", SrsAmf0Any::number(u->delayacct_blkio_ticks));  
394 - data->set("guest_time", SrsAmf0Any::number(u->guest_time));  
395 - data->set("cguest_time", SrsAmf0Any::number(u->cguest_time)); 349 + data->set("ok", SrsJsonAny::boolean(u->ok));
  350 + data->set("sample_time", SrsJsonAny::number(u->sample_time));
  351 + data->set("percent", SrsJsonAny::number(u->percent));
  352 + data->set("pid", SrsJsonAny::number(u->pid));
  353 + data->set("comm", SrsJsonAny::str(u->comm));
  354 + data->set("state", SrsJsonAny::str(state.c_str()));
  355 + data->set("ppid", SrsJsonAny::number(u->ppid));
  356 + data->set("pgrp", SrsJsonAny::number(u->pgrp));
  357 + data->set("session", SrsJsonAny::number(u->session));
  358 + data->set("tty_nr", SrsJsonAny::number(u->tty_nr));
  359 + data->set("tpgid", SrsJsonAny::number(u->tpgid));
  360 + data->set("flags", SrsJsonAny::number(u->flags));
  361 + data->set("minflt", SrsJsonAny::number(u->minflt));
  362 + data->set("cminflt", SrsJsonAny::number(u->cminflt));
  363 + data->set("majflt", SrsJsonAny::number(u->majflt));
  364 + data->set("cmajflt", SrsJsonAny::number(u->cmajflt));
  365 + data->set("utime", SrsJsonAny::number(u->utime));
  366 + data->set("stime", SrsJsonAny::number(u->stime));
  367 + data->set("cutime", SrsJsonAny::number(u->cutime));
  368 + data->set("cstime", SrsJsonAny::number(u->cstime));
  369 + data->set("priority", SrsJsonAny::number(u->priority));
  370 + data->set("nice", SrsJsonAny::number(u->nice));
  371 + data->set("num_threads", SrsJsonAny::number(u->num_threads));
  372 + data->set("itrealvalue", SrsJsonAny::number(u->itrealvalue));
  373 + data->set("starttime", SrsJsonAny::number(u->starttime));
  374 + data->set("vsize", SrsJsonAny::number(u->vsize));
  375 + data->set("rss", SrsJsonAny::number(u->rss));
  376 + data->set("rsslim", SrsJsonAny::number(u->rsslim));
  377 + data->set("startcode", SrsJsonAny::number(u->startcode));
  378 + data->set("endcode", SrsJsonAny::number(u->endcode));
  379 + data->set("startstack", SrsJsonAny::number(u->startstack));
  380 + data->set("kstkesp", SrsJsonAny::number(u->kstkesp));
  381 + data->set("kstkeip", SrsJsonAny::number(u->kstkeip));
  382 + data->set("signal", SrsJsonAny::number(u->signal));
  383 + data->set("blocked", SrsJsonAny::number(u->blocked));
  384 + data->set("sigignore", SrsJsonAny::number(u->sigignore));
  385 + data->set("sigcatch", SrsJsonAny::number(u->sigcatch));
  386 + data->set("wchan", SrsJsonAny::number(u->wchan));
  387 + data->set("nswap", SrsJsonAny::number(u->nswap));
  388 + data->set("cnswap", SrsJsonAny::number(u->cnswap));
  389 + data->set("exit_signal", SrsJsonAny::number(u->exit_signal));
  390 + data->set("processor", SrsJsonAny::number(u->processor));
  391 + data->set("rt_priority", SrsJsonAny::number(u->rt_priority));
  392 + data->set("policy", SrsJsonAny::number(u->policy));
  393 + data->set("delayacct_blkio_ticks", SrsJsonAny::number(u->delayacct_blkio_ticks));
  394 + data->set("guest_time", SrsJsonAny::number(u->guest_time));
  395 + data->set("cguest_time", SrsJsonAny::number(u->cguest_time));
396 396
397 return srs_api_response(w, r, obj->to_json()); 397 return srs_api_response(w, r, obj->to_json());
398 } 398 }
@@ -409,29 +409,29 @@ int SrsGoApiSystemProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa @@ -409,29 +409,29 @@ int SrsGoApiSystemProcStats::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessa
409 { 409 {
410 SrsStatistic* stat = SrsStatistic::instance(); 410 SrsStatistic* stat = SrsStatistic::instance();
411 411
412 - SrsAmf0Object* obj = SrsAmf0Any::object();  
413 - SrsAutoFree(SrsAmf0Object, obj); 412 + SrsJsonObject* obj = SrsJsonAny::object();
  413 + SrsAutoFree(SrsJsonObject, obj);
414 414
415 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
416 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 415 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  416 + obj->set("server", SrsJsonAny::number(stat->server_id()));
417 417
418 - SrsAmf0Object* data = SrsAmf0Any::object(); 418 + SrsJsonObject* data = SrsJsonAny::object();
419 obj->set("data", data); 419 obj->set("data", data);
420 420
421 SrsProcSystemStat* s = srs_get_system_proc_stat(); 421 SrsProcSystemStat* s = srs_get_system_proc_stat();
422 422
423 - data->set("ok", SrsAmf0Any::boolean(s->ok));  
424 - data->set("sample_time", SrsAmf0Any::number(s->sample_time));  
425 - data->set("percent", SrsAmf0Any::number(s->percent));  
426 - data->set("user", SrsAmf0Any::number(s->user));  
427 - data->set("nice", SrsAmf0Any::number(s->nice));  
428 - data->set("sys", SrsAmf0Any::number(s->sys));  
429 - data->set("idle", SrsAmf0Any::number(s->idle));  
430 - data->set("iowait", SrsAmf0Any::number(s->iowait));  
431 - data->set("irq", SrsAmf0Any::number(s->irq));  
432 - data->set("softirq", SrsAmf0Any::number(s->softirq));  
433 - data->set("steal", SrsAmf0Any::number(s->steal));  
434 - data->set("guest", SrsAmf0Any::number(s->guest)); 423 + data->set("ok", SrsJsonAny::boolean(s->ok));
  424 + data->set("sample_time", SrsJsonAny::number(s->sample_time));
  425 + data->set("percent", SrsJsonAny::number(s->percent));
  426 + data->set("user", SrsJsonAny::number(s->user));
  427 + data->set("nice", SrsJsonAny::number(s->nice));
  428 + data->set("sys", SrsJsonAny::number(s->sys));
  429 + data->set("idle", SrsJsonAny::number(s->idle));
  430 + data->set("iowait", SrsJsonAny::number(s->iowait));
  431 + data->set("irq", SrsJsonAny::number(s->irq));
  432 + data->set("softirq", SrsJsonAny::number(s->softirq));
  433 + data->set("steal", SrsJsonAny::number(s->steal));
  434 + data->set("guest", SrsJsonAny::number(s->guest));
435 435
436 return srs_api_response(w, r, obj->to_json()); 436 return srs_api_response(w, r, obj->to_json());
437 } 437 }
@@ -448,30 +448,30 @@ int SrsGoApiMemInfos::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -448,30 +448,30 @@ int SrsGoApiMemInfos::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
448 { 448 {
449 SrsStatistic* stat = SrsStatistic::instance(); 449 SrsStatistic* stat = SrsStatistic::instance();
450 450
451 - SrsAmf0Object* obj = SrsAmf0Any::object();  
452 - SrsAutoFree(SrsAmf0Object, obj); 451 + SrsJsonObject* obj = SrsJsonAny::object();
  452 + SrsAutoFree(SrsJsonObject, obj);
453 453
454 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
455 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 454 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  455 + obj->set("server", SrsJsonAny::number(stat->server_id()));
456 456
457 - SrsAmf0Object* data = SrsAmf0Any::object(); 457 + SrsJsonObject* data = SrsJsonAny::object();
458 obj->set("data", data); 458 obj->set("data", data);
459 459
460 SrsMemInfo* m = srs_get_meminfo(); 460 SrsMemInfo* m = srs_get_meminfo();
461 461
462 - data->set("ok", SrsAmf0Any::boolean(m->ok));  
463 - data->set("sample_time", SrsAmf0Any::number(m->sample_time));  
464 - data->set("percent_ram", SrsAmf0Any::number(m->percent_ram));  
465 - data->set("percent_swap", SrsAmf0Any::number(m->percent_swap));  
466 - data->set("MemActive", SrsAmf0Any::number(m->MemActive));  
467 - data->set("RealInUse", SrsAmf0Any::number(m->RealInUse));  
468 - data->set("NotInUse", SrsAmf0Any::number(m->NotInUse));  
469 - data->set("MemTotal", SrsAmf0Any::number(m->MemTotal));  
470 - data->set("MemFree", SrsAmf0Any::number(m->MemFree));  
471 - data->set("Buffers", SrsAmf0Any::number(m->Buffers));  
472 - data->set("Cached", SrsAmf0Any::number(m->Cached));  
473 - data->set("SwapTotal", SrsAmf0Any::number(m->SwapTotal));  
474 - data->set("SwapFree", SrsAmf0Any::number(m->SwapFree)); 462 + data->set("ok", SrsJsonAny::boolean(m->ok));
  463 + data->set("sample_time", SrsJsonAny::number(m->sample_time));
  464 + data->set("percent_ram", SrsJsonAny::number(m->percent_ram));
  465 + data->set("percent_swap", SrsJsonAny::number(m->percent_swap));
  466 + data->set("MemActive", SrsJsonAny::number(m->MemActive));
  467 + data->set("RealInUse", SrsJsonAny::number(m->RealInUse));
  468 + data->set("NotInUse", SrsJsonAny::number(m->NotInUse));
  469 + data->set("MemTotal", SrsJsonAny::number(m->MemTotal));
  470 + data->set("MemFree", SrsJsonAny::number(m->MemFree));
  471 + data->set("Buffers", SrsJsonAny::number(m->Buffers));
  472 + data->set("Cached", SrsJsonAny::number(m->Cached));
  473 + data->set("SwapTotal", SrsJsonAny::number(m->SwapTotal));
  474 + data->set("SwapFree", SrsJsonAny::number(m->SwapFree));
475 475
476 return srs_api_response(w, r, obj->to_json()); 476 return srs_api_response(w, r, obj->to_json());
477 } 477 }
@@ -488,21 +488,21 @@ int SrsGoApiAuthors::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -488,21 +488,21 @@ int SrsGoApiAuthors::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
488 { 488 {
489 SrsStatistic* stat = SrsStatistic::instance(); 489 SrsStatistic* stat = SrsStatistic::instance();
490 490
491 - SrsAmf0Object* obj = SrsAmf0Any::object();  
492 - SrsAutoFree(SrsAmf0Object, obj); 491 + SrsJsonObject* obj = SrsJsonAny::object();
  492 + SrsAutoFree(SrsJsonObject, obj);
493 493
494 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
495 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 494 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  495 + obj->set("server", SrsJsonAny::number(stat->server_id()));
496 496
497 - SrsAmf0Object* data = SrsAmf0Any::object(); 497 + SrsJsonObject* data = SrsJsonAny::object();
498 obj->set("data", data); 498 obj->set("data", data);
499 499
500 - data->set("primary", SrsAmf0Any::str(RTMP_SIG_SRS_PRIMARY));  
501 - data->set("license", SrsAmf0Any::str(RTMP_SIG_SRS_LICENSE));  
502 - data->set("copyright", SrsAmf0Any::str(RTMP_SIG_SRS_COPYRIGHT));  
503 - data->set("authors", SrsAmf0Any::str(RTMP_SIG_SRS_AUTHROS));  
504 - data->set("contributors_link", SrsAmf0Any::str(RTMP_SIG_SRS_CONTRIBUTORS_URL));  
505 - data->set("contributors", SrsAmf0Any::str(SRS_AUTO_CONSTRIBUTORS)); 500 + data->set("primary", SrsJsonAny::str(RTMP_SIG_SRS_PRIMARY));
  501 + data->set("license", SrsJsonAny::str(RTMP_SIG_SRS_LICENSE));
  502 + data->set("copyright", SrsJsonAny::str(RTMP_SIG_SRS_COPYRIGHT));
  503 + data->set("authors", SrsJsonAny::str(RTMP_SIG_SRS_AUTHROS));
  504 + data->set("contributors_link", SrsJsonAny::str(RTMP_SIG_SRS_CONTRIBUTORS_URL));
  505 + data->set("contributors", SrsJsonAny::str(SRS_AUTO_CONSTRIBUTORS));
506 506
507 return srs_api_response(w, r, obj->to_json()); 507 return srs_api_response(w, r, obj->to_json());
508 } 508 }
@@ -519,107 +519,107 @@ int SrsGoApiFeatures::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -519,107 +519,107 @@ int SrsGoApiFeatures::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
519 { 519 {
520 SrsStatistic* stat = SrsStatistic::instance(); 520 SrsStatistic* stat = SrsStatistic::instance();
521 521
522 - SrsAmf0Object* obj = SrsAmf0Any::object();  
523 - SrsAutoFree(SrsAmf0Object, obj); 522 + SrsJsonObject* obj = SrsJsonAny::object();
  523 + SrsAutoFree(SrsJsonObject, obj);
524 524
525 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
526 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 525 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  526 + obj->set("server", SrsJsonAny::number(stat->server_id()));
527 527
528 - SrsAmf0Object* data = SrsAmf0Any::object(); 528 + SrsJsonObject* data = SrsJsonAny::object();
529 obj->set("data", data); 529 obj->set("data", data);
530 530
531 - data->set("options", SrsAmf0Any::str(SRS_AUTO_USER_CONFIGURE));  
532 - data->set("options2", SrsAmf0Any::str(SRS_AUTO_CONFIGURE));  
533 - data->set("build", SrsAmf0Any::str(SRS_AUTO_BUILD_DATE));  
534 - data->set("build2", SrsAmf0Any::str(SRS_AUTO_BUILD_TS)); 531 + data->set("options", SrsJsonAny::str(SRS_AUTO_USER_CONFIGURE));
  532 + data->set("options2", SrsJsonAny::str(SRS_AUTO_CONFIGURE));
  533 + data->set("build", SrsJsonAny::str(SRS_AUTO_BUILD_DATE));
  534 + data->set("build2", SrsJsonAny::str(SRS_AUTO_BUILD_TS));
535 535
536 - SrsAmf0Object* features = SrsAmf0Any::object(); 536 + SrsJsonObject* features = SrsJsonAny::object();
537 data->set("features", features); 537 data->set("features", features);
538 538
539 #ifdef SRS_AUTO_SSL 539 #ifdef SRS_AUTO_SSL
540 - features->set("ssl", SrsAmf0Any::boolean(true)); 540 + features->set("ssl", SrsJsonAny::boolean(true));
541 #else 541 #else
542 - features->set("ssl", SrsAmf0Any::boolean(false)); 542 + features->set("ssl", SrsJsonAny::boolean(false));
543 #endif 543 #endif
544 #ifdef SRS_AUTO_HLS 544 #ifdef SRS_AUTO_HLS
545 - features->set("hls", SrsAmf0Any::boolean(true)); 545 + features->set("hls", SrsJsonAny::boolean(true));
546 #else 546 #else
547 - features->set("hls", SrsAmf0Any::boolean(false)); 547 + features->set("hls", SrsJsonAny::boolean(false));
548 #endif 548 #endif
549 #ifdef SRS_AUTO_HDS 549 #ifdef SRS_AUTO_HDS
550 - features->set("hds", SrsAmf0Any::boolean(true)); 550 + features->set("hds", SrsJsonAny::boolean(true));
551 #else 551 #else
552 - features->set("hds", SrsAmf0Any::boolean(false)); 552 + features->set("hds", SrsJsonAny::boolean(false));
553 #endif 553 #endif
554 #ifdef SRS_AUTO_HTTP_CALLBACK 554 #ifdef SRS_AUTO_HTTP_CALLBACK
555 - features->set("callback", SrsAmf0Any::boolean(true)); 555 + features->set("callback", SrsJsonAny::boolean(true));
556 #else 556 #else
557 - features->set("callback", SrsAmf0Any::boolean(false)); 557 + features->set("callback", SrsJsonAny::boolean(false));
558 #endif 558 #endif
559 #ifdef SRS_AUTO_HTTP_API 559 #ifdef SRS_AUTO_HTTP_API
560 - features->set("api", SrsAmf0Any::boolean(true)); 560 + features->set("api", SrsJsonAny::boolean(true));
561 #else 561 #else
562 - features->set("api", SrsAmf0Any::boolean(false)); 562 + features->set("api", SrsJsonAny::boolean(false));
563 #endif 563 #endif
564 #ifdef SRS_AUTO_HTTP_SERVER 564 #ifdef SRS_AUTO_HTTP_SERVER
565 - features->set("httpd", SrsAmf0Any::boolean(true)); 565 + features->set("httpd", SrsJsonAny::boolean(true));
566 #else 566 #else
567 - features->set("httpd", SrsAmf0Any::boolean(false)); 567 + features->set("httpd", SrsJsonAny::boolean(false));
568 #endif 568 #endif
569 #ifdef SRS_AUTO_DVR 569 #ifdef SRS_AUTO_DVR
570 - features->set("dvr", SrsAmf0Any::boolean(true)); 570 + features->set("dvr", SrsJsonAny::boolean(true));
571 #else 571 #else
572 - features->set("dvr", SrsAmf0Any::boolean(false)); 572 + features->set("dvr", SrsJsonAny::boolean(false));
573 #endif 573 #endif
574 #ifdef SRS_AUTO_TRANSCODE 574 #ifdef SRS_AUTO_TRANSCODE
575 - features->set("transcode", SrsAmf0Any::boolean(true)); 575 + features->set("transcode", SrsJsonAny::boolean(true));
576 #else 576 #else
577 - features->set("transcode", SrsAmf0Any::boolean(false)); 577 + features->set("transcode", SrsJsonAny::boolean(false));
578 #endif 578 #endif
579 #ifdef SRS_AUTO_INGEST 579 #ifdef SRS_AUTO_INGEST
580 - features->set("ingest", SrsAmf0Any::boolean(true)); 580 + features->set("ingest", SrsJsonAny::boolean(true));
581 #else 581 #else
582 - features->set("ingest", SrsAmf0Any::boolean(false)); 582 + features->set("ingest", SrsJsonAny::boolean(false));
583 #endif 583 #endif
584 #ifdef SRS_AUTO_STAT 584 #ifdef SRS_AUTO_STAT
585 - features->set("stat", SrsAmf0Any::boolean(true)); 585 + features->set("stat", SrsJsonAny::boolean(true));
586 #else 586 #else
587 - features->set("stat", SrsAmf0Any::boolean(false)); 587 + features->set("stat", SrsJsonAny::boolean(false));
588 #endif 588 #endif
589 #ifdef SRS_AUTO_NGINX 589 #ifdef SRS_AUTO_NGINX
590 - features->set("nginx", SrsAmf0Any::boolean(true)); 590 + features->set("nginx", SrsJsonAny::boolean(true));
591 #else 591 #else
592 - features->set("nginx", SrsAmf0Any::boolean(false)); 592 + features->set("nginx", SrsJsonAny::boolean(false));
593 #endif 593 #endif
594 #ifdef SRS_AUTO_FFMPEG_TOOL 594 #ifdef SRS_AUTO_FFMPEG_TOOL
595 - features->set("ffmpeg", SrsAmf0Any::boolean(true)); 595 + features->set("ffmpeg", SrsJsonAny::boolean(true));
596 #else 596 #else
597 - features->set("ffmpeg", SrsAmf0Any::boolean(false)); 597 + features->set("ffmpeg", SrsJsonAny::boolean(false));
598 #endif 598 #endif
599 #ifdef SRS_AUTO_STREAM_CASTER 599 #ifdef SRS_AUTO_STREAM_CASTER
600 - features->set("caster", SrsAmf0Any::boolean(true)); 600 + features->set("caster", SrsJsonAny::boolean(true));
601 #else 601 #else
602 - features->set("caster", SrsAmf0Any::boolean(false)); 602 + features->set("caster", SrsJsonAny::boolean(false));
603 #endif 603 #endif
604 #ifdef SRS_PERF_COMPLEX_SEND 604 #ifdef SRS_PERF_COMPLEX_SEND
605 - features->set("complex_send", SrsAmf0Any::boolean(true)); 605 + features->set("complex_send", SrsJsonAny::boolean(true));
606 #else 606 #else
607 - features->set("complex_send", SrsAmf0Any::boolean(false)); 607 + features->set("complex_send", SrsJsonAny::boolean(false));
608 #endif 608 #endif
609 #ifdef SRS_PERF_TCP_NODELAY 609 #ifdef SRS_PERF_TCP_NODELAY
610 - features->set("tcp_nodelay", SrsAmf0Any::boolean(true)); 610 + features->set("tcp_nodelay", SrsJsonAny::boolean(true));
611 #else 611 #else
612 - features->set("tcp_nodelay", SrsAmf0Any::boolean(false)); 612 + features->set("tcp_nodelay", SrsJsonAny::boolean(false));
613 #endif 613 #endif
614 #ifdef SRS_PERF_SO_SNDBUF_SIZE 614 #ifdef SRS_PERF_SO_SNDBUF_SIZE
615 - features->set("so_sendbuf", SrsAmf0Any::boolean(true)); 615 + features->set("so_sendbuf", SrsJsonAny::boolean(true));
616 #else 616 #else
617 - features->set("so_sendbuf", SrsAmf0Any::boolean(false)); 617 + features->set("so_sendbuf", SrsJsonAny::boolean(false));
618 #endif 618 #endif
619 #ifdef SRS_PERF_MERGED_READ 619 #ifdef SRS_PERF_MERGED_READ
620 - features->set("mr", SrsAmf0Any::boolean(true)); 620 + features->set("mr", SrsJsonAny::boolean(true));
621 #else 621 #else
622 - features->set("mr", SrsAmf0Any::boolean(false)); 622 + features->set("mr", SrsJsonAny::boolean(false));
623 #endif 623 #endif
624 624
625 return srs_api_response(w, r, obj->to_json()); 625 return srs_api_response(w, r, obj->to_json());
@@ -637,40 +637,40 @@ int SrsGoApiRequests::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -637,40 +637,40 @@ int SrsGoApiRequests::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
637 { 637 {
638 SrsStatistic* stat = SrsStatistic::instance(); 638 SrsStatistic* stat = SrsStatistic::instance();
639 639
640 - SrsAmf0Object* obj = SrsAmf0Any::object();  
641 - SrsAutoFree(SrsAmf0Object, obj); 640 + SrsJsonObject* obj = SrsJsonAny::object();
  641 + SrsAutoFree(SrsJsonObject, obj);
642 642
643 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
644 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 643 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  644 + obj->set("server", SrsJsonAny::number(stat->server_id()));
645 645
646 - SrsAmf0Object* data = SrsAmf0Any::object(); 646 + SrsJsonObject* data = SrsJsonAny::object();
647 obj->set("data", data); 647 obj->set("data", data);
648 648
649 - data->set("uri", SrsAmf0Any::str(r->uri().c_str()));  
650 - data->set("path", SrsAmf0Any::str(r->path().c_str())); 649 + data->set("uri", SrsJsonAny::str(r->uri().c_str()));
  650 + data->set("path", SrsJsonAny::str(r->path().c_str()));
651 651
652 // method 652 // method
653 - data->set("METHOD", SrsAmf0Any::str(r->method_str().c_str())); 653 + data->set("METHOD", SrsJsonAny::str(r->method_str().c_str()));
654 654
655 // request headers 655 // request headers
656 - SrsAmf0Object* headers = SrsAmf0Any::object(); 656 + SrsJsonObject* headers = SrsJsonAny::object();
657 data->set("headers", headers); 657 data->set("headers", headers);
658 658
659 for (int i = 0; i < r->request_header_count(); i++) { 659 for (int i = 0; i < r->request_header_count(); i++) {
660 std::string key = r->request_header_key_at(i); 660 std::string key = r->request_header_key_at(i);
661 std::string value = r->request_header_value_at(i); 661 std::string value = r->request_header_value_at(i);
662 - headers->set(key, SrsAmf0Any::str(value.c_str())); 662 + headers->set(key, SrsJsonAny::str(value.c_str()));
663 } 663 }
664 664
665 // server informations 665 // server informations
666 - SrsAmf0Object* server = SrsAmf0Any::object(); 666 + SrsJsonObject* server = SrsJsonAny::object();
667 data->set("headers", server); 667 data->set("headers", server);
668 668
669 - server->set("sigature", SrsAmf0Any::str(RTMP_SIG_SRS_KEY));  
670 - server->set("name", SrsAmf0Any::str(RTMP_SIG_SRS_NAME));  
671 - server->set("version", SrsAmf0Any::str(RTMP_SIG_SRS_VERSION));  
672 - server->set("link", SrsAmf0Any::str(RTMP_SIG_SRS_URL));  
673 - server->set("time", SrsAmf0Any::number(srs_get_system_time_ms())); 669 + server->set("sigature", SrsJsonAny::str(RTMP_SIG_SRS_KEY));
  670 + server->set("name", SrsJsonAny::str(RTMP_SIG_SRS_NAME));
  671 + server->set("version", SrsJsonAny::str(RTMP_SIG_SRS_VERSION));
  672 + server->set("link", SrsJsonAny::str(RTMP_SIG_SRS_URL));
  673 + server->set("time", SrsJsonAny::number(srs_get_system_time_ms()));
674 674
675 return srs_api_response(w, r, obj->to_json()); 675 return srs_api_response(w, r, obj->to_json());
676 } 676 }
@@ -700,22 +700,22 @@ int SrsGoApiVhosts::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -700,22 +700,22 @@ int SrsGoApiVhosts::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
700 return srs_api_response_code(w, r, ret); 700 return srs_api_response_code(w, r, ret);
701 } 701 }
702 702
703 - SrsAmf0Object* obj = SrsAmf0Any::object();  
704 - SrsAutoFree(SrsAmf0Object, obj); 703 + SrsJsonObject* obj = SrsJsonAny::object();
  704 + SrsAutoFree(SrsJsonObject, obj);
705 705
706 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
707 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 706 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  707 + obj->set("server", SrsJsonAny::number(stat->server_id()));
708 708
709 if (r->is_http_get()) { 709 if (r->is_http_get()) {
710 if (!vhost) { 710 if (!vhost) {
711 - SrsAmf0StrictArray* data = SrsAmf0Any::strict_array(); 711 + SrsJsonArray* data = SrsJsonAny::array();
712 obj->set("vhosts", data); 712 obj->set("vhosts", data);
713 713
714 if ((ret = stat->dumps_vhosts(data)) != ERROR_SUCCESS) { 714 if ((ret = stat->dumps_vhosts(data)) != ERROR_SUCCESS) {
715 return srs_api_response_code(w, r, ret); 715 return srs_api_response_code(w, r, ret);
716 } 716 }
717 } else { 717 } else {
718 - SrsAmf0Object* data = SrsAmf0Any::object(); 718 + SrsJsonObject* data = SrsJsonAny::object();
719 obj->set("vhost", data);; 719 obj->set("vhost", data);;
720 720
721 if ((ret = vhost->dumps(data)) != ERROR_SUCCESS) { 721 if ((ret = vhost->dumps(data)) != ERROR_SUCCESS) {
@@ -754,22 +754,22 @@ int SrsGoApiStreams::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -754,22 +754,22 @@ int SrsGoApiStreams::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
754 return srs_api_response_code(w, r, ret); 754 return srs_api_response_code(w, r, ret);
755 } 755 }
756 756
757 - SrsAmf0Object* obj = SrsAmf0Any::object();  
758 - SrsAutoFree(SrsAmf0Object, obj); 757 + SrsJsonObject* obj = SrsJsonAny::object();
  758 + SrsAutoFree(SrsJsonObject, obj);
759 759
760 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
761 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 760 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  761 + obj->set("server", SrsJsonAny::number(stat->server_id()));
762 762
763 if (r->is_http_get()) { 763 if (r->is_http_get()) {
764 if (!stream) { 764 if (!stream) {
765 - SrsAmf0StrictArray* data = SrsAmf0Any::strict_array(); 765 + SrsJsonArray* data = SrsJsonAny::array();
766 obj->set("streams", data); 766 obj->set("streams", data);
767 767
768 if ((ret = stat->dumps_streams(data)) != ERROR_SUCCESS) { 768 if ((ret = stat->dumps_streams(data)) != ERROR_SUCCESS) {
769 return srs_api_response_code(w, r, ret); 769 return srs_api_response_code(w, r, ret);
770 } 770 }
771 } else { 771 } else {
772 - SrsAmf0Object* data = SrsAmf0Any::object(); 772 + SrsJsonObject* data = SrsJsonAny::object();
773 obj->set("stream", data);; 773 obj->set("stream", data);;
774 774
775 if ((ret = stream->dumps(data)) != ERROR_SUCCESS) { 775 if ((ret = stream->dumps(data)) != ERROR_SUCCESS) {
@@ -808,22 +808,22 @@ int SrsGoApiClients::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -808,22 +808,22 @@ int SrsGoApiClients::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
808 return srs_api_response_code(w, r, ret); 808 return srs_api_response_code(w, r, ret);
809 } 809 }
810 810
811 - SrsAmf0Object* obj = SrsAmf0Any::object();  
812 - SrsAutoFree(SrsAmf0Object, obj); 811 + SrsJsonObject* obj = SrsJsonAny::object();
  812 + SrsAutoFree(SrsJsonObject, obj);
813 813
814 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS));  
815 - obj->set("server", SrsAmf0Any::number(stat->server_id())); 814 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
  815 + obj->set("server", SrsJsonAny::number(stat->server_id()));
816 816
817 if (r->is_http_get()) { 817 if (r->is_http_get()) {
818 if (!client) { 818 if (!client) {
819 - SrsAmf0StrictArray* data = SrsAmf0Any::strict_array(); 819 + SrsJsonArray* data = SrsJsonAny::array();
820 obj->set("clients", data); 820 obj->set("clients", data);
821 821
822 if ((ret = stat->dumps_clients(data, 0, 10)) != ERROR_SUCCESS) { 822 if ((ret = stat->dumps_clients(data, 0, 10)) != ERROR_SUCCESS) {
823 return srs_api_response_code(w, r, ret); 823 return srs_api_response_code(w, r, ret);
824 } 824 }
825 } else { 825 } else {
826 - SrsAmf0Object* data = SrsAmf0Any::object(); 826 + SrsJsonObject* data = SrsJsonAny::object();
827 obj->set("client", data);; 827 obj->set("client", data);;
828 828
829 if ((ret = client->dumps(data)) != ERROR_SUCCESS) { 829 if ((ret = client->dumps(data)) != ERROR_SUCCESS) {
@@ -870,9 +870,9 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -870,9 +870,9 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
870 std::string rpc = r->query_get("rpc"); 870 std::string rpc = r->query_get("rpc");
871 871
872 // the object to return for request. 872 // the object to return for request.
873 - SrsAmf0Object* obj = SrsAmf0Any::object();  
874 - SrsAutoFree(SrsAmf0Object, obj);  
875 - obj->set("code", SrsAmf0Any::number(ERROR_SUCCESS)); 873 + SrsJsonObject* obj = SrsJsonAny::object();
  874 + SrsAutoFree(SrsJsonObject, obj);
  875 + obj->set("code", SrsJsonAny::number(ERROR_SUCCESS));
876 876
877 // for rpc=raw, to query the raw api config for http api. 877 // for rpc=raw, to query the raw api config for http api.
878 if (rpc == "raw") { 878 if (rpc == "raw") {
@@ -952,14 +952,14 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -952,14 +952,14 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
952 return srs_api_response_code(w, r, ret); 952 return srs_api_response_code(w, r, ret);
953 } 953 }
954 954
955 - SrsAmf0Object* data = SrsAmf0Any::object(); 955 + SrsJsonObject* data = SrsJsonAny::object();
956 obj->set("vhost", data); 956 obj->set("vhost", data);
957 if ((ret = _srs_config->vhost_to_json(conf, data)) != ERROR_SUCCESS) { 957 if ((ret = _srs_config->vhost_to_json(conf, data)) != ERROR_SUCCESS) {
958 srs_error("raw api query vhost failed. ret=%d", ret); 958 srs_error("raw api query vhost failed. ret=%d", ret);
959 return srs_api_response_code(w, r, ret); 959 return srs_api_response_code(w, r, ret);
960 } 960 }
961 } else if (scope == "minimal") { 961 } else if (scope == "minimal") {
962 - SrsAmf0Object* data = SrsAmf0Any::object(); 962 + SrsJsonObject* data = SrsJsonAny::object();
963 obj->set("minimal", data); 963 obj->set("minimal", data);
964 964
965 // query minimal scope. 965 // query minimal scope.
@@ -968,7 +968,7 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r) @@ -968,7 +968,7 @@ int SrsGoApiRaw::serve_http(ISrsHttpResponseWriter* w, ISrsHttpMessage* r)
968 return srs_api_response_code(w, r, ret); 968 return srs_api_response_code(w, r, ret);
969 } 969 }
970 } else { 970 } else {
971 - SrsAmf0Object* data = SrsAmf0Any::object(); 971 + SrsJsonObject* data = SrsJsonAny::object();
972 obj->set("global", data); 972 obj->set("global", data);
973 973
974 // query global scope. 974 // query global scope.
@@ -63,16 +63,16 @@ int SrsHttpHooks::on_connect(string url, SrsRequest* req) @@ -63,16 +63,16 @@ int SrsHttpHooks::on_connect(string url, SrsRequest* req)
63 63
64 int client_id = _srs_context->get_id(); 64 int client_id = _srs_context->get_id();
65 65
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())); 66 + SrsJsonObject* obj = SrsJsonAny::object();
  67 + SrsAutoFree(SrsJsonObject, obj);
  68 +
  69 + obj->set("action", SrsJsonAny::str("on_connect"));
  70 + obj->set("client_id", SrsJsonAny::number(client_id));
  71 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  72 + obj->set("vhost", SrsJsonAny::str(req->vhost.c_str()));
  73 + obj->set("app", SrsJsonAny::str(req->app.c_str()));
  74 + obj->set("tcUrl", SrsJsonAny::str(req->tcUrl.c_str()));
  75 + obj->set("pageUrl", SrsJsonAny::str(req->pageUrl.c_str()));
76 76
77 std::string data = obj->to_json(); 77 std::string data = obj->to_json();
78 std::string res; 78 std::string res;
@@ -99,16 +99,16 @@ void SrsHttpHooks::on_close(string url, SrsRequest* req, int64_t send_bytes, int @@ -99,16 +99,16 @@ void SrsHttpHooks::on_close(string url, SrsRequest* req, int64_t send_bytes, int
99 99
100 int client_id = _srs_context->get_id(); 100 int client_id = _srs_context->get_id();
101 101
102 - SrsAmf0Object* obj = SrsAmf0Any::object();  
103 - SrsAutoFree(SrsAmf0Object, obj); 102 + SrsJsonObject* obj = SrsJsonAny::object();
  103 + SrsAutoFree(SrsJsonObject, obj);
104 104
105 - obj->set("action", SrsAmf0Any::str("on_close"));  
106 - obj->set("client_id", SrsAmf0Any::number(client_id));  
107 - obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));  
108 - obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));  
109 - obj->set("app", SrsAmf0Any::str(req->app.c_str()));  
110 - obj->set("send_bytes", SrsAmf0Any::number(send_bytes));  
111 - obj->set("recv_bytes", SrsAmf0Any::number(recv_bytes)); 105 + obj->set("action", SrsJsonAny::str("on_close"));
  106 + obj->set("client_id", SrsJsonAny::number(client_id));
  107 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  108 + obj->set("vhost", SrsJsonAny::str(req->vhost.c_str()));
  109 + obj->set("app", SrsJsonAny::str(req->app.c_str()));
  110 + obj->set("send_bytes", SrsJsonAny::number(send_bytes));
  111 + obj->set("recv_bytes", SrsJsonAny::number(recv_bytes));
112 112
113 std::string data = obj->to_json(); 113 std::string data = obj->to_json();
114 std::string res; 114 std::string res;
@@ -135,15 +135,15 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req) @@ -135,15 +135,15 @@ int SrsHttpHooks::on_publish(string url, SrsRequest* req)
135 135
136 int client_id = _srs_context->get_id(); 136 int client_id = _srs_context->get_id();
137 137
138 - SrsAmf0Object* obj = SrsAmf0Any::object();  
139 - SrsAutoFree(SrsAmf0Object, obj); 138 + SrsJsonObject* obj = SrsJsonAny::object();
  139 + SrsAutoFree(SrsJsonObject, obj);
140 140
141 - obj->set("action", SrsAmf0Any::str("on_publish"));  
142 - obj->set("client_id", SrsAmf0Any::number(client_id));  
143 - obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));  
144 - obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));  
145 - obj->set("app", SrsAmf0Any::str(req->app.c_str()));  
146 - obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); 141 + obj->set("action", SrsJsonAny::str("on_publish"));
  142 + obj->set("client_id", SrsJsonAny::number(client_id));
  143 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  144 + obj->set("vhost", SrsJsonAny::str(req->vhost.c_str()));
  145 + obj->set("app", SrsJsonAny::str(req->app.c_str()));
  146 + obj->set("stream", SrsJsonAny::str(req->stream.c_str()));
147 147
148 std::string data = obj->to_json(); 148 std::string data = obj->to_json();
149 std::string res; 149 std::string res;
@@ -170,15 +170,15 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req) @@ -170,15 +170,15 @@ void SrsHttpHooks::on_unpublish(string url, SrsRequest* req)
170 170
171 int client_id = _srs_context->get_id(); 171 int client_id = _srs_context->get_id();
172 172
173 - SrsAmf0Object* obj = SrsAmf0Any::object();  
174 - SrsAutoFree(SrsAmf0Object, obj); 173 + SrsJsonObject* obj = SrsJsonAny::object();
  174 + SrsAutoFree(SrsJsonObject, obj);
175 175
176 - obj->set("action", SrsAmf0Any::str("on_unpublish"));  
177 - obj->set("client_id", SrsAmf0Any::number(client_id));  
178 - obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));  
179 - obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));  
180 - obj->set("app", SrsAmf0Any::str(req->app.c_str()));  
181 - obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); 176 + obj->set("action", SrsJsonAny::str("on_unpublish"));
  177 + obj->set("client_id", SrsJsonAny::number(client_id));
  178 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  179 + obj->set("vhost", SrsJsonAny::str(req->vhost.c_str()));
  180 + obj->set("app", SrsJsonAny::str(req->app.c_str()));
  181 + obj->set("stream", SrsJsonAny::str(req->stream.c_str()));
182 182
183 std::string data = obj->to_json(); 183 std::string data = obj->to_json();
184 std::string res; 184 std::string res;
@@ -205,16 +205,16 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req) @@ -205,16 +205,16 @@ int SrsHttpHooks::on_play(string url, SrsRequest* req)
205 205
206 int client_id = _srs_context->get_id(); 206 int client_id = _srs_context->get_id();
207 207
208 - SrsAmf0Object* obj = SrsAmf0Any::object();  
209 - SrsAutoFree(SrsAmf0Object, obj); 208 + SrsJsonObject* obj = SrsJsonAny::object();
  209 + SrsAutoFree(SrsJsonObject, obj);
210 210
211 - obj->set("action", SrsAmf0Any::str("on_play"));  
212 - obj->set("client_id", SrsAmf0Any::number(client_id));  
213 - obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));  
214 - obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));  
215 - obj->set("app", SrsAmf0Any::str(req->app.c_str()));  
216 - obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));  
217 - obj->set("pageUrl", SrsAmf0Any::str(req->pageUrl.c_str())); 211 + obj->set("action", SrsJsonAny::str("on_play"));
  212 + obj->set("client_id", SrsJsonAny::number(client_id));
  213 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  214 + obj->set("vhost", SrsJsonAny::str(req->vhost.c_str()));
  215 + obj->set("app", SrsJsonAny::str(req->app.c_str()));
  216 + obj->set("stream", SrsJsonAny::str(req->stream.c_str()));
  217 + obj->set("pageUrl", SrsJsonAny::str(req->pageUrl.c_str()));
218 218
219 std::string data = obj->to_json(); 219 std::string data = obj->to_json();
220 std::string res; 220 std::string res;
@@ -241,15 +241,15 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req) @@ -241,15 +241,15 @@ void SrsHttpHooks::on_stop(string url, SrsRequest* req)
241 241
242 int client_id = _srs_context->get_id(); 242 int client_id = _srs_context->get_id();
243 243
244 - SrsAmf0Object* obj = SrsAmf0Any::object();  
245 - SrsAutoFree(SrsAmf0Object, obj); 244 + SrsJsonObject* obj = SrsJsonAny::object();
  245 + SrsAutoFree(SrsJsonObject, obj);
246 246
247 - obj->set("action", SrsAmf0Any::str("on_stop"));  
248 - obj->set("client_id", SrsAmf0Any::number(client_id));  
249 - obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));  
250 - obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));  
251 - obj->set("app", SrsAmf0Any::str(req->app.c_str()));  
252 - obj->set("stream", SrsAmf0Any::str(req->stream.c_str())); 247 + obj->set("action", SrsJsonAny::str("on_stop"));
  248 + obj->set("client_id", SrsJsonAny::number(client_id));
  249 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  250 + obj->set("vhost", SrsJsonAny::str(req->vhost.c_str()));
  251 + obj->set("app", SrsJsonAny::str(req->app.c_str()));
  252 + obj->set("stream", SrsJsonAny::str(req->stream.c_str()));
253 253
254 std::string data = obj->to_json(); 254 std::string data = obj->to_json();
255 std::string res; 255 std::string res;
@@ -277,17 +277,17 @@ int SrsHttpHooks::on_dvr(int cid, string url, SrsRequest* req, string file) @@ -277,17 +277,17 @@ int SrsHttpHooks::on_dvr(int cid, string url, SrsRequest* req, string file)
277 int client_id = cid; 277 int client_id = cid;
278 std::string cwd = _srs_config->cwd(); 278 std::string cwd = _srs_config->cwd();
279 279
280 - SrsAmf0Object* obj = SrsAmf0Any::object();  
281 - SrsAutoFree(SrsAmf0Object, obj);  
282 -  
283 - obj->set("action", SrsAmf0Any::str("on_dvr"));  
284 - obj->set("client_id", SrsAmf0Any::number(client_id));  
285 - obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));  
286 - obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));  
287 - obj->set("app", SrsAmf0Any::str(req->app.c_str()));  
288 - obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));  
289 - obj->set("cwd", SrsAmf0Any::str(cwd.c_str()));  
290 - obj->set("file", SrsAmf0Any::str(file.c_str())); 280 + SrsJsonObject* obj = SrsJsonAny::object();
  281 + SrsAutoFree(SrsJsonObject, obj);
  282 +
  283 + obj->set("action", SrsJsonAny::str("on_dvr"));
  284 + obj->set("client_id", SrsJsonAny::number(client_id));
  285 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  286 + obj->set("vhost", SrsJsonAny::str(req->vhost.c_str()));
  287 + obj->set("app", SrsJsonAny::str(req->app.c_str()));
  288 + obj->set("stream", SrsJsonAny::str(req->stream.c_str()));
  289 + obj->set("cwd", SrsJsonAny::str(cwd.c_str()));
  290 + obj->set("file", SrsJsonAny::str(file.c_str()));
291 291
292 std::string data = obj->to_json(); 292 std::string data = obj->to_json();
293 std::string res; 293 std::string res;
@@ -315,22 +315,22 @@ int SrsHttpHooks::on_hls(int cid, string url, SrsRequest* req, string file, stri @@ -315,22 +315,22 @@ int SrsHttpHooks::on_hls(int cid, string url, SrsRequest* req, string file, stri
315 int client_id = cid; 315 int client_id = cid;
316 std::string cwd = _srs_config->cwd(); 316 std::string cwd = _srs_config->cwd();
317 317
318 - SrsAmf0Object* obj = SrsAmf0Any::object();  
319 - SrsAutoFree(SrsAmf0Object, obj);  
320 -  
321 - obj->set("action", SrsAmf0Any::str("on_hls"));  
322 - obj->set("client_id", SrsAmf0Any::number(client_id));  
323 - obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));  
324 - obj->set("vhost", SrsAmf0Any::str(req->vhost.c_str()));  
325 - obj->set("app", SrsAmf0Any::str(req->app.c_str()));  
326 - obj->set("stream", SrsAmf0Any::str(req->stream.c_str()));  
327 - obj->set("duration", SrsAmf0Any::number(duration));  
328 - obj->set("cwd", SrsAmf0Any::str(cwd.c_str()));  
329 - obj->set("file", SrsAmf0Any::str(file.c_str()));  
330 - obj->set("url", SrsAmf0Any::str(url.c_str()));  
331 - obj->set("m3u8", SrsAmf0Any::str(m3u8.c_str()));  
332 - obj->set("m3u8_url", SrsAmf0Any::str(m3u8_url.c_str()));  
333 - obj->set("seq_no", SrsAmf0Any::number(sn)); 318 + SrsJsonObject* obj = SrsJsonAny::object();
  319 + SrsAutoFree(SrsJsonObject, obj);
  320 +
  321 + obj->set("action", SrsJsonAny::str("on_hls"));
  322 + obj->set("client_id", SrsJsonAny::number(client_id));
  323 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  324 + obj->set("vhost", SrsJsonAny::str(req->vhost.c_str()));
  325 + obj->set("app", SrsJsonAny::str(req->app.c_str()));
  326 + obj->set("stream", SrsJsonAny::str(req->stream.c_str()));
  327 + obj->set("duration", SrsJsonAny::number(duration));
  328 + obj->set("cwd", SrsJsonAny::str(cwd.c_str()));
  329 + obj->set("file", SrsJsonAny::str(file.c_str()));
  330 + obj->set("url", SrsJsonAny::str(url.c_str()));
  331 + obj->set("m3u8", SrsJsonAny::str(m3u8.c_str()));
  332 + obj->set("m3u8_url", SrsJsonAny::str(m3u8_url.c_str()));
  333 + obj->set("seq_no", SrsJsonAny::number(sn));
334 334
335 std::string data = obj->to_json(); 335 std::string data = obj->to_json();
336 std::string res; 336 std::string res;
@@ -58,7 +58,7 @@ SrsStatisticVhost::~SrsStatisticVhost() @@ -58,7 +58,7 @@ SrsStatisticVhost::~SrsStatisticVhost()
58 srs_freep(kbps); 58 srs_freep(kbps);
59 } 59 }
60 60
61 -int SrsStatisticVhost::dumps(SrsAmf0Object* obj) 61 +int SrsStatisticVhost::dumps(SrsJsonObject* obj)
62 { 62 {
63 int ret = ERROR_SUCCESS; 63 int ret = ERROR_SUCCESS;
64 64
@@ -66,26 +66,26 @@ int SrsStatisticVhost::dumps(SrsAmf0Object* obj) @@ -66,26 +66,26 @@ int SrsStatisticVhost::dumps(SrsAmf0Object* obj)
66 bool hls_enabled = _srs_config->get_hls_enabled(vhost); 66 bool hls_enabled = _srs_config->get_hls_enabled(vhost);
67 bool enabled = _srs_config->get_vhost_enabled(vhost); 67 bool enabled = _srs_config->get_vhost_enabled(vhost);
68 68
69 - obj->set("id", SrsAmf0Any::number(id));  
70 - obj->set("name", SrsAmf0Any::str(vhost.c_str()));  
71 - obj->set("enabled", SrsAmf0Any::boolean(enabled));  
72 - obj->set("clients", SrsAmf0Any::number(nb_clients));  
73 - obj->set("streams", SrsAmf0Any::number(nb_streams));  
74 - obj->set("send_bytes", SrsAmf0Any::number(kbps->get_send_bytes()));  
75 - obj->set("recv_bytes", SrsAmf0Any::number(kbps->get_recv_bytes())); 69 + obj->set("id", SrsJsonAny::number(id));
  70 + obj->set("name", SrsJsonAny::str(vhost.c_str()));
  71 + obj->set("enabled", SrsJsonAny::boolean(enabled));
  72 + obj->set("clients", SrsJsonAny::number(nb_clients));
  73 + obj->set("streams", SrsJsonAny::number(nb_streams));
  74 + obj->set("send_bytes", SrsJsonAny::number(kbps->get_send_bytes()));
  75 + obj->set("recv_bytes", SrsJsonAny::number(kbps->get_recv_bytes()));
76 76
77 - SrsAmf0Object* okbps = SrsAmf0Any::object(); 77 + SrsJsonObject* okbps = SrsJsonAny::object();
78 obj->set("kbps", okbps); 78 obj->set("kbps", okbps);
79 79
80 - okbps->set("recv_30s", SrsAmf0Any::number(kbps->get_recv_kbps_30s()));  
81 - okbps->set("send_30s", SrsAmf0Any::number(kbps->get_send_kbps_30s())); 80 + okbps->set("recv_30s", SrsJsonAny::number(kbps->get_recv_kbps_30s()));
  81 + okbps->set("send_30s", SrsJsonAny::number(kbps->get_send_kbps_30s()));
82 82
83 - SrsAmf0Object* hls = SrsAmf0Any::object(); 83 + SrsJsonObject* hls = SrsJsonAny::object();
84 obj->set("hls", hls); 84 obj->set("hls", hls);
85 85
86 - hls->set("enabled", SrsAmf0Any::boolean(hls_enabled)); 86 + hls->set("enabled", SrsJsonAny::boolean(hls_enabled));
87 if (hls_enabled) { 87 if (hls_enabled) {
88 - hls->set("fragment", SrsAmf0Any::number(_srs_config->get_hls_fragment(vhost))); 88 + hls->set("fragment", SrsJsonAny::number(_srs_config->get_hls_fragment(vhost)));
89 } 89 }
90 90
91 return ret; 91 return ret;
@@ -122,54 +122,54 @@ SrsStatisticStream::~SrsStatisticStream() @@ -122,54 +122,54 @@ SrsStatisticStream::~SrsStatisticStream()
122 srs_freep(kbps); 122 srs_freep(kbps);
123 } 123 }
124 124
125 -int SrsStatisticStream::dumps(SrsAmf0Object* obj) 125 +int SrsStatisticStream::dumps(SrsJsonObject* obj)
126 { 126 {
127 int ret = ERROR_SUCCESS; 127 int ret = ERROR_SUCCESS;
128 128
129 - obj->set("id", SrsAmf0Any::number(id));  
130 - obj->set("name", SrsAmf0Any::str(stream.c_str()));  
131 - obj->set("vhost", SrsAmf0Any::number(vhost->id));  
132 - obj->set("app", SrsAmf0Any::str(app.c_str()));  
133 - obj->set("live_ms", SrsAmf0Any::number(srs_get_system_time_ms()));  
134 - obj->set("clients", SrsAmf0Any::number(nb_clients));  
135 - obj->set("send_bytes", SrsAmf0Any::number(kbps->get_send_bytes()));  
136 - obj->set("recv_bytes", SrsAmf0Any::number(kbps->get_recv_bytes())); 129 + obj->set("id", SrsJsonAny::number(id));
  130 + obj->set("name", SrsJsonAny::str(stream.c_str()));
  131 + obj->set("vhost", SrsJsonAny::number(vhost->id));
  132 + obj->set("app", SrsJsonAny::str(app.c_str()));
  133 + obj->set("live_ms", SrsJsonAny::number(srs_get_system_time_ms()));
  134 + obj->set("clients", SrsJsonAny::number(nb_clients));
  135 + obj->set("send_bytes", SrsJsonAny::number(kbps->get_send_bytes()));
  136 + obj->set("recv_bytes", SrsJsonAny::number(kbps->get_recv_bytes()));
137 137
138 - SrsAmf0Object* okbps = SrsAmf0Any::object(); 138 + SrsJsonObject* okbps = SrsJsonAny::object();
139 obj->set("kbps", okbps); 139 obj->set("kbps", okbps);
140 140
141 - okbps->set("recv_30s", SrsAmf0Any::number(kbps->get_recv_kbps_30s()));  
142 - okbps->set("send_30s", SrsAmf0Any::number(kbps->get_send_kbps_30s())); 141 + okbps->set("recv_30s", SrsJsonAny::number(kbps->get_recv_kbps_30s()));
  142 + okbps->set("send_30s", SrsJsonAny::number(kbps->get_send_kbps_30s()));
143 143
144 - SrsAmf0Object* publish = SrsAmf0Any::object(); 144 + SrsJsonObject* publish = SrsJsonAny::object();
145 obj->set("publish", publish); 145 obj->set("publish", publish);
146 146
147 - publish->set("active", SrsAmf0Any::boolean(active));  
148 - publish->set("cid", SrsAmf0Any::number(connection_cid)); 147 + publish->set("active", SrsJsonAny::boolean(active));
  148 + publish->set("cid", SrsJsonAny::number(connection_cid));
149 149
150 if (!has_video) { 150 if (!has_video) {
151 - obj->set("video", SrsAmf0Any::null()); 151 + obj->set("video", SrsJsonAny::null());
152 } else { 152 } else {
153 - SrsAmf0Object* video = SrsAmf0Any::object(); 153 + SrsJsonObject* video = SrsJsonAny::object();
154 obj->set("video", video); 154 obj->set("video", video);
155 155
156 - video->set("codec", SrsAmf0Any::str(srs_codec_video2str(vcodec).c_str()));  
157 - video->set("profile", SrsAmf0Any::str(srs_codec_avc_profile2str(avc_profile).c_str()));  
158 - video->set("level", SrsAmf0Any::str(srs_codec_avc_level2str(avc_level).c_str()));  
159 - video->set("width", SrsAmf0Any::number(width));  
160 - video->set("height", SrsAmf0Any::number(height)); 156 + video->set("codec", SrsJsonAny::str(srs_codec_video2str(vcodec).c_str()));
  157 + video->set("profile", SrsJsonAny::str(srs_codec_avc_profile2str(avc_profile).c_str()));
  158 + video->set("level", SrsJsonAny::str(srs_codec_avc_level2str(avc_level).c_str()));
  159 + video->set("width", SrsJsonAny::number(width));
  160 + video->set("height", SrsJsonAny::number(height));
161 } 161 }
162 162
163 if (!has_audio) { 163 if (!has_audio) {
164 - obj->set("audio", SrsAmf0Any::null()); 164 + obj->set("audio", SrsJsonAny::null());
165 } else { 165 } else {
166 - SrsAmf0Object* audio = SrsAmf0Any::object(); 166 + SrsJsonObject* audio = SrsJsonAny::object();
167 obj->set("audio", audio); 167 obj->set("audio", audio);
168 168
169 - audio->set("codec", SrsAmf0Any::str(srs_codec_audio2str(acodec).c_str()));  
170 - audio->set("sample_rate", SrsAmf0Any::number(flv_sample_rates[asample_rate]));  
171 - audio->set("channel", SrsAmf0Any::number(asound_type + 1));  
172 - audio->set("profile", SrsAmf0Any::str(srs_codec_aac_object2str(aac_object).c_str())); 169 + audio->set("codec", SrsJsonAny::str(srs_codec_audio2str(acodec).c_str()));
  170 + audio->set("sample_rate", SrsJsonAny::number(flv_sample_rates[asample_rate]));
  171 + audio->set("channel", SrsJsonAny::number(asound_type + 1));
  172 + audio->set("profile", SrsJsonAny::str(srs_codec_aac_object2str(aac_object).c_str()));
173 } 173 }
174 174
175 return ret; 175 return ret;
@@ -206,21 +206,21 @@ SrsStatisticClient::~SrsStatisticClient() @@ -206,21 +206,21 @@ SrsStatisticClient::~SrsStatisticClient()
206 { 206 {
207 } 207 }
208 208
209 -int SrsStatisticClient::dumps(SrsAmf0Object* obj) 209 +int SrsStatisticClient::dumps(SrsJsonObject* obj)
210 { 210 {
211 int ret = ERROR_SUCCESS; 211 int ret = ERROR_SUCCESS;
212 212
213 - obj->set("id", SrsAmf0Any::number(id));  
214 - obj->set("vhost", SrsAmf0Any::number(stream->vhost->id));  
215 - obj->set("stream", SrsAmf0Any::number(stream->id));  
216 - obj->set("ip", SrsAmf0Any::str(req->ip.c_str()));  
217 - obj->set("pageUrl", SrsAmf0Any::str(req->pageUrl.c_str()));  
218 - obj->set("swfUrl", SrsAmf0Any::str(req->swfUrl.c_str()));  
219 - obj->set("tcUrl", SrsAmf0Any::str(req->tcUrl.c_str()));  
220 - obj->set("url", SrsAmf0Any::str(req->get_stream_url().c_str()));  
221 - obj->set("type", SrsAmf0Any::str(srs_client_type_string(type).c_str()));  
222 - obj->set("publish", SrsAmf0Any::boolean(srs_client_type_is_publish(type)));  
223 - obj->set("alive", SrsAmf0Any::number((srs_get_system_time_ms() - create) / 1000.0)); 213 + obj->set("id", SrsJsonAny::number(id));
  214 + obj->set("vhost", SrsJsonAny::number(stream->vhost->id));
  215 + obj->set("stream", SrsJsonAny::number(stream->id));
  216 + obj->set("ip", SrsJsonAny::str(req->ip.c_str()));
  217 + obj->set("pageUrl", SrsJsonAny::str(req->pageUrl.c_str()));
  218 + obj->set("swfUrl", SrsJsonAny::str(req->swfUrl.c_str()));
  219 + obj->set("tcUrl", SrsJsonAny::str(req->tcUrl.c_str()));
  220 + obj->set("url", SrsJsonAny::str(req->get_stream_url().c_str()));
  221 + obj->set("type", SrsJsonAny::str(srs_client_type_string(type).c_str()));
  222 + obj->set("publish", SrsJsonAny::boolean(srs_client_type_is_publish(type)));
  223 + obj->set("alive", SrsJsonAny::number((srs_get_system_time_ms() - create) / 1000.0));
224 224
225 return ret; 225 return ret;
226 } 226 }
@@ -456,7 +456,7 @@ int64_t SrsStatistic::server_id() @@ -456,7 +456,7 @@ int64_t SrsStatistic::server_id()
456 return _server_id; 456 return _server_id;
457 } 457 }
458 458
459 -int SrsStatistic::dumps_vhosts(SrsAmf0StrictArray* arr) 459 +int SrsStatistic::dumps_vhosts(SrsJsonArray* arr)
460 { 460 {
461 int ret = ERROR_SUCCESS; 461 int ret = ERROR_SUCCESS;
462 462
@@ -464,7 +464,7 @@ int SrsStatistic::dumps_vhosts(SrsAmf0StrictArray* arr) @@ -464,7 +464,7 @@ int SrsStatistic::dumps_vhosts(SrsAmf0StrictArray* arr)
464 for (it = vhosts.begin(); it != vhosts.end(); it++) { 464 for (it = vhosts.begin(); it != vhosts.end(); it++) {
465 SrsStatisticVhost* vhost = it->second; 465 SrsStatisticVhost* vhost = it->second;
466 466
467 - SrsAmf0Object* obj = SrsAmf0Any::object(); 467 + SrsJsonObject* obj = SrsJsonAny::object();
468 arr->append(obj); 468 arr->append(obj);
469 469
470 if ((ret = vhost->dumps(obj)) != ERROR_SUCCESS) { 470 if ((ret = vhost->dumps(obj)) != ERROR_SUCCESS) {
@@ -475,7 +475,7 @@ int SrsStatistic::dumps_vhosts(SrsAmf0StrictArray* arr) @@ -475,7 +475,7 @@ int SrsStatistic::dumps_vhosts(SrsAmf0StrictArray* arr)
475 return ret; 475 return ret;
476 } 476 }
477 477
478 -int SrsStatistic::dumps_streams(SrsAmf0StrictArray* arr) 478 +int SrsStatistic::dumps_streams(SrsJsonArray* arr)
479 { 479 {
480 int ret = ERROR_SUCCESS; 480 int ret = ERROR_SUCCESS;
481 481
@@ -483,7 +483,7 @@ int SrsStatistic::dumps_streams(SrsAmf0StrictArray* arr) @@ -483,7 +483,7 @@ int SrsStatistic::dumps_streams(SrsAmf0StrictArray* arr)
483 for (it = streams.begin(); it != streams.end(); it++) { 483 for (it = streams.begin(); it != streams.end(); it++) {
484 SrsStatisticStream* stream = it->second; 484 SrsStatisticStream* stream = it->second;
485 485
486 - SrsAmf0Object* obj = SrsAmf0Any::object(); 486 + SrsJsonObject* obj = SrsJsonAny::object();
487 arr->append(obj); 487 arr->append(obj);
488 488
489 if ((ret = stream->dumps(obj)) != ERROR_SUCCESS) { 489 if ((ret = stream->dumps(obj)) != ERROR_SUCCESS) {
@@ -494,7 +494,7 @@ int SrsStatistic::dumps_streams(SrsAmf0StrictArray* arr) @@ -494,7 +494,7 @@ int SrsStatistic::dumps_streams(SrsAmf0StrictArray* arr)
494 return ret; 494 return ret;
495 } 495 }
496 496
497 -int SrsStatistic::dumps_clients(SrsAmf0StrictArray* arr, int start, int count) 497 +int SrsStatistic::dumps_clients(SrsJsonArray* arr, int start, int count)
498 { 498 {
499 int ret = ERROR_SUCCESS; 499 int ret = ERROR_SUCCESS;
500 500
@@ -506,7 +506,7 @@ int SrsStatistic::dumps_clients(SrsAmf0StrictArray* arr, int start, int count) @@ -506,7 +506,7 @@ int SrsStatistic::dumps_clients(SrsAmf0StrictArray* arr, int start, int count)
506 506
507 SrsStatisticClient* client = it->second; 507 SrsStatisticClient* client = it->second;
508 508
509 - SrsAmf0Object* obj = SrsAmf0Any::object(); 509 + SrsJsonObject* obj = SrsJsonAny::object();
510 arr->append(obj); 510 arr->append(obj);
511 511
512 if ((ret = client->dumps(obj)) != ERROR_SUCCESS) { 512 if ((ret = client->dumps(obj)) != ERROR_SUCCESS) {
@@ -40,8 +40,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -40,8 +40,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40 class SrsKbps; 40 class SrsKbps;
41 class SrsRequest; 41 class SrsRequest;
42 class SrsConnection; 42 class SrsConnection;
43 -class SrsAmf0Object;  
44 -class SrsAmf0StrictArray; 43 +class SrsJsonObject;
  44 +class SrsJsonArray;
45 45
46 struct SrsStatisticVhost 46 struct SrsStatisticVhost
47 { 47 {
@@ -59,7 +59,7 @@ public: @@ -59,7 +59,7 @@ public:
59 SrsStatisticVhost(); 59 SrsStatisticVhost();
60 virtual ~SrsStatisticVhost(); 60 virtual ~SrsStatisticVhost();
61 public: 61 public:
62 - virtual int dumps(SrsAmf0Object* obj); 62 + virtual int dumps(SrsJsonObject* obj);
63 }; 63 };
64 64
65 struct SrsStatisticStream 65 struct SrsStatisticStream
@@ -104,7 +104,7 @@ public: @@ -104,7 +104,7 @@ public:
104 SrsStatisticStream(); 104 SrsStatisticStream();
105 virtual ~SrsStatisticStream(); 105 virtual ~SrsStatisticStream();
106 public: 106 public:
107 - virtual int dumps(SrsAmf0Object* obj); 107 + virtual int dumps(SrsJsonObject* obj);
108 public: 108 public:
109 /** 109 /**
110 * publish the stream. 110 * publish the stream.
@@ -129,7 +129,7 @@ public: @@ -129,7 +129,7 @@ public:
129 SrsStatisticClient(); 129 SrsStatisticClient();
130 virtual ~SrsStatisticClient(); 130 virtual ~SrsStatisticClient();
131 public: 131 public:
132 - virtual int dumps(SrsAmf0Object* obj); 132 + virtual int dumps(SrsJsonObject* obj);
133 }; 133 };
134 134
135 class SrsStatistic 135 class SrsStatistic
@@ -226,17 +226,17 @@ public: @@ -226,17 +226,17 @@ public:
226 /** 226 /**
227 * dumps the vhosts to amf0 array. 227 * dumps the vhosts to amf0 array.
228 */ 228 */
229 - virtual int dumps_vhosts(SrsAmf0StrictArray* arr); 229 + virtual int dumps_vhosts(SrsJsonArray* arr);
230 /** 230 /**
231 * dumps the streams to amf0 array. 231 * dumps the streams to amf0 array.
232 */ 232 */
233 - virtual int dumps_streams(SrsAmf0StrictArray* arr); 233 + virtual int dumps_streams(SrsJsonArray* arr);
234 /** 234 /**
235 * dumps the clients to amf0 array 235 * dumps the clients to amf0 array
236 * @param start the start index, from 0. 236 * @param start the start index, from 0.
237 * @param count the max count of clients to dump. 237 * @param count the max count of clients to dump.
238 */ 238 */
239 - virtual int dumps_clients(SrsAmf0StrictArray* arr, int start, int count); 239 + virtual int dumps_clients(SrsJsonArray* arr, int start, int count);
240 private: 240 private:
241 virtual SrsStatisticVhost* create_vhost(SrsRequest* req); 241 virtual SrsStatisticVhost* create_vhost(SrsRequest* req);
242 virtual SrsStatisticStream* create_stream(SrsStatisticVhost* vhost, SrsRequest* req); 242 virtual SrsStatisticStream* create_stream(SrsStatisticVhost* vhost, SrsRequest* req);
@@ -1372,7 +1372,7 @@ bool srs_is_boolean(const string& str) @@ -1372,7 +1372,7 @@ bool srs_is_boolean(const string& str)
1372 return str == "true" || str == "false"; 1372 return str == "true" || str == "false";
1373 } 1373 }
1374 1374
1375 -void srs_api_dump_summaries(SrsAmf0Object* obj) 1375 +void srs_api_dump_summaries(SrsJsonObject* obj)
1376 { 1376 {
1377 SrsRusage* r = srs_get_system_rusage(); 1377 SrsRusage* r = srs_get_system_rusage();
1378 SrsProcSelfStat* u = srs_get_self_proc_stat(); 1378 SrsProcSelfStat* u = srs_get_self_proc_stat();
@@ -1425,62 +1425,62 @@ void srs_api_dump_summaries(SrsAmf0Object* obj) @@ -1425,62 +1425,62 @@ void srs_api_dump_summaries(SrsAmf0Object* obj)
1425 bool ok = (r->ok && u->ok && s->ok && c->ok 1425 bool ok = (r->ok && u->ok && s->ok && c->ok
1426 && d->ok && m->ok && p->ok && nrs->ok); 1426 && d->ok && m->ok && p->ok && nrs->ok);
1427 1427
1428 - SrsAmf0Object* data = SrsAmf0Any::object(); 1428 + SrsJsonObject* data = SrsJsonAny::object();
1429 obj->set("data", data); 1429 obj->set("data", data);
1430 1430
1431 - data->set("ok", SrsAmf0Any::boolean(ok));  
1432 - data->set("now_ms", SrsAmf0Any::number(now)); 1431 + data->set("ok", SrsJsonAny::boolean(ok));
  1432 + data->set("now_ms", SrsJsonAny::number(now));
1433 1433
1434 // self 1434 // self
1435 - SrsAmf0Object* self = SrsAmf0Any::object(); 1435 + SrsJsonObject* self = SrsJsonAny::object();
1436 data->set("self", self); 1436 data->set("self", self);
1437 1437
1438 - self->set("version", SrsAmf0Any::str(RTMP_SIG_SRS_VERSION));  
1439 - self->set("pid", SrsAmf0Any::number(getpid()));  
1440 - self->set("ppid", SrsAmf0Any::number(u->ppid));  
1441 - self->set("argv", SrsAmf0Any::str(_srs_config->argv().c_str()));  
1442 - self->set("cwd", SrsAmf0Any::str(_srs_config->cwd().c_str()));  
1443 - self->set("mem_kbyte", SrsAmf0Any::number(r->r.ru_maxrss));  
1444 - self->set("mem_percent", SrsAmf0Any::number(self_mem_percent));  
1445 - self->set("cpu_percent", SrsAmf0Any::number(u->percent));  
1446 - self->set("srs_uptime", SrsAmf0Any::number(srs_uptime)); 1438 + self->set("version", SrsJsonAny::str(RTMP_SIG_SRS_VERSION));
  1439 + self->set("pid", SrsJsonAny::number(getpid()));
  1440 + self->set("ppid", SrsJsonAny::number(u->ppid));
  1441 + self->set("argv", SrsJsonAny::str(_srs_config->argv().c_str()));
  1442 + self->set("cwd", SrsJsonAny::str(_srs_config->cwd().c_str()));
  1443 + self->set("mem_kbyte", SrsJsonAny::number(r->r.ru_maxrss));
  1444 + self->set("mem_percent", SrsJsonAny::number(self_mem_percent));
  1445 + self->set("cpu_percent", SrsJsonAny::number(u->percent));
  1446 + self->set("srs_uptime", SrsJsonAny::number(srs_uptime));
1447 1447
1448 // system 1448 // system
1449 - SrsAmf0Object* sys = SrsAmf0Any::object(); 1449 + SrsJsonObject* sys = SrsJsonAny::object();
1450 data->set("system", sys); 1450 data->set("system", sys);
1451 1451
1452 - sys->set("cpu_percent", SrsAmf0Any::number(s->percent));  
1453 - sys->set("disk_read_KBps", SrsAmf0Any::number(d->in_KBps));  
1454 - sys->set("disk_write_KBps", SrsAmf0Any::number(d->out_KBps));  
1455 - sys->set("disk_busy_percent", SrsAmf0Any::number(d->busy));  
1456 - sys->set("mem_ram_kbyte", SrsAmf0Any::number(m->MemTotal));  
1457 - sys->set("mem_ram_percent", SrsAmf0Any::number(m->percent_ram));  
1458 - sys->set("mem_swap_kbyte", SrsAmf0Any::number(m->SwapTotal));  
1459 - sys->set("mem_swap_percent", SrsAmf0Any::number(m->percent_swap));  
1460 - sys->set("cpus", SrsAmf0Any::number(c->nb_processors));  
1461 - sys->set("cpus_online", SrsAmf0Any::number(c->nb_processors_online));  
1462 - sys->set("uptime", SrsAmf0Any::number(p->os_uptime));  
1463 - sys->set("ilde_time", SrsAmf0Any::number(p->os_ilde_time));  
1464 - sys->set("load_1m", SrsAmf0Any::number(p->load_one_minutes));  
1465 - sys->set("load_5m", SrsAmf0Any::number(p->load_five_minutes));  
1466 - sys->set("load_15m", SrsAmf0Any::number(p->load_fifteen_minutes)); 1452 + sys->set("cpu_percent", SrsJsonAny::number(s->percent));
  1453 + sys->set("disk_read_KBps", SrsJsonAny::number(d->in_KBps));
  1454 + sys->set("disk_write_KBps", SrsJsonAny::number(d->out_KBps));
  1455 + sys->set("disk_busy_percent", SrsJsonAny::number(d->busy));
  1456 + sys->set("mem_ram_kbyte", SrsJsonAny::number(m->MemTotal));
  1457 + sys->set("mem_ram_percent", SrsJsonAny::number(m->percent_ram));
  1458 + sys->set("mem_swap_kbyte", SrsJsonAny::number(m->SwapTotal));
  1459 + sys->set("mem_swap_percent", SrsJsonAny::number(m->percent_swap));
  1460 + sys->set("cpus", SrsJsonAny::number(c->nb_processors));
  1461 + sys->set("cpus_online", SrsJsonAny::number(c->nb_processors_online));
  1462 + sys->set("uptime", SrsJsonAny::number(p->os_uptime));
  1463 + sys->set("ilde_time", SrsJsonAny::number(p->os_ilde_time));
  1464 + sys->set("load_1m", SrsJsonAny::number(p->load_one_minutes));
  1465 + sys->set("load_5m", SrsJsonAny::number(p->load_five_minutes));
  1466 + sys->set("load_15m", SrsJsonAny::number(p->load_fifteen_minutes));
1467 // system network bytes stat. 1467 // system network bytes stat.
1468 - sys->set("net_sample_time", SrsAmf0Any::number(n_sample_time)); 1468 + sys->set("net_sample_time", SrsJsonAny::number(n_sample_time));
1469 // internet public address network device bytes. 1469 // internet public address network device bytes.
1470 - sys->set("net_recv_bytes", SrsAmf0Any::number(nr_bytes));  
1471 - sys->set("net_send_bytes", SrsAmf0Any::number(ns_bytes)); 1470 + sys->set("net_recv_bytes", SrsJsonAny::number(nr_bytes));
  1471 + sys->set("net_send_bytes", SrsJsonAny::number(ns_bytes));
1472 // intranet private address network device bytes. 1472 // intranet private address network device bytes.
1473 - sys->set("net_recvi_bytes", SrsAmf0Any::number(nri_bytes));  
1474 - sys->set("net_sendi_bytes", SrsAmf0Any::number(nsi_bytes)); 1473 + sys->set("net_recvi_bytes", SrsJsonAny::number(nri_bytes));
  1474 + sys->set("net_sendi_bytes", SrsJsonAny::number(nsi_bytes));
1475 // srs network bytes stat. 1475 // srs network bytes stat.
1476 - sys->set("srs_sample_time", SrsAmf0Any::number(nrs->sample_time));  
1477 - sys->set("srs_recv_bytes", SrsAmf0Any::number(nrs->rbytes));  
1478 - sys->set("srs_send_bytes", SrsAmf0Any::number(nrs->sbytes));  
1479 - sys->set("conn_sys", SrsAmf0Any::number(nrs->nb_conn_sys));  
1480 - sys->set("conn_sys_et", SrsAmf0Any::number(nrs->nb_conn_sys_et));  
1481 - sys->set("conn_sys_tw", SrsAmf0Any::number(nrs->nb_conn_sys_tw));  
1482 - sys->set("conn_sys_udp", SrsAmf0Any::number(nrs->nb_conn_sys_udp));  
1483 - sys->set("conn_srs", SrsAmf0Any::number(nrs->nb_conn_srs)); 1476 + sys->set("srs_sample_time", SrsJsonAny::number(nrs->sample_time));
  1477 + sys->set("srs_recv_bytes", SrsJsonAny::number(nrs->rbytes));
  1478 + sys->set("srs_send_bytes", SrsJsonAny::number(nrs->sbytes));
  1479 + sys->set("conn_sys", SrsJsonAny::number(nrs->nb_conn_sys));
  1480 + sys->set("conn_sys_et", SrsJsonAny::number(nrs->nb_conn_sys_et));
  1481 + sys->set("conn_sys_tw", SrsJsonAny::number(nrs->nb_conn_sys_tw));
  1482 + sys->set("conn_sys_udp", SrsJsonAny::number(nrs->nb_conn_sys_udp));
  1483 + sys->set("conn_srs", SrsJsonAny::number(nrs->nb_conn_srs));
1484 } 1484 }
1485 1485
1486 string srs_join_vector_string(vector<string>& vs, string separator) 1486 string srs_join_vector_string(vector<string>& vs, string separator)
@@ -41,7 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -41,7 +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 +class SrsJsonObject;
45 45
46 // client open socket and connect to server. 46 // client open socket and connect to server.
47 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);
@@ -682,7 +682,7 @@ extern bool srs_is_digit_number(const std::string& str); @@ -682,7 +682,7 @@ extern bool srs_is_digit_number(const std::string& str);
682 extern bool srs_is_boolean(const std::string& str); 682 extern bool srs_is_boolean(const std::string& str);
683 683
684 // dump summaries for /api/v1/summaries. 684 // dump summaries for /api/v1/summaries.
685 -extern void srs_api_dump_summaries(SrsAmf0Object* obj); 685 +extern void srs_api_dump_summaries(SrsJsonObject* obj);
686 686
687 // join string in vector with indicated separator 687 // join string in vector with indicated separator
688 extern std::string srs_join_vector_string(std::vector<std::string>& vs, std::string separator); 688 extern std::string srs_join_vector_string(std::vector<std::string>& vs, std::string separator);
@@ -23,10 +23,60 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -23,10 +23,60 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 23
24 #include <srs_protocol_json.hpp> 24 #include <srs_protocol_json.hpp>
25 25
  26 +#include <sstream>
26 using namespace std; 27 using namespace std;
27 28
28 #include <srs_kernel_log.hpp> 29 #include <srs_kernel_log.hpp>
29 30
  31 +/* json encode
  32 + cout<< SRS_JOBJECT_START
  33 + << SRS_JFIELD_STR("name", "srs") << SRS_JFIELD_CONT
  34 + << SRS_JFIELD_ORG("version", 100) << SRS_JFIELD_CONT
  35 + << SRS_JFIELD_NAME("features") << SRS_JOBJECT_START
  36 + << SRS_JFIELD_STR("rtmp", "released") << SRS_JFIELD_CONT
  37 + << SRS_JFIELD_STR("hls", "released") << SRS_JFIELD_CONT
  38 + << SRS_JFIELD_STR("dash", "plan")
  39 + << SRS_JOBJECT_END << SRS_JFIELD_CONT
  40 + << SRS_JFIELD_STR("author", "srs team")
  41 + << SRS_JOBJECT_END
  42 + it's:
  43 + cont<< "{"
  44 + << "name:" << "srs" << ","
  45 + << "version:" << 100 << ","
  46 + << "features:" << "{"
  47 + << "rtmp:" << "released" << ","
  48 + << "hls:" << "released" << ","
  49 + << "dash:" << "plan"
  50 + << "}" << ","
  51 + << "author:" << "srs team"
  52 + << "}"
  53 + that is:
  54 + """
  55 + {
  56 + "name": "srs",
  57 + "version": 100,
  58 + "features": {
  59 + "rtmp": "released",
  60 + "hls": "released",
  61 + "dash": "plan"
  62 + },
  63 + "author": "srs team"
  64 + }
  65 + """
  66 + */
  67 +#define SRS_JOBJECT_START "{"
  68 +#define SRS_JFIELD_NAME(k) "\"" << k << "\":"
  69 +#define SRS_JFIELD_OBJ(k) SRS_JFIELD_NAME(k) << SRS_JOBJECT_START
  70 +#define SRS_JFIELD_STR(k, v) SRS_JFIELD_NAME(k) << "\"" << v << "\""
  71 +#define SRS_JFIELD_ORG(k, v) SRS_JFIELD_NAME(k) << std::dec << v
  72 +#define SRS_JFIELD_BOOL(k, v) SRS_JFIELD_ORG(k, (v? "true":"false"))
  73 +#define SRS_JFIELD_NULL(k) SRS_JFIELD_NAME(k) << "null"
  74 +#define SRS_JFIELD_ERROR(ret) "\"" << "code" << "\":" << ret
  75 +#define SRS_JFIELD_CONT ","
  76 +#define SRS_JOBJECT_END "}"
  77 +#define SRS_JARRAY_START "["
  78 +#define SRS_JARRAY_END "]"
  79 +
30 #ifdef SRS_JSON_USE_NXJSON 80 #ifdef SRS_JSON_USE_NXJSON
31 81
32 //////////////////////////////////////////////////////////////////////////////////////////////// 82 ////////////////////////////////////////////////////////////////////////////////////////////////
@@ -267,6 +317,46 @@ SrsJsonArray* SrsJsonAny::to_array() @@ -267,6 +317,46 @@ SrsJsonArray* SrsJsonAny::to_array()
267 return p; 317 return p;
268 } 318 }
269 319
  320 +string SrsJsonAny::to_json()
  321 +{
  322 + switch (marker) {
  323 + case SRS_JSON_String: {
  324 + return "\"" + to_str() + "\"";
  325 + }
  326 + case SRS_JSON_Boolean: {
  327 + return to_boolean()? "true":"false";
  328 + }
  329 + case SRS_JSON_Integer: {
  330 + // len(max int64_t) is 20, plus one "+-."
  331 + char tmp[22];
  332 + snprintf(tmp, 22, "%"PRId64, to_integer());
  333 + return tmp;
  334 + }
  335 + case SRS_JSON_Number: {
  336 + // len(max int64_t) is 20, plus one "+-."
  337 + char tmp[22];
  338 + snprintf(tmp, 22, "%.6f", to_number());
  339 + return tmp;
  340 + }
  341 + case SRS_JSON_Null: {
  342 + return "null";
  343 + }
  344 + case SRS_JSON_Object: {
  345 + SrsJsonObject* obj = to_object();
  346 + return obj->to_json();
  347 + }
  348 + case SRS_JSON_Array: {
  349 + SrsJsonArray* arr = to_array();
  350 + return arr->to_json();
  351 + }
  352 + default: {
  353 + break;
  354 + }
  355 + }
  356 +
  357 + return "null";
  358 +}
  359 +
270 SrsJsonAny* SrsJsonAny::str(const char* value) 360 SrsJsonAny* SrsJsonAny::str(const char* value)
271 { 361 {
272 return new SrsJsonString(value); 362 return new SrsJsonString(value);
@@ -402,6 +492,27 @@ SrsJsonAny* SrsJsonObject::value_at(int index) @@ -402,6 +492,27 @@ SrsJsonAny* SrsJsonObject::value_at(int index)
402 return elem.second; 492 return elem.second;
403 } 493 }
404 494
  495 +string SrsJsonObject::to_json()
  496 +{
  497 + stringstream ss;
  498 +
  499 + ss << SRS_JOBJECT_START;
  500 +
  501 + for (int i = 0; i < (int)properties.size(); i++) {
  502 + std::string name = this->key_at(i);
  503 + SrsJsonAny* any = this->value_at(i);
  504 +
  505 + ss << SRS_JFIELD_NAME(name) << any->to_json();
  506 + if (i < (int)properties.size() - 1) {
  507 + ss << SRS_JFIELD_CONT;
  508 + }
  509 + }
  510 +
  511 + ss << SRS_JOBJECT_END;
  512 +
  513 + return ss.str();
  514 +}
  515 +
405 void SrsJsonObject::set(string key, SrsJsonAny* value) 516 void SrsJsonObject::set(string key, SrsJsonAny* value)
406 { 517 {
407 if (!value) { 518 if (!value) {
@@ -549,6 +660,32 @@ void SrsJsonArray::add(SrsJsonAny* value) @@ -549,6 +660,32 @@ void SrsJsonArray::add(SrsJsonAny* value)
549 properties.push_back(value); 660 properties.push_back(value);
550 } 661 }
551 662
  663 +void SrsJsonArray::append(SrsJsonAny* value)
  664 +{
  665 + add(value);
  666 +}
  667 +
  668 +string SrsJsonArray::to_json()
  669 +{
  670 + stringstream ss;
  671 +
  672 + ss << SRS_JARRAY_START;
  673 +
  674 + for (int i = 0; i < (int)properties.size(); i++) {
  675 + SrsJsonAny* any = properties[i];
  676 +
  677 + ss << any->to_json();
  678 +
  679 + if (i < (int)properties.size() - 1) {
  680 + ss << SRS_JFIELD_CONT;
  681 + }
  682 + }
  683 +
  684 + ss << SRS_JARRAY_END;
  685 +
  686 + return ss.str();
  687 +}
  688 +
552 #ifdef SRS_JSON_USE_NXJSON 689 #ifdef SRS_JSON_USE_NXJSON
553 690
554 //////////////////////////////////////////////////////////////////////////////////////////////// 691 ////////////////////////////////////////////////////////////////////////////////////////////////
@@ -112,6 +112,12 @@ public: @@ -112,6 +112,12 @@ public:
112 * user must ensure the type is a ecma array, or assert failed. 112 * user must ensure the type is a ecma array, or assert failed.
113 */ 113 */
114 virtual SrsJsonArray* to_array(); 114 virtual SrsJsonArray* to_array();
  115 +// json
  116 +public:
  117 + /**
  118 + * convert the amf0 stuff to json.
  119 + */
  120 + virtual std::string to_json();
115 public: 121 public:
116 static SrsJsonAny* str(const char* value = NULL); 122 static SrsJsonAny* str(const char* value = NULL);
117 static SrsJsonAny* boolean(bool value = false); 123 static SrsJsonAny* boolean(bool value = false);
@@ -145,6 +151,12 @@ public: @@ -145,6 +151,12 @@ public:
145 virtual std::string key_at(int index); 151 virtual std::string key_at(int index);
146 // @remark: max index is count(). 152 // @remark: max index is count().
147 virtual SrsJsonAny* value_at(int index); 153 virtual SrsJsonAny* value_at(int index);
  154 +// json
  155 +public:
  156 + /**
  157 + * convert the amf0 object to json.
  158 + */
  159 + virtual std::string to_json();
148 public: 160 public:
149 virtual void set(std::string key, SrsJsonAny* value); 161 virtual void set(std::string key, SrsJsonAny* value);
150 virtual SrsJsonAny* get_property(std::string name); 162 virtual SrsJsonAny* get_property(std::string name);
@@ -171,6 +183,14 @@ public: @@ -171,6 +183,14 @@ public:
171 // @remark: max index is count(). 183 // @remark: max index is count().
172 virtual SrsJsonAny* at(int index); 184 virtual SrsJsonAny* at(int index);
173 virtual void add(SrsJsonAny* value); 185 virtual void add(SrsJsonAny* value);
  186 + // alias to add.
  187 + virtual void append(SrsJsonAny* value);
  188 +// json
  189 +public:
  190 + /**
  191 + * convert the amf0 ecma array to json.
  192 + */
  193 + virtual std::string to_json();
174 }; 194 };
175 195
176 //////////////////////////////////////////////////////////////////////// 196 ////////////////////////////////////////////////////////////////////////
@@ -35,55 +35,6 @@ using namespace std; @@ -35,55 +35,6 @@ 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 -  
87 // AMF0 marker 38 // AMF0 marker
88 #define RTMP_AMF0_Number 0x00 39 #define RTMP_AMF0_Number 0x00
89 #define RTMP_AMF0_Boolean 0x01 40 #define RTMP_AMF0_Boolean 0x01
@@ -331,60 +282,6 @@ char* SrsAmf0Any::human_print(char** pdata, int* psize) @@ -331,60 +282,6 @@ char* SrsAmf0Any::human_print(char** pdata, int* psize)
331 return data; 282 return data;
332 } 283 }
333 284
334 -string SrsAmf0Any::to_json()  
335 -{  
336 - switch (marker) {  
337 - case RTMP_AMF0_String: {  
338 - return "\"" + to_str() + "\"";  
339 - }  
340 - case RTMP_AMF0_Boolean: {  
341 - return to_boolean()? "true":"false";  
342 - }  
343 - case RTMP_AMF0_Number: {  
344 - double v = to_number();  
345 - int64_t iv = (int64_t)v;  
346 -  
347 - // len(max int64_t) is 20, plus one "+-."  
348 - char tmp[22];  
349 - if (v == iv) {  
350 - snprintf(tmp, 22, "%"PRId64, iv);  
351 - } else {  
352 - snprintf(tmp, 22, "%.6f", to_number());  
353 - }  
354 -  
355 - return tmp;  
356 - }  
357 - case RTMP_AMF0_Null: {  
358 - return "null";  
359 - }  
360 - case RTMP_AMF0_Undefined: {  
361 - return "null";  
362 - }  
363 - case RTMP_AMF0_Object: {  
364 - SrsAmf0Object* obj = to_object();  
365 - return obj->to_json();  
366 - }  
367 - case RTMP_AMF0_EcmaArray: {  
368 - SrsAmf0EcmaArray* arr = to_ecma_array();  
369 - return arr->to_json();  
370 - }  
371 - case RTMP_AMF0_StrictArray: {  
372 - SrsAmf0StrictArray* arr = to_strict_array();  
373 - return arr->to_json();  
374 - }  
375 - case RTMP_AMF0_Date: {  
376 - // TODO: FIXME: support amf0 data to json.  
377 - return "null";  
378 - }  
379 - case RTMP_AMF0_Invalid:  
380 - default: {  
381 - break;  
382 - }  
383 - }  
384 -  
385 - return "null";  
386 -}  
387 -  
388 SrsAmf0Any* SrsAmf0Any::str(const char* value) 285 SrsAmf0Any* SrsAmf0Any::str(const char* value)
389 { 286 {
390 return new SrsAmf0String(value); 287 return new SrsAmf0String(value);
@@ -846,27 +743,6 @@ SrsAmf0Any* SrsAmf0Object::copy() @@ -846,27 +743,6 @@ SrsAmf0Any* SrsAmf0Object::copy()
846 return copy; 743 return copy;
847 } 744 }
848 745
849 -string SrsAmf0Object::to_json()  
850 -{  
851 - stringstream ss;  
852 -  
853 - ss << SRS_JOBJECT_START;  
854 -  
855 - for (int i = 0; i < properties->count(); i++) {  
856 - std::string name = this->key_at(i);  
857 - SrsAmf0Any* any = this->value_at(i);  
858 -  
859 - ss << SRS_JFIELD_NAME(name) << any->to_json();  
860 - if (i < properties->count() - 1) {  
861 - ss << SRS_JFIELD_CONT;  
862 - }  
863 - }  
864 -  
865 - ss << SRS_JOBJECT_END;  
866 -  
867 - return ss.str();  
868 -}  
869 -  
870 void SrsAmf0Object::clear() 746 void SrsAmf0Object::clear()
871 { 747 {
872 properties->clear(); 748 properties->clear();
@@ -1068,27 +944,6 @@ SrsAmf0Any* SrsAmf0EcmaArray::copy() @@ -1068,27 +944,6 @@ SrsAmf0Any* SrsAmf0EcmaArray::copy()
1068 return copy; 944 return copy;
1069 } 945 }
1070 946
1071 -string SrsAmf0EcmaArray::to_json()  
1072 -{  
1073 - stringstream ss;  
1074 -  
1075 - ss << SRS_JOBJECT_START;  
1076 -  
1077 - for (int i = 0; i < properties->count(); i++) {  
1078 - std::string name = this->key_at(i);  
1079 - SrsAmf0Any* any = this->value_at(i);  
1080 -  
1081 - ss << SRS_JFIELD_NAME(name) << any->to_json();  
1082 - if (i < properties->count() - 1) {  
1083 - ss << SRS_JFIELD_CONT;  
1084 - }  
1085 - }  
1086 -  
1087 - ss << SRS_JOBJECT_END;  
1088 -  
1089 - return ss.str();  
1090 -}  
1091 -  
1092 void SrsAmf0EcmaArray::clear() 947 void SrsAmf0EcmaArray::clear()
1093 { 948 {
1094 properties->clear(); 949 properties->clear();
@@ -1264,27 +1119,6 @@ SrsAmf0Any* SrsAmf0StrictArray::copy() @@ -1264,27 +1119,6 @@ SrsAmf0Any* SrsAmf0StrictArray::copy()
1264 return copy; 1119 return copy;
1265 } 1120 }
1266 1121
1267 -string SrsAmf0StrictArray::to_json()  
1268 -{  
1269 - stringstream ss;  
1270 -  
1271 - ss << SRS_JARRAY_START;  
1272 -  
1273 - for (int i = 0; i < (int)properties.size(); i++) {  
1274 - SrsAmf0Any* any = properties[i];  
1275 -  
1276 - ss << any->to_json();  
1277 -  
1278 - if (i < (int)properties.size() - 1) {  
1279 - ss << SRS_JFIELD_CONT;  
1280 - }  
1281 - }  
1282 -  
1283 - ss << SRS_JARRAY_END;  
1284 -  
1285 - return ss.str();  
1286 -}  
1287 -  
1288 void SrsAmf0StrictArray::clear() 1122 void SrsAmf0StrictArray::clear()
1289 { 1123 {
1290 properties.clear(); 1124 properties.clear();
@@ -272,12 +272,6 @@ public: @@ -272,12 +272,6 @@ public:
272 * @remark user must free the data returned or output by pdata. 272 * @remark user must free the data returned or output by pdata.
273 */ 273 */
274 virtual char* human_print(char** pdata, int* psize); 274 virtual char* human_print(char** pdata, int* psize);
275 -// json  
276 -public:  
277 - /**  
278 - * convert the amf0 stuff to json.  
279 - */  
280 - virtual std::string to_json();  
281 // create AMF0 instance. 275 // create AMF0 instance.
282 public: 276 public:
283 /** 277 /**
@@ -357,12 +351,6 @@ public: @@ -357,12 +351,6 @@ public:
357 virtual int read(SrsStream* stream); 351 virtual int read(SrsStream* stream);
358 virtual int write(SrsStream* stream); 352 virtual int write(SrsStream* stream);
359 virtual SrsAmf0Any* copy(); 353 virtual SrsAmf0Any* copy();
360 -// json  
361 -public:  
362 - /**  
363 - * convert the amf0 object to json.  
364 - */  
365 - virtual std::string to_json();  
366 // properties iteration 354 // properties iteration
367 public: 355 public:
368 /** 356 /**
@@ -446,12 +434,6 @@ public: @@ -446,12 +434,6 @@ public:
446 virtual int read(SrsStream* stream); 434 virtual int read(SrsStream* stream);
447 virtual int write(SrsStream* stream); 435 virtual int write(SrsStream* stream);
448 virtual SrsAmf0Any* copy(); 436 virtual SrsAmf0Any* copy();
449 -// json  
450 -public:  
451 - /**  
452 - * convert the amf0 ecma array to json.  
453 - */  
454 - virtual std::string to_json();  
455 // properties iteration 437 // properties iteration
456 public: 438 public:
457 /** 439 /**
@@ -533,12 +515,6 @@ public: @@ -533,12 +515,6 @@ public:
533 virtual int read(SrsStream* stream); 515 virtual int read(SrsStream* stream);
534 virtual int write(SrsStream* stream); 516 virtual int write(SrsStream* stream);
535 virtual SrsAmf0Any* copy(); 517 virtual SrsAmf0Any* copy();
536 -// json  
537 -public:  
538 - /**  
539 - * convert the amf0 strict array to json.  
540 - */  
541 - virtual std::string to_json();  
542 // properties iteration 518 // properties iteration
543 public: 519 public:
544 /** 520 /**