1

Hi folks,

I got some really high-fps (200+ fps) Daheng USB3 cameras in my hand here and try to make it fly with Kinovea. For my sports recording case I would need a framerate of at least 180fps.
The problem is that the camera will be located remotely, so that I cannot connect the camera with USB3 directly. Instead, I need to "somehow" get this down to RJ45-based networking. The uncompressed data throughput (resolution 1440x1080), however, is way too high for a 1GBit/s network (10 GBit/s network isn't really an option due to other reasons). So this means, I need to get the 200+ fps converted to an MJPEG stream to be able to squeeze it into the network cable. I wrote a little webserver to that end - and together with https://github.com/libjpeg-turbo/libjpeg-turbo and a lot of CPU cores, I can tune it up to 200 and something fps (curl-tested).

Pulling the webserver's URL into Kinovea (using IP Camera manual setup configured using MJPEG), I was surprised to see that it only got up to somewhere around 130fps. Loss value stays at zero. Anything faster does not double down neither during preview metering (floats around between 120 and 130 fps) nor when recording (a test provided an effective recording framerate of ~128 fps).

What is the expected max framerate/data throughput with the IP Camera driver?

2

I've never formally tested the max throughput of the IP camera module. The low level code for this is coming from an external library, there might be a couple of extra buffer copies that could be factored out by rewriting it. I don't know if that's the culprit though.

Once the buffers are captured they go through a pipeline that is shared with the other camera types and this is known to support this kind of speed so the issue is probably somewhere before that.

If you film a high precision stopwatch, can you figure if the lost frames are happening at random intervals or if they are bunched together, like a whole chunk missing at once?

As an experiment you could have the server on the same machine and capture through the loopback, see if you still get the limit.