Meumeu / WiVRn

An OpenXR streaming application to a standalone headset
GNU General Public License v3.0
134 stars 22 forks source link

Wired WiVRn #30

Open CJendantix opened 5 months ago

CJendantix commented 5 months ago

I don't know much about this project (I've only barely gotten it to work) but could you either 1. add a wired config option, or 2. tell me how to route it with adb?

xytovl commented 5 months ago

There is no wired support at the moment.

If you want to use adb, the headset will need to connect to port 9757 on both TCP and UDP. It should also be able to see mDNS messages, or be launched manually with the wivrn://host-address intent. This should be a command like adb shell am start -a android.intent.action.VIEW -d "wivrn://${ADDRESS}" org.meumeu.wivrn

mkloczko commented 2 months ago

Just curious, but would it be possible to use libusb to handle such connection? There seems to be an USB accessory mode for Android, then to connect that to the USB server on PC side...

xytovl commented 2 months ago

I have been told that Quest does not expose accessory mode. I don't know for other headsets.

damaestro commented 1 month ago

There does not seem to be a way to pass UDP traffic via adb USB tunneling without extra software. The solutions I've seen would negate the value of using UDP; if it needs to be tunneled and then subject to the same scheduling challenges it's not worth it.

There might be another mechanism to transfer data via the USB tether.

xytovl commented 1 month ago

Since v.015 it is possible to use adb port forwarding and TCP-only mode:

In configuration file:

{
  "tcp_only": true
}

On server side setup port forwarding:

adb reverse tcp:9757 tcp:9757

On headset make sure the application is closed, then launch it through command line:

adb shell am start -a android.intent.action.VIEW -d "wivrn://localhost" org.meumeu.wivrn
PassiveLemon commented 1 month ago

Just gave that a try and it works perfectly. One thing, with ALVR, you only need to set up the adb port forwarding for the wired setup to work. Could we try to get it to that level of simplicity in here too? Maybe a toggle which sets WiVRn to stream over localhost like how you can in ALVR? https://github.com/alvr-org/ALVR/wiki/ALVR-wired-setup-(ALVR-over-USB)