From 0379825a7df8ebf2308223678a40b0446024fad6 Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Thu, 19 Sep 2013 10:05:07 +0200 Subject: [PATCH] Additional memory upgrades and fix for Silverlight. --- src/buffer/player.cpp | 23 ++++------------------- src/connectors/conn_http_smooth.cpp | 8 +++++--- src/converters/dtscfix.cpp | 4 +++- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/buffer/player.cpp b/src/buffer/player.cpp index 11e460ed..7363e4d6 100644 --- a/src/buffer/player.cpp +++ b/src/buffer/player.cpp @@ -81,20 +81,10 @@ int main(int argc, char** argv){ Socket::Connection in_out = Socket::Connection(fileno(stdout), fileno(stdin)); DTSC::File source = DTSC::File(conf.getString("filename")); - JSON::Value meta = source.getMeta(); - std::string tmp = meta.toNetPacked(); - for (JSON::ObjIter oIt = meta["tracks"].ObjBegin(); oIt != meta["tracks"].ObjEnd(); oIt++){ - for (JSON::ArrIter aIt = oIt->second["keys"].ArrBegin(); aIt != oIt->second["keys"].ArrEnd(); aIt++){ - (*aIt).removeMember("parts"); - } - } + in_out.SendNow(source.getMeta().toNetPacked()); - //send the header - meta.netPrepare(); - in_out.SendNow(meta.toNetPacked()); - - if ( !(meta.isMember("keytime") && meta.isMember("keybpos") && meta.isMember("keynum") && meta.isMember("keylen") && meta.isMember("frags")) - && meta.isMember("video")){ + if ( !(source.getMeta().isMember("keytime") && source.getMeta().isMember("keybpos") && source.getMeta().isMember("keynum") && source.getMeta().isMember("keylen") && source.getMeta().isMember("frags")) + && source.getMeta().isMember("video")){ //file needs to be DTSCFix'ed! Run MistDTSCFix executable on it first std::cerr << "Calculating / writing / updating VoD metadata..." << std::endl; Util::Procs::Start("Fixer", Util::getMyPath() + "MistDTSCFix " + conf.getString("filename")); @@ -105,8 +95,6 @@ int main(int argc, char** argv){ return 1; } - std::cerr << meta.toNetPacked().size() << std::endl; - JSON::Value pausemark; pausemark["datatype"] = "pause_marker"; pausemark["time"] = (long long int)0; @@ -114,9 +102,6 @@ int main(int argc, char** argv){ Socket::Connection StatsSocket = Socket::Connection(Util::getTmpFolder() + "statistics", true); int lasttime = Util::epoch(); //time last packet was sent - if (meta["video"]["keyms"].asInt() < 11){ - meta["video"]["keyms"] = (long long int)1000; - } JSON::Value last_pack; bool meta_sent = false; @@ -162,7 +147,7 @@ int main(int argc, char** argv){ json_sts["vod"]["now"] = Util::epoch(); json_sts["vod"]["start"] = Util::epoch() - sts.conntime; if ( !meta_sent){ - json_sts["vod"]["meta"] = meta; + json_sts["vod"]["meta"] = source.getMeta(); for (JSON::ObjIter oIt = json_sts["vod"]["meta"]["tracks"].ObjBegin(); oIt != json_sts["vod"]["meta"]["tracks"].ObjEnd(); oIt++){ oIt->second.removeMember("init"); oIt->second.removeMember("keys"); diff --git a/src/connectors/conn_http_smooth.cpp b/src/connectors/conn_http_smooth.cpp index ffad0ec1..289a37cb 100644 --- a/src/connectors/conn_http_smooth.cpp +++ b/src/connectors/conn_http_smooth.cpp @@ -364,11 +364,13 @@ namespace Connector_HTTP { trun_box.setFlags(MP4::trundataOffset | MP4::trunfirstSampleFlags | MP4::trunsampleDuration | MP4::trunsampleSize); trun_box.setDataOffset(42); trun_box.setFirstSampleFlags(0x00000040 | MP4::isIPicture | MP4::noDisposable | MP4::isKeySample); - for (int i = 0; i < keyObj["parts"].size(); i++){ + std::deque tmpParts; + JSON::decodeVector(keyObj["parts"].asString(), tmpParts); + for (int i = 0; i < tmpParts.size(); i++){ MP4::trunSampleInformation trunSample; - trunSample.sampleSize = keyObj["parts"][i].asInt(); + trunSample.sampleSize = tmpParts[i]; //Guesstimate sample duration. - trunSample.sampleDuration = ((double)(keyObj["len"].asInt() * 10000) / keyObj["parts"].size()); + trunSample.sampleDuration = ((double)(keyObj["len"].asInt() * 10000) / tmpParts.size()); trun_box.setSampleInformation(trunSample, i); } diff --git a/src/converters/dtscfix.cpp b/src/converters/dtscfix.cpp index 96e4125e..35c2dceb 100644 --- a/src/converters/dtscfix.cpp +++ b/src/converters/dtscfix.cpp @@ -26,7 +26,9 @@ namespace Converters { ///\return The return code for the fixed program. int DTSCFix(Util::Config & conf){ DTSC::File F(conf.getString("filename")); - JSON::Value oriheader = F.getFirstMeta(); + F.seek_bpos(0); + F.parseNext(); + JSON::Value oriheader = F.getJSON(); JSON::Value meta = F.getMeta(); JSON::Value pack;