Opening gaze data to streamer developers?

Hello there, I have a question and a potential solution to how these data could be opened to people developing streamers for foveated encoding.

Is there any plans to open up any type of gaze data, be it exact or just a general area instead of a pinpoint?

And if so I have a solution in mind, There could be a program for developers who are specifically making streaming apps in which Apple can come in and take a look at the streaming app and make a judgment from there if the developer would be trustworthy to allow access to gaze data.

This would solve any privacy concerns regarding data scraping if the app was looked through beforehand while still enabling access to the needed data for foveated streaming.

And beforehand there could be a prompt asking if you would like to allow the app to access gaze data or not much like other solutions.

More developers of VR streaming apps having access to this would be a net positive thing as it would create more robust options to stream VR to The vision pro, as cloud XR is relatively limited in terms of what it supports. In turn it would create more incentive for more developers to develop their streaming solutions for the vision pro.

Thank you for hosting this q&a!

Answered by Vision Pro Engineer in 892763022

Hello, @WhisperTheWolf --

Good news! We have added functionality very similar to what you propose in visionOS 27.0. It's called FoveatedStreamingProvider.

FoveatedStreamingProvider is a way to extend visionOS with a streaming protocol that is different from the built-in default protocol (NVIDIA CloudXR).

Here's how it works:

  1. Streaming protocol developers ship an app on the App Store. This app includes an appex (ExtensionKit extension) that extends visionOS with the new foveated streaming protocol. These app extensions implement FoveatedStreamingProvider and, after review from Apple, are granted a special entitlement which gives the extension access to approximate eye input data. This eye input data may only be used to implement the foveated streaming protocol.
  2. We've added a new API to FoveatedStreamingSession, queryStreamingProviders, which allows streaming clients to query the list of available protocols on the system. FoveatedStreamingSessions can select which provider to use via connect(endpoint:streamingProvider:)
  3. End-users install both the streaming protocol (MyProtocol.app, which vends MyProtocol.appex) as well as any games that leverage that protocol (MyGame.app, MyCADApplication.app, MySimulator.app). Those apps can choose to leverage MyProtocol.appex, when installed.

If you are interested in extending visionOS with a foveated streaming protocol, please reach out via our foveated streaming provider entitlement request form.

So to summarize, the FoveatedStreaming framework has two entitlements:

  • Apps that use FoveatedStreamingSession need the "Foveated Streaming Session" entitlement com.apple.developer.foveated-streaming-session. This entitlement is available to any developers in the apple developer program with no review beyond App Store review.
  • App extensions that extend visionOS need the "Foveated Streaming Provider" entitlement com.apple.developer.foveated-streaming-provider.
    • Only the streaming provider (MyProtocol.appex) needs this protected entitlement, because streaming providers are granted access to sensitive eye input data. Streaming client apps (e.g. MyGame.app) do not need this special -provider entitlement, they only need -session.

I also wanted to note how this architecture helps preserve user privacy:

  • On visionOS, eye input data is restricted only to the app extension. App extensions are a separate process, and we have implemented technical restrictions to help ensure the eye input data does not leave the extension process.
  • FoveatedStreamingProvider extension processes are only created when an end user begins a Streaming Session (ultimately via the FoveatedStreamingSession.connect API). End users must give explicit permission every time they start this, and data is only sent for the duration of the session. Users may end the session (and therefore terminate the streaming provider extension) at any time, from Control Center.
  • The eye input data given to FoveatedStreamingProvider extensions is limited to the resolution required for high quality foveated streaming. Full resolution eye input data is not exposed.
  • We review every application via the entitlement request form to help ensure that foveated streaming providers use eye input data responsibly.

I'd just like to add that this gaze data could be insanely useful for dynamic foveated rendering to save compute on the streamer side as well as an additional input method for social vr or general control.

Accepted Answer

Hello, @WhisperTheWolf --

Good news! We have added functionality very similar to what you propose in visionOS 27.0. It's called FoveatedStreamingProvider.

FoveatedStreamingProvider is a way to extend visionOS with a streaming protocol that is different from the built-in default protocol (NVIDIA CloudXR).

Here's how it works:

  1. Streaming protocol developers ship an app on the App Store. This app includes an appex (ExtensionKit extension) that extends visionOS with the new foveated streaming protocol. These app extensions implement FoveatedStreamingProvider and, after review from Apple, are granted a special entitlement which gives the extension access to approximate eye input data. This eye input data may only be used to implement the foveated streaming protocol.
  2. We've added a new API to FoveatedStreamingSession, queryStreamingProviders, which allows streaming clients to query the list of available protocols on the system. FoveatedStreamingSessions can select which provider to use via connect(endpoint:streamingProvider:)
  3. End-users install both the streaming protocol (MyProtocol.app, which vends MyProtocol.appex) as well as any games that leverage that protocol (MyGame.app, MyCADApplication.app, MySimulator.app). Those apps can choose to leverage MyProtocol.appex, when installed.

If you are interested in extending visionOS with a foveated streaming protocol, please reach out via our foveated streaming provider entitlement request form.

So to summarize, the FoveatedStreaming framework has two entitlements:

  • Apps that use FoveatedStreamingSession need the "Foveated Streaming Session" entitlement com.apple.developer.foveated-streaming-session. This entitlement is available to any developers in the apple developer program with no review beyond App Store review.
  • App extensions that extend visionOS need the "Foveated Streaming Provider" entitlement com.apple.developer.foveated-streaming-provider.
    • Only the streaming provider (MyProtocol.appex) needs this protected entitlement, because streaming providers are granted access to sensitive eye input data. Streaming client apps (e.g. MyGame.app) do not need this special -provider entitlement, they only need -session.

I also wanted to note how this architecture helps preserve user privacy:

  • On visionOS, eye input data is restricted only to the app extension. App extensions are a separate process, and we have implemented technical restrictions to help ensure the eye input data does not leave the extension process.
  • FoveatedStreamingProvider extension processes are only created when an end user begins a Streaming Session (ultimately via the FoveatedStreamingSession.connect API). End users must give explicit permission every time they start this, and data is only sent for the duration of the session. Users may end the session (and therefore terminate the streaming provider extension) at any time, from Control Center.
  • The eye input data given to FoveatedStreamingProvider extensions is limited to the resolution required for high quality foveated streaming. Full resolution eye input data is not exposed.
  • We review every application via the entitlement request form to help ensure that foveated streaming providers use eye input data responsibly.
Opening gaze data to streamer developers?
 
 
Q