fippo / rtcstats-server Goto Github PK
View Code? Open in Web Editor NEWServer for https://github.com/fippo/rtcstats
License: MIT License
Server for https://github.com/fippo/rtcstats
License: MIT License
I saw a minGoogFrameHeightReceived of -1 -- that is bogus obviously and should be filtered.
we don't have a feature telling us what turn type is used. Basically a combination of the type pref code in https://github.com/opentok/rtcstats-server/blob/develop/features.js#L26 and the 'figure out connected pair' one in https://github.com/opentok/rtcstats-server/blob/develop/features.js#L1055
https://github.com/opentok/rtcstats-server/blob/develop/features.js#L189-L220
relies on onaddstream. This caused a decrease in the number of records for some of our quality metrics.
Action:
per discussion with @ggarber it is probably easiest to just make one row per stream/track
"undefined" : "2016-06-03T20:45:52.297Z",
This oddly looks as if the timestamp is set wrong
this should be handled -- makes no sense to serialize something to the db then
from getStats for Chrome, SDP for Firefox
PC_0 FEATURE statsMeanReceivingBitrate => Infinity
PC_0 FEATURE statsMeanSendingBitrate => Infinity
@ggarber can you add a LICENSE.md please? MIT?
We would love for there to be a way to start/end a session outside of opening and closing the tab. This is for example useful if you have a lot of back to back calls, and don't open a new browser window for every call. And if the user forgets to close the tab, we can end the session programatically and dump it to rtcstats at the logical end of the call, rather than closing the tab.
getStats is currently stored as a full report. It would be much more efficient to store the same delta value that is transmitted.
seems earlier than packet loss. googDecodingPLC
as noted in #106 (comment) -- it is a good idea to move feature generation (which can take quite a bit of time) to workers
quite similar to what Eric did with distance to datacenter... roughly:
var maxmind = require('maxmind');
var cityLookup = maxmind.open('./GeoLite2-City.mmdb');
var city = cityLookup.get('2.150.33.235');
console.log(city.location);
console.log(city.country.iso_code);
console.log(city.continent.code);
which gives us location (lon/lat), county, continent and timezone
extracting stats for a ssrc needs a better plan.
Basically:
are missing. Making a list here.
currently it is not
mostly linux bugs I think
/home/ubuntu/rtcstats-server/node_modules/ws/lib/Receiver.js:386
default: srcBuffer.copy(dstBuffer, dstOffset, 0, length); break;
^
RangeError: out of range index
at RangeError (native)
at fastCopy (/home/ubuntu/rtcstats-server/node_modules/ws/lib/Receiver.js:386:24)
at Receiver.add (/home/ubuntu/rtcstats-server/node_modules/ws/lib/Receiver.js:86:3)
at Socket.realHandler (/home/ubuntu/rtcstats-server/node_modules/ws/lib/WebSocket.js:800:20)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:177:18)
at Socket.Readable.push (_stream_readable.js:135:10)
at TCP.onread (net.js:542:20)
seems to be websockets/ws#778 even though that is using ws 1.x whereas we are still stuck on 0.8
we're mostly relying on the google stats, we should be working with spec-stats more. One day...
the size of our dynamodb table makes exports to redshift very hard. Also, we re-export the whole DB every time.
What we should do instead is to generate the tablename based on the current data. That assumes that the tables are created in advance but that is doable.
Tables can also be archived to S3 when they are no longer needed for read access.
WDYT @ggarber?
https://github.com/opentok/rtcstats-server/blob/develop/features.js#L787-L808
-- this assumes a getStats frequency of once per second. Should instead measure the time.
I just saw a case where there was no remote relay candidate before the failure. There was one after the ice restart but that was counted as hadremoterelaycandidate => true which lead me to investigate this as "what the heck" instead of shrugging it off as "oh yeah, no remote relay. not gonna work"
by looking at the SDP. For Firefox this means looking for SDPARTA, for edge thisisadapterortc.
This will be helpful classifying ice failures.
seen it go from pos to neg. Does that mean there is echo?
they show bandwidth/cpu adaption. Lives on ssrc report currently
the current model is to keep stuff in memory until the client closes the connection. That won't scale...
I was looking into the audiosendgoogrttmean feature and it has disappeared in Chrome >= 52. This is because https://bugs.chromium.org/p/webrtc/issues/detail?id=3377 has been fixed.
Those stats still appear but apparently not in the first report. For video this seems to be different?!
This means they're undefined and bad things happen in https://github.com/opentok/rtcstats-server/blob/develop/features.js#L1583-L1584
Solution is probably to filter undefined and then calculate instead of throwing away things if the first entry is undefined
i've had a horrible call experience today (which turned out to be related to a broken battery and running low on that). Basically it glitched very, very often.
This is detectable in getStats. If packetsReceived or bytesReceived for a track stay the same despite a 1s difference in time that is a good indicator.
sometimes its a unix timestamp, sometimes its a Date object.
The solution is probably to make .timestamp a unix timestamp everywhere and have .time as the equivalent date object.
this is null in Firefox, causing issues with saving data
how do we determine that a origin is authorized to send us data?
this allows making a guess whether permission has been granted. Arguably, that could be also determined by checking whether device labels pop up in enumerateDevices before getUserMedia.
currently, all data associated with a session is written to a single file. Splitting this up into one file for session metadata and another file for each peerconnection would allow processing a peerconnection once its done and not when the client closes the page.
Increases realtimeness and hopefully also reduces disk usage.
"Cand-+zj+Zh1T" : {
"id" : "Cand-+zj+Zh1T",
"type" : "remotecandidate",
"portNumber" : 50144,
"priority" : 25108479,
"transport" : "udp",
"timestamp" : 1465744899781,
"candidateType" : "relayed",
"ipAddress" : "0.0.0.0"
},
see #61 for why we don't need to obfuscate an ip we own.
i want a feature that calculates the percentage of googCpuLimitedResolution and googBandwidthLimitedResolution being true.
and SRD/addIceCandidate
basically as follows:
to prevent things like http://logs.glob.uno/?c=mozilla%23media#c242496 :-(
https://prestodb.io/
when @baddn showed me this it seemed very similar to the current workflow. But better.
the major remaining crash is in zlib.js line 623 which is this code:
var newReq = self._handle.write(flushFlag,
chunk,
inOff,
availInBefore,
self._buffer,
self._offset,
self._chunkSize);
self._handle is null:
zlib.js:623
var newReq = self._handle.write(flushFlag,
^
TypeError: Cannot read property 'write' of null
at Zlib.callback (zlib.js:623:32)
It is in the process that handles websockets so I suspect the websocket closes in the middle of things. Sounds like a bug in node-core...
https://code.google.com/p/chromium/codesearch#chromium/src/third_party/webrtc/media/base/mediachannel.h&q=accelerate_rate&sq=package:chromium&type=cs&l=646
fraction of data removed sounds bad. I just saw something 29%. Pretty sure this results in bad audio.
I want a mean, max, std dev of this
defined as max(number of framewidth changes per interval)
'cause https://bugzilla.mozilla.org/show_bug.cgi?id=1295552
-- also this will let me detect if credentials expired.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.