winlin

merge from wenjie, fix the flower player play bug, play(reset=amf0-number)

@@ -2398,33 +2398,31 @@ int SrsPlayPacket::decode(SrsStream* stream) @@ -2398,33 +2398,31 @@ int SrsPlayPacket::decode(SrsStream* stream)
2398 return ret; 2398 return ret;
2399 } 2399 }
2400 2400
2401 - SrsAmf0Any* any_value = NULL;  
2402 - if (!stream->empty()) {  
2403 - if ((ret = srs_amf0_read_any(stream, any_value)) != ERROR_SUCCESS) {  
2404 - ret = ERROR_RTMP_AMF0_DECODE;  
2405 - srs_error("amf0 read play reset marker failed. ret=%d", ret);  
2406 - return ret;  
2407 - } else {  
2408 - // check if the value is bool or number  
2409 - // An optional Boolean value or number that specifies whether to flush any previous playlist.  
2410 - if (any_value->is_boolean()) {  
2411 - SrsAmf0Boolean* reset_bool = dynamic_cast<SrsAmf0Boolean*> (any_value);  
2412 - if (reset_bool) {  
2413 - reset = reset_bool->value;  
2414 - }  
2415 - } else if (any_value->is_number()) {  
2416 - SrsAmf0Number* reset_number = dynamic_cast<SrsAmf0Number*> (any_value);  
2417 - if (reset_number) {  
2418 - reset = (reset_number->value == 0 ? false : true);  
2419 - }  
2420 - } else {  
2421 - ret = ERROR_RTMP_AMF0_DECODE;  
2422 - srs_error("amf0 decode play reset not support type. desire number or bool, ret=%d", ret);  
2423 - return ret;  
2424 - }  
2425 - SrsAutoFree(SrsAmf0Any, any_value, false);  
2426 - } 2401 + if (stream->empty()) {
  2402 + return ret;
2427 } 2403 }
  2404 +
  2405 + SrsAmf0Any* reset_value = NULL;
  2406 + if ((ret = srs_amf0_read_any(stream, reset_value)) != ERROR_SUCCESS) {
  2407 + ret = ERROR_RTMP_AMF0_DECODE;
  2408 + srs_error("amf0 read play reset marker failed. ret=%d", ret);
  2409 + return ret;
  2410 + }
  2411 + SrsAutoFree(SrsAmf0Any, reset_value, false);
  2412 +
  2413 + // check if the value is bool or number
  2414 + // An optional Boolean value or number that specifies whether
  2415 + // to flush any previous playlist
  2416 + if (reset_value->is_boolean()) {
  2417 + reset = srs_amf0_convert<SrsAmf0Boolean>(reset_value)->value;
  2418 + } else if (reset_value->is_number()) {
  2419 + reset = (srs_amf0_convert<SrsAmf0Number>(reset_value)->value == 0 ? false : true);
  2420 + } else {
  2421 + ret = ERROR_RTMP_AMF0_DECODE;
  2422 + srs_error("amf0 invalid type=%#x, requires number or bool, ret=%d", reset_value->marker, ret);
  2423 + return ret;
  2424 + }
  2425 +
2428 srs_info("amf0 decode play packet success"); 2426 srs_info("amf0 decode play packet success");
2429 2427
2430 return ret; 2428 return ret;