Fixed CPU Usage in the buffer.
This commit is contained in:
parent
47baa483c8
commit
867fa715eb
1 changed files with 6 additions and 3 deletions
|
@ -188,6 +188,7 @@ void DTSC::Stream::endStream(){
|
||||||
}
|
}
|
||||||
|
|
||||||
void DTSC::Stream::addPacket(JSON::Value & newPack){
|
void DTSC::Stream::addPacket(JSON::Value & newPack){
|
||||||
|
bool updateMeta = false;
|
||||||
long long unsigned int now = Util::getMS();
|
long long unsigned int now = Util::getMS();
|
||||||
livePos newPos;
|
livePos newPos;
|
||||||
newPos.trackID = newPack["trackid"].asInt();
|
newPos.trackID = newPack["trackid"].asInt();
|
||||||
|
@ -195,7 +196,7 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
|
||||||
if (buffers.size() > 0){
|
if (buffers.size() > 0){
|
||||||
livePos lastPos = buffers.rbegin()->first;
|
livePos lastPos = buffers.rbegin()->first;
|
||||||
if (newPos < lastPos){
|
if (newPos < lastPos){
|
||||||
if (newPos.seekTime < lastPos.seekTime - 1000){
|
if ((lastPos.seekTime > 1000) && newPos.seekTime < lastPos.seekTime - 1000){
|
||||||
metadata.null();
|
metadata.null();
|
||||||
metadata["reset"] = 1LL;
|
metadata["reset"] = 1LL;
|
||||||
buffers.clear();
|
buffers.clear();
|
||||||
|
@ -239,6 +240,7 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
|
||||||
metadata["tracks"][newTrack]["lastms"] = newPack["time"];
|
metadata["tracks"][newTrack]["lastms"] = newPack["time"];
|
||||||
#define prevKey metadata["tracks"][newTrack]["keys"][keySize - 1]
|
#define prevKey metadata["tracks"][newTrack]["keys"][keySize - 1]
|
||||||
if (newPack.isMember("keyframe") || !keySize || (datapointertype != VIDEO && newPack["time"].asInt() - 2000 > prevKey["time"].asInt())){
|
if (newPack.isMember("keyframe") || !keySize || (datapointertype != VIDEO && newPack["time"].asInt() - 2000 > prevKey["time"].asInt())){
|
||||||
|
updateMeta = true;
|
||||||
keyframes[newPos.trackID].insert(newPos);
|
keyframes[newPos.trackID].insert(newPos);
|
||||||
JSON::Value key;
|
JSON::Value key;
|
||||||
key["time"] = newPack["time"];
|
key["time"] = newPack["time"];
|
||||||
|
@ -306,13 +308,14 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
|
||||||
buffercount = buffers.size();
|
buffercount = buffers.size();
|
||||||
if (buffercount < 2){buffercount = 2;}
|
if (buffercount < 2){buffercount = 2;}
|
||||||
}
|
}
|
||||||
if (metadata["buffer_window"].asInt() < timeBuffered){
|
if (updateMeta && metadata["buffer_window"].asInt() < timeBuffered){
|
||||||
metadata["buffer_window"] = (long long int)timeBuffered;
|
metadata["buffer_window"] = (long long int)timeBuffered;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (buffers.size() > buffercount){
|
while (buffers.size() > buffercount){
|
||||||
if (keyframes[buffers.begin()->first.trackID].count(buffers.begin()->first)){
|
if (keyframes[buffers.begin()->first.trackID].count(buffers.begin()->first)){
|
||||||
|
updateMeta = true;
|
||||||
//if there are < 3 keyframes, throwing one away would mean less than 2 left.
|
//if there are < 3 keyframes, throwing one away would mean less than 2 left.
|
||||||
if (keyframes[buffers.begin()->first.trackID].size() < 3){
|
if (keyframes[buffers.begin()->first.trackID].size() < 3){
|
||||||
std::cout << "Warning - track " << buffers.begin()->first.trackID << " doesn't have enough keyframes to be reliably served." << std::endl;
|
std::cout << "Warning - track " << buffers.begin()->first.trackID << " doesn't have enough keyframes to be reliably served." << std::endl;
|
||||||
|
@ -332,7 +335,7 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
|
||||||
}
|
}
|
||||||
buffers.erase(buffers.begin());
|
buffers.erase(buffers.begin());
|
||||||
}
|
}
|
||||||
if (buffercount > 1){
|
if (updateMeta){
|
||||||
metadata.netPrepare();
|
metadata.netPrepare();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue