From 63388e8ac351e7f43e64beff208037b0567c501f Mon Sep 17 00:00:00 2001 From: winlin <winlin@vip.126.com> Date: Thu, 2 Jan 2014 19:09:25 +0800 Subject: [PATCH] merge from wenjie, fix the flower player play bug, play(reset=amf0-number) --- trunk/src/core/srs_core_protocol.cpp | 50 +++++++++++++--------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/trunk/src/core/srs_core_protocol.cpp b/trunk/src/core/srs_core_protocol.cpp index d07c9ff57..92e150065 100644 --- a/trunk/src/core/srs_core_protocol.cpp +++ b/trunk/src/core/srs_core_protocol.cpp @@ -2398,33 +2398,31 @@ int SrsPlayPacket::decode(SrsStream* stream) return ret; } - SrsAmf0Any* any_value = NULL; - if (!stream->empty()) { - if ((ret = srs_amf0_read_any(stream, any_value)) != ERROR_SUCCESS) { - ret = ERROR_RTMP_AMF0_DECODE; - srs_error("amf0 read play reset marker failed. ret=%d", ret); - return ret; - } else { - // check if the value is bool or number - // An optional Boolean value or number that specifies whether to flush any previous playlist. - if (any_value->is_boolean()) { - SrsAmf0Boolean* reset_bool = dynamic_cast<SrsAmf0Boolean*> (any_value); - if (reset_bool) { - reset = reset_bool->value; - } - } else if (any_value->is_number()) { - SrsAmf0Number* reset_number = dynamic_cast<SrsAmf0Number*> (any_value); - if (reset_number) { - reset = (reset_number->value == 0 ? false : true); - } - } else { - ret = ERROR_RTMP_AMF0_DECODE; - srs_error("amf0 decode play reset not support type. desire number or bool, ret=%d", ret); - return ret; - } - SrsAutoFree(SrsAmf0Any, any_value, false); - } + if (stream->empty()) { + return ret; } + + SrsAmf0Any* reset_value = NULL; + if ((ret = srs_amf0_read_any(stream, reset_value)) != ERROR_SUCCESS) { + ret = ERROR_RTMP_AMF0_DECODE; + srs_error("amf0 read play reset marker failed. ret=%d", ret); + return ret; + } + SrsAutoFree(SrsAmf0Any, reset_value, false); + + // check if the value is bool or number + // An optional Boolean value or number that specifies whether + // to flush any previous playlist + if (reset_value->is_boolean()) { + reset = srs_amf0_convert<SrsAmf0Boolean>(reset_value)->value; + } else if (reset_value->is_number()) { + reset = (srs_amf0_convert<SrsAmf0Number>(reset_value)->value == 0 ? false : true); + } else { + ret = ERROR_RTMP_AMF0_DECODE; + srs_error("amf0 invalid type=%#x, requires number or bool, ret=%d", reset_value->marker, ret); + return ret; + } + srs_info("amf0 decode play packet success"); return ret;