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);
};