diff --git a/README.md b/README.md index 6bcc3aeb2b..5ea8d6ca92 100755 --- a/README.md +++ b/README.md @@ -336,6 +336,7 @@ Remark: ## History +* v2.0, 2015-10-28, for [ExoPlayer #828][exo #828], remove duration for live. * v2.0, 2015-10-28, for [ExoPlayer #828][exo #828], add av tag in flv header. 2.0.197 * v2.0, 2015-10-27, for [#512][bug #512] partical hotfix the hls pure audio. 2.0.196 * v2.0, 2015-10-08, [2.0 alpha2(2.0.195)][r2.0a2] released. 89358 lines. diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp index 158acd16b5..6c581166c1 100755 --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -1400,6 +1400,11 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata SrsAmf0Any* prop = NULL; + // when exists the duration, remove it to make ExoPlayer happy. + if (metadata->metadata->get_property("duration") != NULL) { + metadata->metadata->remove("duration"); + } + // generate metadata info to print std::stringstream ss; if ((prop = metadata->metadata->ensure_property_number("width")) != NULL) { diff --git a/trunk/src/protocol/srs_rtmp_amf0.cpp b/trunk/src/protocol/srs_rtmp_amf0.cpp index 78db3c64cb..780ac81abb 100644 --- a/trunk/src/protocol/srs_rtmp_amf0.cpp +++ b/trunk/src/protocol/srs_rtmp_amf0.cpp @@ -513,6 +513,24 @@ SrsAmf0Any* SrsUnSortedHashtable::ensure_property_number(string name) return prop; } +void SrsUnSortedHashtable::remove(string name) +{ + std::vector::iterator it; + + for (it = properties.begin(); it != properties.end();) { + std::string key = it->first; + SrsAmf0Any* any = it->second; + + if (key == name) { + srs_freep(any); + + it = properties.erase(it); + } else { + ++it; + } + } +} + void SrsUnSortedHashtable::copy(SrsUnSortedHashtable* src) { std::vector::iterator it; @@ -787,6 +805,11 @@ SrsAmf0Any* SrsAmf0Object::ensure_property_number(string name) return properties->ensure_property_number(name); } +void SrsAmf0Object::remove(string name) +{ + properties->remove(name); +} + SrsAmf0EcmaArray::SrsAmf0EcmaArray() { _count = 0; diff --git a/trunk/src/protocol/srs_rtmp_amf0.hpp b/trunk/src/protocol/srs_rtmp_amf0.hpp index 6b697c9aca..8480cf60cd 100644 --- a/trunk/src/protocol/srs_rtmp_amf0.hpp +++ b/trunk/src/protocol/srs_rtmp_amf0.hpp @@ -405,6 +405,10 @@ class SrsAmf0Object : public SrsAmf0Any * @remark user should never free the returned value, copy it if needed. */ virtual SrsAmf0Any* ensure_property_number(std::string name); + /** + * remove the property specified by name. + */ + virtual void remove(std::string name); }; /** @@ -803,6 +807,7 @@ namespace _srs_internal virtual SrsAmf0Any* get_property(std::string name); virtual SrsAmf0Any* ensure_property_string(std::string name); virtual SrsAmf0Any* ensure_property_number(std::string name); + virtual void remove(std::string name); public: virtual void copy(SrsUnSortedHashtable* src); };