What's New in RemoteViz?15 Apr 2020
The Open Inventor™ RemoteViz extension enables software developers to easily create zero-client web-based applications and services with advanced 3D visualization. Unlike remote desktop solutions that require installing a client application on the user's local machine, web-based applications using RemoteViz display inside the user's web browser. RemoteViz uses video streaming (AVC/H.264 or VP9) to minimize bandwidth and uses GPU accelerated H.264 video encoding to maximize performance. Learn more about how RemoteViz enables web-based applications here. Try some RemoteViz online demos here.
We are continually improving and extending our RemoteViz technology. Here are some of the great new features we have added in recent releases.
- Open Inventor "Headless" build
- Video encoding
- Thread-safe API
- Load balancing
- Binary message passing
Open Inventor "Headless" build
Introduced in Open Inventor 10.2, this package provides an implementation of Open Inventor specifically for "headless" server machines (no display attached). It uses the EGL library, allowing Open Inventor applications to be deployed without X Windows (X11) and to run without starting an X Server. This significantly simplifies configuration and deployment using, for example, a Docker-based environment.
Compared to the standard Open Inventor SDK installation, there are a few limitations:
- Classical viewer classes are not provided (they require X11).
- Use the RemoteViz viewer components instead (see RemoteViz examples).
- Standard example programs, except for RemoteViz, are not provided.
- If you need examples for Open Inventor, VolumeViz, etc. please also download the standard SDK package.
- The DialogViz extension is not provided (it requires X11).
A Debian package is provided to easily install the product on your platform.
In order to use this package in your project, the following macro must be defined: OIV_HEADLESS.
To help you get started with the headless build, a Docker example (based on NVIDIA's OpenGL Ubuntu 18.04 image) has been added. For more details, please read the ReadMe1st.md file available in your Open Inventor Headless installation folder.
The headless build is currently available for C++ and Java on Linux machines.
VP9 Video Encoding
Since Open Inventor 10.3, RemoteViz supports video streaming using the VP9 codec (in addition to H.264). VP9 is an open and royalty-free video coding format developed by Google. VP9 performance compares well with MPEG's HEVC/H.265 codec, and VP9 is widely used by web services like YouTube and Wikipedia. All major browsers support VP9, and decoding is hardware accelerated on almost all platforms. Unlike H.264, GPUs cannot accelerate VP9 video encoding. However, we use the very fast, multi-threaded libvpx to encode VP9 on the server's CPU.
This highlights one of the powerful features of RemoteViz. A web-based application using RemoteViz and choose (and switch) the encoding format at runtime. This feature enables the application to adapt and provide the best possible performance for every user. Using VP9 encoding is shown in the new demo HelloConeVP9 under examples/source/RemoteViz in the Open Inventor SDK.
The chart below compares image quality versus bitrate (bandwidth used) for VP9 and H.264. The higher, blue line is VP9. You can see that, for any given value of bitrate, the image quality is higher using VP9 encoding. This advantage is evident for lower bitrates, making VP9 an excellent solution when bandwidth is limited.
Since Open Inventor 10.3, the RemoteViz API is thread-safe, meaning that any method can be safely called from any thread without problem in case of concurrent access. The modifications have a negligible impact on performance. The only significant impact on performance comes from the addition of a mutexed access of objects EncodedFrame and FrameEncodingPolicy in the frame sending loop of a Connection (approximatively ~10µs per Frame). Please note that there is a small limitation on the class Service, as described in the documentation.
Web-based applications may be used to display sensitive datasets, and you might need to limit access to those datasets to a specific list of users. Since Open Inventor 10.4, RemoteViz allows web-based applications to integrate support for authentication. Authentication is the process of verifying the identity of a person or device. To be sure that your user is who he says he is, you will need an authentication process. This process will typically use a token to prove the user's identity. Various platforms, for example, Okta (https://www.okta.com/) and Auth0 (https://auth0.com/), provide authentication as a service and can now be used as Authentication Providers with your RemoteViz application.
In a token-based authentication process, the client application first sends a request containing the user credentials to the Authentication Provider. The Authentication Provider returns a corresponding token if the credentials are valid. The client then sends this token to the service with each request. The service can use the token to validate the authenticity of the request.
RemoteViz is compatible with the WebSocket Secure protocol (wss), allowing you to securely send an authentication token from the client to the service. This token can then be used by the service to authenticate the user.
Using authentication in a RemoteViz application is explained in more detail on this page
A Load Balancer is commonly used when a web application needs multiple instances and/or multiple servers to handle all the users. The purpose of the load balancer is to distribute the workload in a way that makes the best use of each server's capacity to prevent overload on any server and ensure the best user experience. This is particularly important for RemoteViz applications. 3D visualization of large data sets can use a lot of GPU memory and may require dedicating a GPU for each instance.
Since Open Inventor 10.4, a new RemoteViz example includes a simple, but highly customizable. multi-platform load balancer that can load balance RemoteViz services efficiently. The load balancer provided in the example program is a layer 7 load balancer written in Node.js (https://nodejs.org/en/) that intelligently routes the incoming connections based on the renderArea ID specified in the URL. This example can be easily customized to respond to different load balancing scenarios.
The Load Balancing example is explained in more detail on this page
Binary messages between client and service
Since Open Inventor 10.5, a RemoteViz Client and a RemoteViz Service (web-based application) are now able to exchange binary encoded messages. Binary encoding is much more efficient for large blocks of data and enables RemoteViz applications to take advantage of tools like Google Protocol Buffers or Apache Thrift. From an API point of view, this new feature has the following impacts:
- New versions of the methods SendMessage and OnReceivedMessage.
- Compatibility Break The onInitializedClient method from class ServiceListener has a new signature with parameter networkPerformance now declared const. If your application uses this method, you may have to update it to do the correct call and avoid compilation errors.