From 99353f49a075223298ef2dbf0db0658427a9e148 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Tue, 3 Dec 2013 09:50:25 +0100 Subject: [PATCH] Fixed firstms/lastms in DTSC::Track, fixed stream buffer limitations. --- lib/dtsc.cpp | 8 ++++---- lib/dtsc.h | 6 +++--- lib/dtscmeta.cpp | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/dtsc.cpp b/lib/dtsc.cpp index 8bcd03db..9b1cdf90 100644 --- a/lib/dtsc.cpp +++ b/lib/dtsc.cpp @@ -235,9 +235,6 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){ newPos.seekTime++; } buffers[newPos] = newPack; - if (buffercount > 1){ - buffers[newPos].toNetPacked();//make sure package is packed and ready - } datapointertype = INVALID; std::string tmp = ""; if (newPack.isMember("trackid") && newPack["trackid"].asInt() > 0){ @@ -260,6 +257,9 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){ } if (buffercount > 1){ metadata.update(newPack); + if (newPack.isMember("keyframe") || metadata.tracks[newPos.trackID].keys.rbegin()->getTime() == newPos.seekTime){ + keyframes[newPos.trackID].insert(newPos); + } metadata.live = true; } @@ -297,7 +297,7 @@ void DTSC::Stream::cutOneBuffer(){ metadata.tracks[trid].keys.pop_front(); // delete fragments of which the beginning can no longer be reached while (metadata.tracks[trid].fragments.size() && metadata.tracks[trid].fragments[0].getNumber() < metadata.tracks[trid].keys[0].getNumber()){ - metadata.tracks[trid].firstms += metadata.tracks[trid].fragments[0].getDuration(); + metadata.tracks[trid].firstms = metadata.tracks[trid].keys[0].getTime(); metadata.tracks[trid].fragments.pop_front(); // increase the missed fragments counter metadata.tracks[trid].missedFrags ++; diff --git a/lib/dtsc.h b/lib/dtsc.h index caa23c95..1bb850c7 100644 --- a/lib/dtsc.h +++ b/lib/dtsc.h @@ -312,12 +312,12 @@ namespace DTSC { void resetStream(); std::map buffers; std::map > keyframes; - void addPacket(JSON::Value & newPack); - void addMeta(JSON::Value & newMeta); + virtual void addPacket(JSON::Value & newPack); + virtual void addMeta(JSON::Value & newMeta); datatype datapointertype; unsigned int buffercount; unsigned int buffertime; std::map trackMapping; - void deletionCallback(livePos deleting); + virtual void deletionCallback(livePos deleting); }; } diff --git a/lib/dtscmeta.cpp b/lib/dtscmeta.cpp index bcb58d6a..b0441eaa 100644 --- a/lib/dtscmeta.cpp +++ b/lib/dtscmeta.cpp @@ -125,6 +125,8 @@ namespace DTSC { parts = NULL; partLen = 0; missedFrags = 0; + firstms = 0; + lastms = 0; } readOnlyTrack::readOnlyTrack(JSON::Value & trackRef){ @@ -253,9 +255,6 @@ namespace DTSC { }else{ newPart.setDuration(0); } - if (pack["time"].asInt() > firstms){ - firstms = pack["time"].asInt(); - } parts.push_back(newPart); lastms = pack["time"].asInt(); if (pack.isMember("keyframe") || !keys.size() || (type != "video" && pack["time"].asInt() - 5000 > keys[keys.size() - 1].getTime())){ @@ -275,6 +274,7 @@ namespace DTSC { newKey.setBpos(0); } keys.push_back(newKey); + firstms = keys[0].getTime(); if (!fragments.size() || pack["time"].asInt() - 10000 >= getKey(fragments.rbegin()->getNumber()).getTime()){ //new fragment Fragment newFrag; @@ -331,7 +331,7 @@ namespace DTSC { parts.clear(); keys.clear(); bps = 0; - firstms = 999; + firstms = 0; lastms = 0; }