OS: Windows 7 SP1 x64.
qTox version: v1.16.3, the today's nightly, and 2-3 more nightlies i've tested some time earlier.
Hardware: Clevo P751TM1.
Reproducible: Always
Video of acceptable or good quality.
The video quality/bitrate is very low, in the maximized window the pixelisation is very visible, even though in the settings the camera resolution is set to 1080p.
Video bitrate control has a lot of problems.
We currently have a default target bitrate of 2500 Kbps:
coreav.cpp:
* @var CoreAV::VIDEO_DEFAULT_BITRATE
* @brief Picked at random by fair dice roll.
coreav.h:
static constexpr uint32_t VIDEO_DEFAULT_BITRATE = 2500;
Toxcore provides a video bitrate callback, toxav_callback_video_bit_rate, which we intentionally ignore. We ignore it because the behaviour of the suggested bitrate is:
1) If packet loss -> decrease bitrate by ratio of dropped packets.
2) If no packet loss -> don't call callback
This has the effect of ratcheting bitrate lower and lower, any network blip gets the call stuck at super low bitrate for the rest of the call.
So effectively qTox targets 2.5 Mbps regardless of network condition, packet drop, resolution, etc etc. If your link is less than that, there will be lots of corruption, but if like in your case you're trying to stream 1080p video with a sufficient link, we'll still only target 2.5 Mbps which is unreasonably low.
What needs to be done is an identification of responsibility between Toxcore and clients regarding bitrate control, then one of us having:
1) bitrate control that both increases and decreases quality dynamically, up to a reasonable max bitrate.
2) downscaling of source video if link isn't fast enough for the resolution provided at reasonable quality
3) having a more widely used algo (I don't think just packet loss ratio for a single report is the right thing to go off - longer term stats should be looked at etc.)
4) investigating encoding settings in toxcore (CBR vs VBR etc)
This will take a long time to get fixed. As a faster workaround, reducing the resolution of your source camera in video settings to 720p or 480p should give you better video quality based on our artificially constrained bitrate.
Auto-adaptive bitrate is great, but rather than the currently hard-coded bandwidth target, I suggest that it be modifiable in settings.
This way, people can just change the bandwidth target manually, to fit their needs (whether lower or higher).
Most helpful comment
Auto-adaptive bitrate is great, but rather than the currently hard-coded bandwidth target, I suggest that it be modifiable in settings.
This way, people can just change the bandwidth target manually, to fit their needs (whether lower or higher).