From 6e9f7978473d041e4bafc39935f6e42bc8d2b0fe Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Sun, 15 Sep 2013 10:40:17 +0200 Subject: [PATCH] Improved memory usage for VoD files. Temporarily breaks compatibility with Smooth and MP4. --- src/buffer/player.cpp | 9 +++++++++ src/converters/dtscfix.cpp | 24 ++++++++++++------------ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/buffer/player.cpp b/src/buffer/player.cpp index 4ffefc25..11e460ed 100644 --- a/src/buffer/player.cpp +++ b/src/buffer/player.cpp @@ -82,8 +82,15 @@ int main(int argc, char** argv){ 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"); + } + } //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")) @@ -98,6 +105,8 @@ 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; diff --git a/src/converters/dtscfix.cpp b/src/converters/dtscfix.cpp index a6c85bc3..96e4125e 100644 --- a/src/converters/dtscfix.cpp +++ b/src/converters/dtscfix.cpp @@ -141,9 +141,9 @@ namespace Converters { meta["tracks"][currentID]["keys"][newNum - 1]["len"] = F.getJSON()["time"].asInt() - meta["tracks"][currentID]["keys"][newNum - 1]["time"].asInt(); meta["tracks"][currentID]["keys"][newNum - 1]["size"] = trackData[currentID].totalSize; trackData[currentID].totalSize = 0; - for (int i = 0; i < trackData[currentID].parts.size(); i++){ - meta["tracks"][currentID]["keys"][newNum - 1]["parts"].append(trackData[currentID].parts[i]); - } + std::string encodeVec = JSON::encodeVector( trackData[currentID].parts ); + meta["tracks"][currentID]["keys"][newNum - 1]["parts"] = encodeVec; + meta["tracks"][currentID]["keys"][newNum - 1]["partsize"] = (long long int)trackData[currentID].parts.size(); trackData[currentID].parts.clear(); } } @@ -158,9 +158,9 @@ namespace Converters { meta["tracks"][currentID]["keys"][newNum - 1]["len"] = F.getJSON()["time"].asInt() - meta["tracks"][currentID]["keys"][newNum - 1]["time"].asInt(); meta["tracks"][currentID]["keys"][newNum - 1]["size"] = trackData[currentID].totalSize; trackData[currentID].totalSize = 0; - for (int i = 0; i < trackData[currentID].parts.size(); i++){ - meta["tracks"][currentID]["keys"][newNum - 1]["parts"].append(trackData[currentID].parts[i]); - } + std::string encodeVec = JSON::encodeVector( trackData[currentID].parts ); + meta["tracks"][currentID]["keys"][newNum - 1]["parts"] = encodeVec; + meta["tracks"][currentID]["keys"][newNum - 1]["partsize"] = (long long int)trackData[currentID].parts.size(); trackData[currentID].parts.clear(); } } @@ -201,15 +201,15 @@ namespace Converters { meta["tracks"][it->first]["keys"][tmp - 1]["len"] = it->second.lastms; } meta["tracks"][it->first]["keys"][tmp - 1]["size"] = it->second.totalSize; - for (int i = 0; i < trackData[it->first].parts.size(); i++){ - meta["tracks"][it->first]["keys"][tmp - 1]["parts"].append(it->second.parts[i]); - } + std::string encodeVec = JSON::encodeVector( trackData[currentID].parts ); + meta["tracks"][currentID]["keys"][tmp - 1]["parts"] = encodeVec; + meta["tracks"][currentID]["keys"][tmp - 1]["partsize"] = (long long int)trackData[currentID].parts.size(); }else{ meta["tracks"][it->first]["keys"][tmp]["len"] = it->second.lastms; meta["tracks"][it->first]["keys"][tmp]["size"] = it->second.totalSize; - for (int i = 0; i < trackData[it->first].parts.size(); i++){ - meta["tracks"][it->first]["keys"][tmp]["parts"].append(it->second.parts[i]); - } + std::string encodeVec = JSON::encodeVector( trackData[currentID].parts ); + meta["tracks"][currentID]["keys"][tmp - 1]["parts"] = encodeVec; + meta["tracks"][currentID]["keys"][tmp - 1]["partsize"] = (long long int)trackData[currentID].parts.size(); } //calculate fragments meta["tracks"][it->first]["frags"].null();