Fixed firstms/lastms in DTSC::Track, fixed stream buffer limitations.

This commit is contained in:
Thulinma 2013-12-03 09:50:25 +01:00
parent f09b258804
commit 99353f49a0
3 changed files with 11 additions and 11 deletions

View file

@ -235,9 +235,6 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
newPos.seekTime++; newPos.seekTime++;
} }
buffers[newPos] = newPack; buffers[newPos] = newPack;
if (buffercount > 1){
buffers[newPos].toNetPacked();//make sure package is packed and ready
}
datapointertype = INVALID; datapointertype = INVALID;
std::string tmp = ""; std::string tmp = "";
if (newPack.isMember("trackid") && newPack["trackid"].asInt() > 0){ if (newPack.isMember("trackid") && newPack["trackid"].asInt() > 0){
@ -260,6 +257,9 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
} }
if (buffercount > 1){ if (buffercount > 1){
metadata.update(newPack); metadata.update(newPack);
if (newPack.isMember("keyframe") || metadata.tracks[newPos.trackID].keys.rbegin()->getTime() == newPos.seekTime){
keyframes[newPos.trackID].insert(newPos);
}
metadata.live = true; metadata.live = true;
} }
@ -297,7 +297,7 @@ void DTSC::Stream::cutOneBuffer(){
metadata.tracks[trid].keys.pop_front(); metadata.tracks[trid].keys.pop_front();
// delete fragments of which the beginning can no longer be reached // 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()){ 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(); metadata.tracks[trid].fragments.pop_front();
// increase the missed fragments counter // increase the missed fragments counter
metadata.tracks[trid].missedFrags ++; metadata.tracks[trid].missedFrags ++;

View file

@ -312,12 +312,12 @@ namespace DTSC {
void resetStream(); void resetStream();
std::map<livePos,JSON::Value> buffers; std::map<livePos,JSON::Value> buffers;
std::map<int,std::set<livePos> > keyframes; std::map<int,std::set<livePos> > keyframes;
void addPacket(JSON::Value & newPack); virtual void addPacket(JSON::Value & newPack);
void addMeta(JSON::Value & newMeta); virtual void addMeta(JSON::Value & newMeta);
datatype datapointertype; datatype datapointertype;
unsigned int buffercount; unsigned int buffercount;
unsigned int buffertime; unsigned int buffertime;
std::map<int,std::string> trackMapping; std::map<int,std::string> trackMapping;
void deletionCallback(livePos deleting); virtual void deletionCallback(livePos deleting);
}; };
} }

View file

@ -125,6 +125,8 @@ namespace DTSC {
parts = NULL; parts = NULL;
partLen = 0; partLen = 0;
missedFrags = 0; missedFrags = 0;
firstms = 0;
lastms = 0;
} }
readOnlyTrack::readOnlyTrack(JSON::Value & trackRef){ readOnlyTrack::readOnlyTrack(JSON::Value & trackRef){
@ -253,9 +255,6 @@ namespace DTSC {
}else{ }else{
newPart.setDuration(0); newPart.setDuration(0);
} }
if (pack["time"].asInt() > firstms){
firstms = pack["time"].asInt();
}
parts.push_back(newPart); parts.push_back(newPart);
lastms = pack["time"].asInt(); lastms = pack["time"].asInt();
if (pack.isMember("keyframe") || !keys.size() || (type != "video" && pack["time"].asInt() - 5000 > keys[keys.size() - 1].getTime())){ 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); newKey.setBpos(0);
} }
keys.push_back(newKey); keys.push_back(newKey);
firstms = keys[0].getTime();
if (!fragments.size() || pack["time"].asInt() - 10000 >= getKey(fragments.rbegin()->getNumber()).getTime()){ if (!fragments.size() || pack["time"].asInt() - 10000 >= getKey(fragments.rbegin()->getNumber()).getTime()){
//new fragment //new fragment
Fragment newFrag; Fragment newFrag;
@ -331,7 +331,7 @@ namespace DTSC {
parts.clear(); parts.clear();
keys.clear(); keys.clear();
bps = 0; bps = 0;
firstms = 999; firstms = 0;
lastms = 0; lastms = 0;
} }