alvr-org / alvr-org/ALVR

[Feature Request] Disable encoding (raw video transfer)

Abierto
#2,175 13 comentarios 2 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
Rust
Estrellas
7.9k
Forks
708
Merge medio
3 d 23 h
PR fusionados (30 d)
11

Descripción

I'm wondering if adding a feature to disable video encoding entirely would be feasible?

This might sound silly at first but there is a good reason why I would like to do such a thing.
Currently I am using ALVR to connect to my Quest 3 via port forwarding using ADB.
I have determined that this is a USB 3.2 connection and in experimental testing using iperf I was able to achieve data transfer rates of up to 20.8Gbits/s before the ADB connection broke down due to network congestion.

Unfortunately tuning the compression settings to target a bitrate that high dosent seem to work, at least nvenc fails at this task.
High bandwith targets also seem to come with a significant hit in latency, anything above 300Mbits/s adds at minimum 20ms of latency.

I propose to add an option that would disable encoding entirely. This could possibly get rid of any encoding and decoding latency in the system while offering higher visual fidelity.
A quick calculation can confirm that such datarates are feasible:
`2 (number of screens) × 2064 × 2208p (quest resolution) × 120Hz (refresh rate) × 12bpp (bytes per pixel at 8 bit color) = 13.12Gbits/s`
(This could possibly be reduced using chroma subsampling or by lowering the refresh rate)

I believe that adding this feature would not be very complex, and that the following changes are needed:
- Adding a new `EncodePipelineDummy` (or other name) (in `alvr/server/cpp/platform/linux`) which copies the vulkan image on the GPU into a CPU buffer
- Adding a new option to disable encoding in `Settings` (in `alvr/server/cpp/alvr_server/Settings.h`)
- Adding a new UI element to allow the user to toggle the disable encoding option
- Adding a new client decoder for raw video data (possibly in `alvr/client_core/src/platform/android/decoder.rs`)

Id love to contribute to make this a feature. I'm not confident to write any rust code, but I would like to contribute the new encoding pipeline if possible.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.