I know the answer to this is “use an MCU and buy a more powerful server” but…
I have one user who has a poor internet connection (WIMAX based, going over the countryside to a mountain via an antenna). She gets around 4 to 5Mbps upload (20 down). There’s a possibility - maybe - of increasing it to 7… find out tomorrow but even that isn’t great.
My users are connecting for the sole purpose of recording video and/or live streaming video. The problem is - no matter what I try in the settings, sometimes her resolution changes mid-stream. I have been trying to fix it to 720/30 but may have to go lower. But I’ve even seen the odd occasion when my own resolution has dropped slightly from 1920x to 1440x, and I’m on the same 1Gbps local network as the server.
What I really need is to be able to force JVB to always send a fixed size to me regardless of anything else (ie, drop the frame rate if needed, or drop the bitrate). I appreciate it’s an SFU and doesn’t touch the data, so this may be impossible as things stand, but I thought I’d ask anyway (and no offence to jbg on the IRC channel who has given me amazing help for weeks - months? - he really knows his stuff, and we’ve discussed this in detail -I’m sure he is right but it never hurts to get a second opinion).
At the moment I save the raw mediastream data that JVB sends, so that is why the resolution changes in my saved file. On the screen, where I send it to an HDMI capture card, it stays fixed because the html5 video element automatically resizes it on-the-fly.
But capturing that seems to only capture the original stream so same problem.
The only way I’ve got it to work is to redraw the stream onto an html 5 canvas element. That keeps it full size, and I can capture that and save it to disk, but the Raspberry PI 4s I’m using for this have finally said “come on, we’re already doing enough no?” and won’t give me a good enough frame rate to make it work - even at 720, never mind 1080 which I’d prefer for the other users.
The only other thing I can think of - apart from moving to an MCU/new server etc which I don’t want to do - is if there was something I could use to take the stream and resize it on the fly before I save it without the overhead of drawing it on the screen in a canvas and capturing that data. I’ll speak to the fmmpeg guys about that.
Otherwise, is there any way with Jitisi I can say “please always send me 720 (or 480 even) - and if the internet has a blip, or the client computer is struggling for some reason - just slow down the frame rate or bitrate” ?
I’m using a local deployment of Jitisi including a new installation of the source code of JVB from github yesterday. Server is running on a mini pc ubuntu machine with 8gb.