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) { 2401 + if (stream->empty()) {
  2402 + return ret;
  2403 + }
  2404 +
  2405 + SrsAmf0Any* reset_value = NULL;
  2406 + if ((ret = srs_amf0_read_any(stream, reset_value)) != ERROR_SUCCESS) {
2404 ret = ERROR_RTMP_AMF0_DECODE; 2407 ret = ERROR_RTMP_AMF0_DECODE;
2405 srs_error("amf0 read play reset marker failed. ret=%d", ret); 2408 srs_error("amf0 read play reset marker failed. ret=%d", ret);
2406 return ret; 2409 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 } 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 { 2420 } else {
2421 ret = ERROR_RTMP_AMF0_DECODE; 2421 ret = ERROR_RTMP_AMF0_DECODE;
2422 - srs_error("amf0 decode play reset not support type. desire number or bool, ret=%d", ret); 2422 + srs_error("amf0 invalid type=%#x, requires number or bool, ret=%d", reset_value->marker, ret);
2423 return ret; 2423 return ret;
2424 } 2424 }
2425 - SrsAutoFree(SrsAmf0Any, any_value, false);  
2426 - }  
2427 - } 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;