Calculate both average and peak bit rates

This commit is contained in:
Erik Zandvliet 2017-10-04 11:12:30 +02:00 committed by Thulinma
parent 761fbdc944
commit cba0c0b38b
2 changed files with 19 additions and 4 deletions

View file

@ -292,6 +292,7 @@ namespace DTSC {
unsigned long long firstms; unsigned long long firstms;
unsigned long long lastms; unsigned long long lastms;
int bps; int bps;
int max_bps;
int missedFrags; int missedFrags;
std::string init; std::string init;
std::string codec; std::string codec;

View file

@ -1098,6 +1098,7 @@ namespace DTSC {
firstms = 0; firstms = 0;
lastms = 0; lastms = 0;
bps = 0; bps = 0;
max_bps = 0;
missedFrags = 0; missedFrags = 0;
rate = 0; rate = 0;
size = 0; size = 0;
@ -1126,6 +1127,7 @@ namespace DTSC {
firstms = trackRef["firstms"].asInt(); firstms = trackRef["firstms"].asInt();
lastms = trackRef["lastms"].asInt(); lastms = trackRef["lastms"].asInt();
bps = trackRef["bps"].asInt(); bps = trackRef["bps"].asInt();
max_bps = trackRef["maxbps"].asInt();
missedFrags = trackRef["missed_frags"].asInt(); missedFrags = trackRef["missed_frags"].asInt();
codec = trackRef["codec"].asStringRef(); codec = trackRef["codec"].asStringRef();
type = trackRef["type"].asStringRef(); type = trackRef["type"].asStringRef();
@ -1180,6 +1182,7 @@ namespace DTSC {
firstms = trackRef.getMember("firstms").asInt(); firstms = trackRef.getMember("firstms").asInt();
lastms = trackRef.getMember("lastms").asInt(); lastms = trackRef.getMember("lastms").asInt();
bps = trackRef.getMember("bps").asInt(); bps = trackRef.getMember("bps").asInt();
max_bps = trackRef.getMember("maxbps").asInt();
missedFrags = trackRef.getMember("missed_frags").asInt(); missedFrags = trackRef.getMember("missed_frags").asInt();
codec = trackRef.getMember("codec").asString(); codec = trackRef.getMember("codec").asString();
type = trackRef.getMember("type").asString(); type = trackRef.getMember("type").asString();
@ -1263,10 +1266,14 @@ namespace DTSC {
newFrag.setNumber(keys[keys.size() - 1].getNumber()); newFrag.setNumber(keys[keys.size() - 1].getNumber());
if (fragments.size()) { if (fragments.size()) {
fragments[fragments.size() - 1].setDuration(packTime - getKey(fragments[fragments.size() - 1].getNumber()).getTime()); fragments[fragments.size() - 1].setDuration(packTime - getKey(fragments[fragments.size() - 1].getNumber()).getTime());
unsigned int newBps = (fragments[fragments.size() - 1].getSize() * 1000) / fragments[fragments.size() - 1].getDuration(); uint64_t totalBytes = 0;
if (newBps > bps){ uint64_t totalDuration = 0;
bps = newBps; for (std::deque<DTSC::Fragment>::iterator it = fragments.begin(); it != fragments.end(); it++){
totalBytes += it->getSize();
totalDuration += it->getDuration();
} }
bps = totalDuration ? (totalBytes * 1000) / totalDuration : 0;
max_bps = std::max(max_bps, (int)((fragments.rbegin()->getSize() * 1000) / fragments.rbegin()->getDuration()));
} }
newFrag.setDuration(0); newFrag.setDuration(0);
newFrag.setSize(0); newFrag.setSize(0);
@ -1377,6 +1384,7 @@ namespace DTSC {
keySizes.clear(); keySizes.clear();
keys.clear(); keys.clear();
bps = 0; bps = 0;
max_bps = 0;
firstms = 0; firstms = 0;
lastms = 0; lastms = 0;
} }
@ -1517,6 +1525,7 @@ namespace DTSC {
str << std::string(indent + 2, ' ') << "Firstms: " << firstms << std::endl; str << std::string(indent + 2, ' ') << "Firstms: " << firstms << std::endl;
str << std::string(indent + 2, ' ') << "Lastms: " << lastms << std::endl; str << std::string(indent + 2, ' ') << "Lastms: " << lastms << std::endl;
str << std::string(indent + 2, ' ') << "Bps: " << bps << std::endl; str << std::string(indent + 2, ' ') << "Bps: " << bps << std::endl;
str << std::string(indent + 2, ' ') << "Peak bps: " << max_bps << std::endl;
if (missedFrags) { if (missedFrags) {
str << std::string(indent + 2, ' ') << "missedFrags: " << missedFrags << std::endl; str << std::string(indent + 2, ' ') << "missedFrags: " << missedFrags << std::endl;
} }
@ -1632,7 +1641,7 @@ namespace DTSC {
///\brief Determines the "packed" size of a track ///\brief Determines the "packed" size of a track
int Track::getSendLen(bool skipDynamic) { int Track::getSendLen(bool skipDynamic) {
int result = 107 + init.size() + codec.size() + type.size() + getWritableIdentifier().size(); int result = 124 + init.size() + codec.size() + type.size() + getWritableIdentifier().size();
if (!skipDynamic){ if (!skipDynamic){
result += fragments.size() * PACKED_FRAGMENT_SIZE + 16; result += fragments.size() * PACKED_FRAGMENT_SIZE + 16;
result += keys.size() * PACKED_KEY_SIZE + 11; result += keys.size() * PACKED_KEY_SIZE + 11;
@ -1721,6 +1730,8 @@ namespace DTSC {
writePointer(p, convertLongLong(lastms), 8); writePointer(p, convertLongLong(lastms), 8);
writePointer(p, "\000\003bps\001", 6); writePointer(p, "\000\003bps\001", 6);
writePointer(p, convertLongLong(bps), 8); writePointer(p, convertLongLong(bps), 8);
writePointer(p, "\000\006maxbps\001", 9);
writePointer(p, convertLongLong(max_bps), 8);
writePointer(p, "\000\004init\002", 7); writePointer(p, "\000\004init\002", 7);
writePointer(p, convertInt(init.size()), 4); writePointer(p, convertInt(init.size()), 4);
writePointer(p, init); writePointer(p, init);
@ -1802,6 +1813,8 @@ namespace DTSC {
conn.SendNow(convertLongLong(lastms), 8); conn.SendNow(convertLongLong(lastms), 8);
conn.SendNow("\000\003bps\001", 6); conn.SendNow("\000\003bps\001", 6);
conn.SendNow(convertLongLong(bps), 8); conn.SendNow(convertLongLong(bps), 8);
conn.SendNow("\000\006maxbps\001", 9);
conn.SendNow(convertLongLong(max_bps), 8);
conn.SendNow("\000\004init\002", 7); conn.SendNow("\000\004init\002", 7);
conn.SendNow(convertInt(init.size()), 4); conn.SendNow(convertInt(init.size()), 4);
conn.SendNow(init); conn.SendNow(init);
@ -1973,6 +1986,7 @@ namespace DTSC {
result["firstms"] = (long long)firstms; result["firstms"] = (long long)firstms;
result["lastms"] = (long long)lastms; result["lastms"] = (long long)lastms;
result["bps"] = bps; result["bps"] = bps;
result["maxbps"] = max_bps;
if (missedFrags) { if (missedFrags) {
result["missed_frags"] = missedFrags; result["missed_frags"] = missedFrags;
} }