CloudXR Android SDK on Vive Focus 3

Hi everyone,

Was playing today with the SDK on Vive Focus 3, manage to run it correctly, but there is a resolution problem (obvious because it is made to run on Focus Plus), you can see the controllers, the SteamVR environment, but with big eye problems :-)

Wanted to know where/how I can tweak things to update the code to work on the Vive Focus 3

Thanks !

1 Like

Can you send a picture of the problem, along with client and server logs from the run?

We’re working with HTC and have not heard of any issues from them on the F3, and given we work on so many different headsets, I’m admittedly at a loss to understand what you are seeing that is wrong.


Thanks for the answer. I will send the logs and screens. But I was worried it wasn’t yet supported, so it is good news ! I followed the guidelines explained there : Wave VR Client (Android) — NVIDIA CloudXR SDK documentation

Just a bug in the beginning with the permissions but then it launches.

1 Like

Hi, tried again.

First of all, following the “Wave VR Client (Android)” step by step guide, I think the “” reference is obsolete, because this SDK is too old, right ?
I’ve tried with this version of the SDK (wave_3.2.0), and it builds ok, run on the focus 3, and give this kind of view if turning my head a bit :

It is as if the left and right eye where not recalculate when moving the head, still looking in the same direction, and placed behind my physical head.

I’ve tried with the Native SDK “wave_4.1.0_native” and does the same.

I’m probably missing something somewhere, but don’t know what.

In attachment, the server log (37.1 KB)

And the VF3 client log
client (21.0 KB)

Hope it will be useful for you

Thanks !

I’m hoping to get a Focus 3 soon, which will help to investigate this more directly. But sounds strange that the pose isn’t updating.

The server logs I’d need to see are the CXR server logs. The steamvr logs won’t tell me anything. However, the client streamer log is sufficient to show you have an issue:

(I)[2021-07-26 16:33:41,1627317220]=833:00:18={18446744072182354480}<NattHolePunch>    NattHolePunch: Failed to receive ping on port 49004: Timeout.
(I)[2021-07-26 16:33:41,-285279012]=843:00:18={18446744072182354480}<NattHolePunch>    NattHolePunch: Received abort event on socket. Aborting pinging
(E)[2021-07-26 16:33:41,-285279012]=843:00:18={18446744072182354480}<NattHolePunch>    NattHolePunch: Failed to receive hole punching packet
(I)[2021-07-26 16:33:41,1634738279]=843:00:18={18446744072182354480}<NattHolePunch>    Stopping Hole punching thread with status: FALSE
(I)[2021-07-26 16:33:41,2067609649]=893:00:18={18446744072121365040}<RtpAudioPlayer>   holePunchMonitorThread done, hole punch result 0, force stop holepunch 1

So there’s a network connectivity issue here, could be causing problems (I’m not sure which channel that is…). If you can try without any firewalls involved, that would help isolate.

Hi, thanks for the answer.
Attached the logs you’ve asked (the one in the appdata folder on the server).

CloudXR Server - SteamVR Log 2021-08-04 17.11.00.txt (370.2 KB)
Streamer Server Log 2021-08-04 17.11.00.txt (202.5 KB)

About the firewall, there is nothing between the headset and the wifi AP and the CloudXR host. Also, it works perfectly with an Oculus Quest 2 and Quest 1, problem is only with Focus 3 (Oculus apk has also been built by myself, I didn’t use the prebuild apk).

I’m also wondering if the “Building Wave VR Client” section in the documentation is suitable for Focus 3. Indeed, the doc refer to the SDK from HTC, but is this relevant for the Focus 3 ?
If I try to build using the latest SDK (wave_4.1.0_native), I have compilation errors (some functions has changed names)

Thanks for your help !

Best regards,


Sorry for the delay. I still haven’t had cycles to investigate, but do have a Focus 3 finally, so will be able to look at this directly at some point. I’ll let you know when I do.

Server logs don’t indicate anything further, but the client logs again were indicating some kind of issue. Again, won’t know further until I can get around to looking into this on F3 directly.

Thanks for confirming. I’ve implemented the proper check, so this should be addressed in the next release out of the box.

Hi there I’ve got the same problem with the Focus3 and current CloudXR SDK 3.0, got it running by fixing the permissions in WaveXR client but the viewing frustums are not correct - if it works for you could you please give me a hint where to do the tweaking?
Thanks a bunch :-)

find the line:
headMatrix = WVR_Inverse(WVR_Convert(framePose));
and remove the WVR_Inverse.

Note that’s only one potential mod you’ll need to make – the controller mapping is another big piece. I’ve been working on full F3 support, but ran into a hiccup that’s delayed things a bit.

1 Like

I’ll try, thank you Dave !

Hi everybody !
It does now fix the problem, however, I think the FOV is not yet ok.
It seems that everything is bigger, like magnified :-)
(the Vive controller is enormous)

Is it normal ?

Thanks !

ok great, so rendering seems good now from the frustums with this fix :-)

there are still a few issues though - controller mapping not there yet as you said, also when i’m using it with Omniverse KIT (Tablet XR extension, is there a better way?) the overall framerate is very low, like 5Hz maybe and its not rendering on full resolution (quarter resolution?)

nevertheless thank you for your efforts Dave, much appreciated :-D

Hi Dave,
I also started hooking up my Vive Focus 3 with my CloudXR Server.
Reading this post it seems like Wave Client is not ready yet supporting Vive Focus 3.
So I like to ask:

  1. Can you give some timeline when changes will be released for Focus 3 in CloudXR?
  2. Sharing code snippets in the forum does not seem efficient.
    Why do you share the code in a zip archive, instead of something, like a private git-hub repository?
    This would enable us users to create a branch for the Focus 3. :)

F3 support should be in the next point release, but I don’t have any timeline yet. I’ll have to ask around whether we might be able to post just a sample update at some point.

There have been some discussions around github, but nothing definitive.


Great, thanks Dave!

Just to close out this thread, the 3.1 release prioritizes Focus 3 and deprecates Focus Plus. Should be pretty close parity to the quest 2, though we’ve noticed the Focus has wifi quality/perf issues that quest does not.

Let us know if 3.1 is working for all of you!

I am seeing the 3.1 release of the headset XR app for the Vive Focus 3 not being able to find the /sdcard/CloudXRLaunchOptions.txt file when the app is ran:

12-19 20:06:27.845 6480 6536 E CloudXRWaveNative: Fatal error: No server IP specified to connect to.
12-19 20:06:27.845 6480 6536 E CloudXRWaveNative: Unable to initialize CloudXR!

After pushing with this command:

C:\Users$env:username\AppData\Local\Android\Sdk\platform-tools\adb.exe push C:\Users$env:username\Desktop\CloudXRLaunchOptions.txt /sdcard/CloudXRLaunchOptions.txt

I validated the file is indeed in the proper place on the headset:

PS C:\Windows\system32> C:\Users$env:username\AppData\Local\Android\Sdk\platform-tools\adb.exe shell
kona:/ $ ls
ls: ./init.zygote64_32.rc: Permission denied
ls: ./init.rc: Permission denied
ls: ./init.usb.rc: Permission denied
ls: ./ueventd.rc: Permission denied
ls: ./init.zygote32.rc: Permission denied
ls: ./init: Permission denied
ls: ./cache: Permission denied
ls: ./init.environ.rc: Permission denied
ls: ./init.recovery.qcom.rc: Permission denied
ls: ./postinstall: Permission denied
ls: ./init.usb.configfs.rc: Permission denied
ls: ./ Permission denied
ls: ./metadata: Permission denied
acct bin charger d debug_ramdisk dev lost+found odm proc product_services sbin sdcard2 sys usbdisk2
apex bugreports config data default.prop etc mnt oem product res sdcard storage system vendor
1|kona:/ $ ls sdcard
Alarms Android CloudXRLaunchOptions.txt DCIM Download Movies Music Notifications Pictures Podcasts Ringtones

The same .txt file works on the Oculus Quest; any ideas as to where this file should go?

make sure that your application has storage permission. that’s the usual cause for that kind of issue.