From 48fad86c2641436ec17e711d8e0a0a5a0cfb3f42 Mon Sep 17 00:00:00 2001 From: Erik Zandvliet Date: Wed, 29 May 2013 09:19:42 +0200 Subject: [PATCH] Added force parameter to DTSCFix, various fixes in smooth connector. --- src/connectors/conn_http_smooth.cpp | 20 ++++++++++++++------ src/converters/dtscfix.cpp | 12 +++++++++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/connectors/conn_http_smooth.cpp b/src/connectors/conn_http_smooth.cpp index 1cfc623e..ba488a42 100644 --- a/src/connectors/conn_http_smooth.cpp +++ b/src/connectors/conn_http_smooth.cpp @@ -94,7 +94,7 @@ namespace Connector_HTTP { for (unsigned int i = 0; i < allAudio.ObjBegin()->second["keylen"].size(); i++){ Result << "second["keytime"][i].asInt() * 10000 << "\" "; + Result << "t=\"" << allAudio.ObjBegin()->second["keytime"][0u].asInt() * 10000 << "\" "; } Result << "d=\"" << allAudio.ObjBegin()->second["keylen"][i].asInt() * 10000 << "\" />\n"; } @@ -318,10 +318,17 @@ namespace Connector_HTTP { //Wrap everything in mp4 boxes MP4::MFHD mfhd_box; - for (int i = 0; i < Strm.metadata["keytime"].size(); i++){ - if (Strm.metadata["keytime"][i].asInt() >= (requestedTime / 10000)){ - mfhd_box.setSequenceNumber(Strm.metadata["keynum"][i].asInt()); - myDuration = Strm.metadata["keylen"][i].asInt() * 10000; + JSON::Value trackRef; + if (wantsVideo){ + trackRef = allVideo.ObjBegin()->second; + } + if (wantsAudio){ + trackRef = allAudio.ObjBegin()->second; + } + for (int i = 0; i < trackRef["keytime"].size(); i++){ + if (trackRef["keytime"][i].asInt() >= (requestedTime / 10000)){ + mfhd_box.setSequenceNumber(trackRef["keynum"][i].asInt()); + myDuration = trackRef["keylen"][i].asInt() * 10000; break; } } @@ -391,11 +398,12 @@ namespace Connector_HTTP { conn.SendNow(dataBuffer.front()); dataBuffer.pop_front(); } + conn.SendNow("\r\n",2); } dataBuffer.clear(); dataSize = 0; } - if ((wantsAudio && Strm.lastType() == DTSC::AUDIO) || (wantsVideo && Strm.lastType() == DTSC::VIDEO)){ + if (Strm.lastType() == DTSC::AUDIO || Strm.lastType() == DTSC::VIDEO){ //Select only the data that the client has requested. dataBuffer.push_back(Strm.lastData()); dataSize += Strm.lastData().size(); diff --git a/src/converters/dtscfix.cpp b/src/converters/dtscfix.cpp index 87f63c87..a6e4fa93 100644 --- a/src/converters/dtscfix.cpp +++ b/src/converters/dtscfix.cpp @@ -33,7 +33,7 @@ namespace Converters { std::cerr << "This file is too old to fix - please reconvert." << std::endl; return 1; } - if (oriheader["moreheader"].asInt() > 0){ + if (oriheader["moreheader"].asInt() > 0 && !conf.getBool("force")){ if (meta.isMember("tracks") && meta["tracks"].size() > 0){ bool isFixed = true; for ( JSON::ObjIter trackIt = meta["tracks"].ObjBegin(); trackIt != meta["tracks"].ObjEnd(); trackIt ++) { @@ -71,6 +71,11 @@ namespace Converters { if (it->second["trackid"].asInt() >= nextFreeID){ nextFreeID = it->second["trackid"].asInt() + 1; } + it->second.removeMember("keylen"); + it->second.removeMember("keybpos"); + it->second.removeMember("frags"); + it->second.removeMember("keytime"); + it->second.removeMember("keynum"); } F.selectTracks(tmp); @@ -139,7 +144,7 @@ namespace Converters { } } }else{ - if ((F.getJSON()["time"].asInt() - trackData[currentID].lastKeyTime) > 1000){ + if ((F.getJSON()["time"].asInt() - trackData[currentID].lastKeyTime) > 5000){ trackData[currentID].lastKeyTime = F.getJSON()["time"].asInt(); meta["tracks"][currentID]["keytime"].append(F.getJSON()["time"]); meta["tracks"][currentID]["keybpos"].append(F.getLastReadPos()); @@ -188,7 +193,7 @@ namespace Converters { currFrag = meta["tracks"][it->first]["keytime"][i].asInt() / 10000; long long int fragLen = 1; long long int fragDur = meta["tracks"][it->first]["keylen"][i].asInt(); - for (unsigned int j = i; j < meta["tracks"][it->first]["keytime"].size(); j++){ + for (unsigned int j = i + 1; j < meta["tracks"][it->first]["keytime"].size(); j++){ if (meta["tracks"][it->first]["keytime"][j].asInt() / 10000 > currFrag || j == meta["tracks"][it->first]["keytime"].size() - 1){ JSON::Value thisFrag; thisFrag["num"] = meta["tracks"][it->first]["keynum"][i]; @@ -233,6 +238,7 @@ namespace Converters { int main(int argc, char ** argv){ Util::Config conf = Util::Config(argv[0], PACKAGE_VERSION); conf.addOption("filename", JSON::fromString("{\"arg_num\":1, \"arg\":\"string\", \"help\":\"Filename of the file to attempt to fix.\"}")); + conf.addOption("force", JSON::fromString("{\"short\":\"f\", \"long\":\"force\", \"default\":0, \"help\":\"Force fixing.\"}")); conf.parseArgs(argc, argv); return Converters::DTSCFix(conf); } //main