country_code

Run the Solution#

Now that we have the necessary applications built, we can explore how to stream the USD Viewer application into the web client.

Hardware-accelerated GPU Scheduling#

On Windows computers there is a setting that controls how GPU resources are provided to applications. Follow the instructions to turn off Hardware accelerated GPU scheduling in Stream on a Workstation to ensure USD Viewer can utilize the GPU even when it is not in focus.

Run Headless#

Kit applications can run headless. There is no difference in its capabilities in headless mode and the startup procedure of the streaming solution remains the same.

Windows#

Run the application bat file with the -no-window argument. You can find the bat file in the project’s _build\[platform]\release directory.

my_company.my_usd_viewer.kit.bat -no-window

Linux#

Run the application sh file with the -no-window argument. You can find the sh file in the project’s _build\[platform]\release directory.

./my_company.my_usd_viewer.kit.sh -no-window

Reset User Settings#

As you iterate on USD Viewer, you may change settings in the various “Settings” sections. Some settings persist in a user settings file and may override your new settings. To clear the user settings, you can run the application with a –reset-user argument.

Windows#

You can find the bat file in the project’s _build\[platform]\release directory.

my_company.my_usd_viewer.kit.bat -reset-user

Linux#

You can find the sh file in the project’s _build\[platform]\release directory.

my_company.my_usd_viewer.kit.sh -reset-user

Peer-to-Peer Streaming#

For peer-to-peer streaming of the samples in this example, you can use either a single workstation or stream from one workstation to another.

Single Workstation#

The samples in this example are configured to run on a single workstation. To run the solution:

  1. Start USD Viewer by using the repo launch command in the project root. Select the kit file with the streaming suffix.

  2. Wait for the USD Viewer viewport to display in black.

  3. Start the web client by using the npm run dev command in the project root.

  4. Copy the URL that displays in the command prompt window and paste it in your Chrome or Edge browser.

Note

This example provides a peer-to-peer streaming solution. One USD Viewer can be streamed to one client. If you open many browser tabs, then only one can use the streamed application at any given time.

One Workstation to Another#

To stream the Kit application from one computer to another computer running the client, we need to make sure the two applications can access each other. This requires opening some ports and a configuration change of the client.

Configure Computers Running Kit and Client Applications#

Applications need the ability to send and receive data over TCP and UDP.

Below are example commands for opening ports in the firewall. This needs to be done on the computer running the Kit application and the computer running the front end client.

Open Ports on Ubuntu 22.04#

Open a terminal to run these commands.

# Open ports for app streaming
sudo ufw allow 49100/tcp comment ‘outgoing and incoming TCP traffic’
sudo ufw allow 1024:65535/udp comment ‘outgoing and incoming UDP traffic’
# (Optional) Inspect all rules
sudo ufw status
# Reload the rules
sudo ufw reload

Open Ports on Windows 10 & 11#

Run a PowerShell as Administrator and execute these commands:

# Open ports for app streaming
if (-not (Get-NetFirewallRule -DisplayName "Incoming App Streaming TCP Traffic")) {
    New-NetFirewallRule -DisplayName "Incoming App Streaming TCP Traffic" -Direction Inbound -LocalPort 49100 -Protocol TCP -Action Allow
    Write-Host "Created rule: Incoming App Streaming TCP Traffic"
} else {
    Write-Host "Firewall rule 'Incoming App Streaming TCP Traffic' already exists."
}

if (-not (Get-NetFirewallRule -DisplayName "Outgoing App Streaming Message Traffic")) {
    New-NetFirewallRule -DisplayName "Outgoing App Streaming Message Traffic" -Direction Outbound -LocalPort 49100 -Protocol TCP -Action Allow
    Write-Host "Created rule: Outgoing App Streaming Message Traffic"
} else {
    Write-Host "Firewall rule 'Outgoing App Streaming Message Traffic' already exists."
}

if (-not (Get-NetFirewallRule -DisplayName "Incoming App Streaming UDP Traffic")) {
    New-NetFirewallRule -DisplayName "Incoming App Streaming UDP Traffic" -Direction Inbound -LocalPort 1024-65535 -Protocol UDP -Action Allow
    Write-Host "Created rule: Incoming App Streaming UDP Traffic"
} else {
    Write-Host "Firewall rule 'Incoming App Streaming UDP Traffic' already exists."
}

if (-not (Get-NetFirewallRule -DisplayName "Outgoing App Streaming UDP Traffic")) {
    New-NetFirewallRule -DisplayName "Outgoing App Streaming UDP Traffic" -Direction Outbound -LocalPort 1024-65535 -Protocol UDP -Action Allow
    Write-Host "Created rule: Outgoing App Streaming UDP Traffic"
} else {
    Write-Host "Firewall rule 'Outgoing App Streaming UDP Traffic' already exists."
}
# (Optional) Inspect all rules
Get-NetFirewallRule

Route Client#

The client has a stream.config.json that specifies the server to connect to. The server address should be the IP address of the computer running the Kit application. By default the address is 127.0.0.1 for connecting to a Kit application running on the same computer as the client.

Retrieve the IP address on Windows:

  1. Open a PowerShell.

  2. Execute ipconfig /all

  3. Inspect the list of IP addresses and select the one accessible by the computer that will run the client.

Retrieve the IP address on Linux:

  1. Open a Terminal.

  2. Execute hostname -I

  3. Inspect the list of IP addresses and select the one accessible by the computer that will run the client.

Enter the retrieved IP into the server attribute of the stream.config.json file. The next time the client runs it will attempt to connect to the “remote” computer and start the stream.

In the example stream.config.json below, the default 127.0.0.1 IP address has been replaced with 192.168.50.88, which is the IP address of the computer running the Kit application:

This snippet is written in JSON#
{
"$comment": "source can be either 'gfn' or 'local'",
"source": "local",
"gfn": {
   "$comment": "Required props if source is set to 'gfn'.",
   "catalogClientId": "",
   "clientId": "",
   "cmsId":
},
"local": {
   "$comment": "Required props if source is set to 'local'.",
   "server": "192.168.50.88"
}
}

The startup procedure and functionality is the same as is described in Single Workstation.

If opening the ports and configuring the client server address still does not work, then the problem is most likely due to a network access problem. Please contact your IT administrator to resolve this issue.

Customize Ports Used by Kit Application#

Some situations requires using ports other than the default Kit ports.

There are settings for what ports are used by Kit that can be customized via settings in the .kit file or via the command line arguments launching the application.

Below are the .kit file settings that can be used to customize the ports:

[settings]
app.livestream.port = 49100 # defaults to 49100, this is the 'signaling' port
app.livestream.fixedHostPort = 1024 # defaults to 1024
app.livestream.minHostPort = 1024 # defaults to 1024, only used if fixedHostPort==0
app.livestream.maxHostPort = 65535 # defaults to 65535, only used if fixedHostPort==0

Here are the command line arguments that can be added when running a .bat/.sh file:

my_kit_app.bat --/app/livestream/port=XXXXX
my_kit_app.bat --/app/livestream/fixedHostPort=XXXXX
my_kit_app.bat --/app/livestream/minHostPort=XXXXX
my_kit_app.bat --/app/livestream/maxHostPort=XXXXX
./my_kit_app.sh --/app/livestream/port=XXXXX --/app/livestream/fixedHostPort=XXXXX