Rename server -> streamer on visible instances (#1545)

This commit is contained in:
Riccardo Zaglia 2023-03-31 16:36:32 +02:00 committed by GitHub
parent 20c8b13135
commit 1e6c275c0b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 108 additions and 112 deletions

View File

@ -61,7 +61,7 @@ jobs:
prerelease: false
commitish: ${{ steps.output_ref.outputs.release_ref }}
build_windows_server:
build_windows_streamer:
runs-on: windows-2019
needs: [prepare_release]
env:
@ -87,7 +87,7 @@ jobs:
RUST_BACKTRACE: 1
run: |
cargo xtask prepare-deps --platform windows --ci
cargo xtask package-server --gpl
cargo xtask package-streamer --gpl
$file = Get-ChildItem -Name .\build\*.exe | Select-Object -f 1
echo "::set-output name=exe_filename::$file"
@ -106,20 +106,20 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: ./build/alvr_server_windows.msi
asset_name: alvr_server_windows.msi
asset_path: ./build/alvr_streamer_windows.msi
asset_name: alvr_streamer_windows.msi
asset_content_type: application/octet-stream
- name: Upload portable server for Windows
- name: Upload portable streamer for Windows
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: ./build/alvr_server_windows.zip
asset_name: alvr_server_windows.zip
asset_path: ./build/alvr_streamer_windows.zip
asset_name: alvr_streamer_windows.zip
asset_content_type: application/zip
build_linux_server:
build_linux_streamer:
runs-on: ubuntu-latest
needs: [prepare_release]
steps:
@ -145,15 +145,15 @@ jobs:
env:
RUST_BACKTRACE: 1
run: |
cargo xtask package-server
- name: Upload server for Linux
cargo xtask package-streamer
- name: Upload streamer for Linux
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.prepare_release.outputs.upload_url }}
asset_path: ./build/alvr_server_linux.tar.gz
asset_name: alvr_server_linux.tar.gz
asset_path: ./build/alvr_streamer_linux.tar.gz
asset_name: alvr_streamer_linux.tar.gz
asset_content_type: application/gzip
- name: Build and package ALVR portable (.AppImage)
@ -161,8 +161,8 @@ jobs:
env:
RUST_BACKTRACE: 1
run: |
cargo xtask package-server --appimage --zsync
- name: Upload portable server for Linux
cargo xtask package-streamer --appimage --zsync
- name: Upload portable streamer for Linux
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@ -171,7 +171,7 @@ jobs:
asset_path: ./build/ALVR-x86_64.AppImage
asset_name: ALVR-x86_64.AppImage
asset_content_type: application/x-executable
- name: Upload portable server for Linux (zsync)
- name: Upload portable streamer for Linux (zsync)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@ -3,7 +3,7 @@
## Unreleased
* New egui dashboard (by @Kirottu #1247 #1274, @m00nwtchr #1292, @zarik5 ___)
* Send client log to server (by @zarik5)
* Send client log to streamer (by @zarik5)
* New more consistent controller prediction algorithm (by @zarik5)
* New wiki hosted in the main git tree (by @m00nwtchr #1309)
* Remove Forward Error Correction (by @zarik5: #1384, #1389; @deiteris: #1386, #1387, #1390)

View File

@ -38,20 +38,20 @@ use crate::audio;
use alvr_audio as audio;
const INITIAL_MESSAGE: &str = concat!(
"Searching for server...\n",
"Searching for streamer...\n",
"Open ALVR on your PC then click \"Trust\"\n",
"next to the client entry",
);
const NETWORK_UNREACHABLE_MESSAGE: &str = "Cannot connect to the internet";
// const INCOMPATIBLE_VERSIONS_MESSAGE: &str = concat!(
// "Server and client have\n",
// "Streamer and client have\n",
// "incompatible types.\n",
// "Please update either the app\n",
// "on the PC or on the headset",
// );
const STREAM_STARTING_MESSAGE: &str = "The stream will begin soon\nPlease wait...";
const SERVER_RESTART_MESSAGE: &str = "The server is restarting\nPlease wait...";
const SERVER_DISCONNECTED_MESSAGE: &str = "The server has disconnected.";
const SERVER_RESTART_MESSAGE: &str = "The streamer is restarting\nPlease wait...";
const SERVER_DISCONNECTED_MESSAGE: &str = "The streamer has disconnected.";
const DISCOVERY_RETRY_PAUSE: Duration = Duration::from_millis(500);
const RETRY_CONNECT_MIN_INTERVAL: Duration = Duration::from_secs(1);

View File

@ -2,7 +2,7 @@ use alvr_common::ALVR_VERSION;
use eframe::egui::{RichText, Ui};
pub fn about_tab_ui(ui: &mut Ui) {
ui.label(RichText::new(format!("ALVR server {}", *ALVR_VERSION)).size(30.0));
ui.label(RichText::new(format!("ALVR streamer v{}", *ALVR_VERSION)).size(30.0));
ui.label(
r#"Stream VR games from your PC to your headset via Wi-Fi.
ALVR uses technologies like Asynchronous TimeWarp (ATW) and Fixed Foveated Rendering (FFR) for a smoother experience.

View File

@ -49,7 +49,7 @@ impl ConnectionsTab {
ui.add_space(10.0);
ui.heading(
RichText::new(
"The server is not connected! Clients will not be discovered",
"The streamer is not connected! Clients will not be discovered",
)
.color(Color32::BLACK),
);

View File

@ -169,7 +169,7 @@ impl StatisticsTab {
ui.colored_label(
graph_colors::RENDER,
&format!(
"Server compositor: {:.2}ms",
"Streamer compositor: {:.2}ms",
stats.server_compositor_s * 1000.0
),
);
@ -183,7 +183,7 @@ impl StatisticsTab {
ui.horizontal(|ui| {
legend_label(ui, "Game render", graph_colors::RENDER_VARIANT);
legend_label(ui, "Server compositor", graph_colors::RENDER);
legend_label(ui, "Streamer compositor", graph_colors::RENDER);
legend_label(ui, "Encode", graph_colors::TRANSCODE);
legend_label(ui, "Network", graph_colors::NETWORK);
legend_label(ui, "Decode", graph_colors::TRANSCODE);
@ -287,7 +287,7 @@ impl StatisticsTab {
popup::show_tooltip(ui.ctx(), Id::new("client_server_fps_popup"), |ui| {
ui.colored_label(
graph_colors::SERVER_FPS,
format!("Server FPS: {:.2}", stats.server_fps),
format!("Streamer FPS: {:.2}", stats.server_fps),
);
ui.colored_label(
graph_colors::CLIENT_FPS,
@ -297,7 +297,7 @@ impl StatisticsTab {
}
}
ui.horizontal(|ui| {
legend_label(ui, "Server FPS", graph_colors::SERVER_FPS);
legend_label(ui, "Streamer FPS", graph_colors::SERVER_FPS);
legend_label(ui, "Client FPS", graph_colors::CLIENT_FPS);
});
}
@ -338,7 +338,7 @@ impl StatisticsTab {
ui[0].label("Client FPS:");
ui[1].label(&format!("{} FPS", statistics.client_fps));
ui[0].label("Server FPS:");
ui[0].label("Streamer FPS:");
ui[1].label(&format!("{} FPS", statistics.server_fps));
ui[0].label("Headset battery");

View File

@ -138,7 +138,7 @@ pub fn data_interop_thread(
match ws.read_message() {
Ok(tungstenite::Message::Text(json_string)) => {
if let Ok(event) = serde_json::from_str(&json_string) {
debug!("server event received: {event:?}");
debug!("Server event received: {event:?}");
report_event(&context, &sender, ServerEvent::Event(event))?;
}
}

View File

@ -48,11 +48,7 @@ pub fn firewall_rules(add: bool) -> Result<(), i32> {
),
)
} else {
format!(
"{}\n{}",
netsh_delete_rule_command_string("ALVR Launcher"),
netsh_delete_rule_command_string("SteamVR ALVR vrserver")
)
netsh_delete_rule_command_string("SteamVR ALVR vrserver")
};
fs::write(&script_path, firewall_rules_script_content).map_err(|_| -1)?;

View File

@ -51,7 +51,7 @@ fn main() {
let data_thread = Arc::new(Mutex::new(None));
eframe::run_native(
&format!("ALVR Dashboard (server v{})", *ALVR_VERSION),
&format!("ALVR Dashboard (streamer v{})", *ALVR_VERSION),
NativeOptions {
icon_data: Some(IconData {
rgba: image.rgba_data().to_owned(),

View File

@ -53,8 +53,8 @@ pub fn build_dir() -> PathBuf {
workspace_dir().join("build")
}
pub fn server_build_dir() -> PathBuf {
build_dir().join(format!("alvr_server_{OS}"))
pub fn streamer_build_dir() -> PathBuf {
build_dir().join(format!("alvr_streamer_{OS}"))
}
pub fn installer_path() -> PathBuf {

View File

@ -673,10 +673,10 @@ TCP: Slower than UDP, but more stable. Pick this if you experience video or audi
))]
pub stream_protocol: SocketProtocol,
#[schema(strings(display_name = "Server send buffer size"))]
#[schema(strings(display_name = "Streamer send buffer size"))]
pub server_send_buffer_bytes: SocketBufferSize,
#[schema(strings(display_name = "Server receive buffer size"))]
#[schema(strings(display_name = "Streamer receive buffer size"))]
pub server_recv_buffer_bytes: SocketBufferSize,
#[schema(strings(display_name = "Client send buffer size"))]

View File

@ -26,7 +26,7 @@ impl Display for Profile {
}
}
pub fn build_server(
pub fn build_streamer(
profile: Profile,
gpl: bool,
root: Option<String>,
@ -35,7 +35,7 @@ pub fn build_server(
) {
let sh = Shell::new().unwrap();
let build_layout = Layout::new(&afs::server_build_dir());
let build_layout = Layout::new(&afs::streamer_build_dir());
let mut common_flags = vec![];
match profile {
@ -59,8 +59,8 @@ pub fn build_server(
None
};
sh.remove_path(&afs::server_build_dir()).unwrap();
sh.create_dir(&afs::server_build_dir()).unwrap();
sh.remove_path(&afs::streamer_build_dir()).unwrap();
sh.create_dir(&afs::streamer_build_dir()).unwrap();
sh.create_dir(&build_layout.openvr_driver_lib_dir())
.unwrap();
sh.create_dir(&build_layout.executables_dir).unwrap();

View File

@ -19,15 +19,15 @@ USAGE:
cargo xtask <SUBCOMMAND> [FLAG] [ARGS]
SUBCOMMANDS:
prepare-deps Download and compile server and client external dependencies
build-server Build server driver, then copy binaries to build folder
prepare-deps Download and compile streamer and client external dependencies
build-streamer Build streamer, then copy binaries to build folder
build-client Build client, then copy binaries to build folder
build-client-lib Build a C-ABI ALVR client library and header.
run-server Build server and then open the dashboard
package-server Build server in release mode, make portable version and installer
run-streamer Build streamer and then open the dashboard
package-streamer Build streamer in release mode, make portable version and installer
package-client-lib Build client library then zip it
clean Removes all build artifacts and dependencies.
bump Bump server and client package versions
bump Bump streamer and client package versions
clippy Show warnings for selected clippy lints
kill-oculus Kill all Oculus processes
@ -37,10 +37,10 @@ FLAGS:
--no-nvidia Disables nVidia support on Linux. For prepare-deps subcommand
--release Optimized build with less debug checks. For build subcommands
--gpl Bundle GPL libraries (FFmpeg). Only for Windows
--appimage Package as AppImage. For package-server subcommand
--zsync For --appimage, create .zsync update file and build AppImage with embedded update information. For package-server subcommand
--appimage Package as AppImage. For package-streamer subcommand
--zsync For --appimage, create .zsync update file and build AppImage with embedded update information. For package-streamer subcommand
--nightly Append nightly tag to versions. For bump subcommand
--no-rebuild Do not rebuild the server with run-server
--no-rebuild Do not rebuild the streamer with run-streamer
--ci Do some CI related tweaks. Depends on the other flags and subcommand
ARGS:
@ -50,10 +50,10 @@ ARGS:
relative paths, which requires conforming to FHS on Linux.
"#;
pub fn run_server() {
pub fn run_streamer() {
let sh = Shell::new().unwrap();
let dashboard_exe = Layout::new(&afs::server_build_dir()).dashboard_exe();
let dashboard_exe = Layout::new(&afs::streamer_build_dir()).dashboard_exe();
cmd!(sh, "{dashboard_exe}").run().unwrap();
}
@ -176,16 +176,16 @@ fn main() {
dependencies::build_android_deps(for_ci);
}
}
"build-server" => build::build_server(profile, gpl, None, false, keep_config),
"build-streamer" => build::build_streamer(profile, gpl, None, false, keep_config),
"build-client" => build::build_android_client(profile),
"build-client-lib" => build::build_client_lib(profile),
"run-server" => {
"run-streamer" => {
if !no_rebuild {
build::build_server(profile, gpl, None, false, keep_config);
build::build_streamer(profile, gpl, None, false, keep_config);
}
run_server();
run_streamer();
}
"package-server" => packaging::package_server(gpl, root, appimage, zsync),
"package-streamer" => packaging::package_streamer(gpl, root, appimage, zsync),
"package-client" => build::build_android_client(Profile::Distribution),
"package-client-lib" => packaging::package_client_lib(),
"clean" => clean(),

View File

@ -23,22 +23,22 @@ fn build_windows_installer() {
version = version[..idx].to_owned();
}
let server_build_dir = afs::server_build_dir();
let streamer_build_dir = afs::streamer_build_dir();
let wix_source_dir = afs::crate_dir("xtask").join("wix");
let wix_target_dir = afs::target_dir().join("wix");
let main_source = wix_source_dir.join("main.wxs");
let main_object = wix_target_dir.join("main.wixobj");
let harvested_source = wix_target_dir.join("harvested.wxs");
let harvested_object = wix_target_dir.join("harvested.wixobj");
let alvr_msi = afs::build_dir().join("alvr_server_windows.msi");
let alvr_msi = afs::build_dir().join("alvr_streamer_windows.msi");
let bundle_source = wix_source_dir.join("bundle.wxs");
let bundle_object = wix_target_dir.join("bundle.wixobj");
let installer = afs::build_dir().join(format!("ALVR_Installer_v{version}.exe"));
cmd!(sh, "{heat_cmd} dir {server_build_dir} -ag -sreg -srd -dr APPLICATIONFOLDER -cg BuildFiles -var var.BuildRoot -o {harvested_source}").run().unwrap();
cmd!(sh, "{candle_cmd} -arch x64 -dBuildRoot={server_build_dir} -ext WixUtilExtension -dVersion={version} {main_source} {harvested_source} -o {wix_target_dir}\\").run().unwrap();
cmd!(sh, "{heat_cmd} dir {streamer_build_dir} -ag -sreg -srd -dr APPLICATIONFOLDER -cg BuildFiles -var var.BuildRoot -o {harvested_source}").run().unwrap();
cmd!(sh, "{candle_cmd} -arch x64 -dBuildRoot={streamer_build_dir} -ext WixUtilExtension -dVersion={version} {main_source} {harvested_source} -o {wix_target_dir}\\").run().unwrap();
cmd!(sh, "{light_cmd} {main_object} {harvested_object} -ext WixUIExtension -ext WixUtilExtension -o {alvr_msi}").run().unwrap();
cmd!(sh, "{candle_cmd} -arch x64 -dBuildRoot={server_build_dir} -ext WixUtilExtension -ext WixBalExtension {bundle_source} -o {wix_target_dir}\\").run().unwrap();
cmd!(sh, "{candle_cmd} -arch x64 -dBuildRoot={streamer_build_dir} -ext WixUtilExtension -ext WixBalExtension {bundle_source} -o {wix_target_dir}\\").run().unwrap();
cmd!(
sh,
"{light_cmd} {bundle_object} -ext WixUtilExtension -ext WixBalExtension -o {installer}"
@ -47,13 +47,13 @@ fn build_windows_installer() {
.unwrap();
}
pub fn package_server(gpl: bool, root: Option<String>, appimage: bool, zsync: bool) {
pub fn package_streamer(gpl: bool, root: Option<String>, appimage: bool, zsync: bool) {
let sh = Shell::new().unwrap();
build::build_server(Profile::Distribution, gpl, root, true, false);
build::build_streamer(Profile::Distribution, gpl, root, true, false);
// Add licenses
let licenses_dir = afs::server_build_dir().join("licenses");
let licenses_dir = afs::streamer_build_dir().join("licenses");
sh.create_dir(&licenses_dir).unwrap();
sh.copy_file(
afs::workspace_dir().join("LICENSE"),
@ -84,24 +84,24 @@ pub fn package_server(gpl: bool, root: Option<String>, appimage: bool, zsync: bo
// Finally package everything
if cfg!(windows) {
command::zip(&sh, &afs::server_build_dir()).unwrap();
command::zip(&sh, &afs::streamer_build_dir()).unwrap();
// the wix file broke
// build_windows_installer();
} else {
command::targz(&sh, &afs::server_build_dir()).unwrap();
command::targz(&sh, &afs::streamer_build_dir()).unwrap();
if appimage {
package_server_appimage(true, zsync);
package_streamer_appimage(true, zsync);
}
}
}
fn package_server_appimage(release: bool, update: bool) {
fn package_streamer_appimage(release: bool, update: bool) {
let sh = Shell::new().unwrap();
let appdir = &afs::build_dir().join("ALVR.AppDir");
let bin = &afs::build_dir().join("alvr_server_linux");
let bin = &afs::build_dir().join("alvr_streamer_linux");
let icon = &afs::workspace_dir().join("resources/alvr.png");
let desktop = &afs::workspace_dir().join("packaging/freedesktop/alvr.desktop");

View File

@ -21,7 +21,7 @@
<Chain>
<MsiPackage
SourceFile="build\alvr_server_windows.msi"
SourceFile="build\alvr_streamer_windows.msi"
Id="alvrInstaller"
Compressed="yes"
DisplayInternalUI="yes"

View File

@ -1,4 +1,4 @@
# ALVR client and server on separate networks
# ALVR client and streamer on separate networks
# ALVR v14 and Above
@ -15,7 +15,7 @@ Port-forwarding allows to connect devices that are behind different NATs, i.e. l
You can now use ALVR to connect to your remote PC.
**Note**: The public IP can change often. Every time you want to use ALVR you need to check that your current public IP is the same as the last time. If the IP changed, you can update it using the "Configure client" interface, accessed with the `Configure` button next to your headset name on the server.
**Note**: The public IP can change often. Every time you want to use ALVR you need to check that your current public IP is the same as the last time. If the IP changed, you can update it using the "Configure client" interface, accessed with the `Configure` button next to your headset name on the streamer.
## ZeroTier
@ -25,7 +25,7 @@ Comparing this to the port-forwarding method:
Pros:
* Does not require access to the router interface.
* You don't need to update the public IP often on the server.
* You don't need to update the public IP often on the streamer.
* The connection in encrypted.
Cons:
@ -105,17 +105,17 @@ ALVR version Experimental v7 or newer is recommended for this configuration.
This configuration is **NOT** supported in ALVR v12. The latest release to still support this is v11.
To run ALVR client and ALVR server on separate networks (broadcast domains) the following things must be done:
1. UDP ports 9943 and 9944 of ALVR server must be accessible from Oculus Quest device (i.e. firewall openings must be made to allow Oculus Quest to connect to ALVR server UDP ports 9943 and 9944).
1. Oculus Quest must be connected to computer and command-line `adb shell am startservice -n "com.polygraphene.alvr/.ChangeSettings" --es "targetServers" "10.10.10.10"` must be run in Command Prompt to specify IP address of ALVR server (`10.10.10.10` must be substituted with IP address of ALVR server; the long line is a single command-line).
1. Next time when ALVR client will be started it should try to connect to the specified ALVR server. ALVR server should display the client in _Server_ tab (the same way local-network clients are displayed).
To run ALVR client and ALVR streamer on separate networks (broadcast domains) the following things must be done:
1. UDP ports 9943 and 9944 of ALVR streamer must be accessible from Oculus Quest device (i.e. firewall openings must be made to allow Oculus Quest to connect to ALVR streamer UDP ports 9943 and 9944).
1. Oculus Quest must be connected to computer and command-line `adb shell am startservice -n "com.polygraphene.alvr/.ChangeSettings" --es "targetServers" "10.10.10.10"` must be run in Command Prompt to specify IP address of ALVR streamer (`10.10.10.10` must be substituted with IP address of ALVR streamer; the long line is a single command-line).
1. Next time when ALVR client will be started it should try to connect to the specified ALVR streamer. ALVR streamer should display the client in _Server_ tab (the same way local-network clients are displayed).
ALVR does **NOT** provide any kind of tunnel, NAT traversal etc. UDP ports 9943 and 9944 of ALVR server (VR gaming PC) must be accessible from ALVR client (Oculus Quest) otherwise this won't work.
ALVR does **NOT** provide any kind of tunnel, NAT traversal etc. UDP ports 9943 and 9944 of ALVR streamer (VR gaming PC) must be accessible from ALVR client (Oculus Quest) otherwise this won't work.
**Important notes on security!**
* ALVR protocol does not have any encryption or authentication (apart from ALVR client IP address shown in ALVR server and the requirement to click _Connect_ on ALVR server).
* It is recommended to run ALVR via encrypted tunnel (VPN) over the internet. In case VPN is not an option, access to ALVR server (UDP ports 9943 and 9944) should be restricted by Windows Firewall (only connections from known IP addresses of ALVR clients should be allowed) and ALVR server should not be left running unattended.
* ALVR protocol does not have any encryption or authentication (apart from ALVR client IP address shown in ALVR streamer and the requirement to click _Connect_ on ALVR streamer).
* It is recommended to run ALVR via encrypted tunnel (VPN) over the internet. In case VPN is not an option, access to ALVR streamer (UDP ports 9943 and 9944) should be restricted by Windows Firewall (only connections from known IP addresses of ALVR clients should be allowed) and ALVR streamer should not be left running unattended.
* **Warning!** SteamVR allows to control desktop from VR headset (i.e. a **malicious ALVR client could take over the PC**).
* As the license states ALVR IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND (see the file `LICENSE` in this GitHub repository for legal text/definition). You are on your own (especially if you run ALVR over the Internet without VPN).

View File

@ -10,7 +10,7 @@ On Windows you need also [Chocolatey](https://chocolatey.org/install).
# Linux Users
Before building the server, those on Linux would have to build and install [`FFmpeg/nv-codec-headers`](https://github.com/FFmpeg/nv-codec-headers). The nv-codec-headers for nvidia users requires at least driver version `520.56.06` to work properly, taken from nv-codec-header's README.
Before building the streamer, those on Linux would have to build and install [`FFmpeg/nv-codec-headers`](https://github.com/FFmpeg/nv-codec-headers). The nv-codec-headers for nvidia users requires at least driver version `520.56.06` to work properly, taken from nv-codec-header's README.
Run the following commands as shown:
@ -20,7 +20,7 @@ cd nv-codec-headers/
sudo make install
```
# Server Building
# Streamer Building
First you need to gather some additional resources in preparation for the build.
@ -49,20 +49,20 @@ cargo xtask prepare-deps --platform [your platform] [--gpl] [--no-nvidia]
```
* Replace `[your platform]` with your computer OS, either `windows` or `linux`
* **Windows only:** Use the `--gpl` flag if you want to download, build and bundle FFmpeg inside the ALVR server. Keep in mind that this is only needed for software encoding. As the name suggests, if you use this flag you can only redistribute the final package as GPLv2.0 licensed; because of the x264 encoder.
* **Windows only:** Use the `--gpl` flag if you want to download, build and bundle FFmpeg inside the ALVR streamer. Keep in mind that this is only needed for software encoding. As the name suggests, if you use this flag you can only redistribute the final package as GPLv2.0 licensed; because of the x264 encoder.
* **Linux only:** Use the `--no-nvidia` flag if you have a AMD gpu.
Next up is the proper build of the server. Run the following:
Next up is the proper build of the streamer. Run the following:
```bash
cargo xtask build-server --release [--gpl]
cargo xtask build-streamer --release [--gpl]
```
**Windows only:** Again, the `--gpl` flag is needed only if you want to bundle FFmpeg.
You can find the resulting package in `build/alvr_server_[your platform]`
You can find the resulting package in `build/alvr_streamer_[your platform]`
If you want to edit and rebuild the code, you can skip the `prepare-deps` command and run only the `build-server` command.
If you want to edit and rebuild the code, you can skip the `prepare-deps` command and run only the `build-streamer` command.
# Client Building

View File

@ -41,7 +41,7 @@
- Different wireless devices support different frequencies, standards, speeds, and features; using these to your advantage is key to getting best performance
## Routing / Switching / Firewalling / General Info
- Ideally client and server should live on the same logical (layer 2) network and subnet; this allows for no routing overhead, and the correct function of client discovery via mDNS
- Ideally client and streamer should live on the same logical (layer 2) network and subnet; this allows for no routing overhead, and the correct function of client discovery via mDNS
- Twisted pair (normal copper ethernet cables) should never be run alongside power cables; this can cause signal noise and result in frame loss and lowered auto-negotiation speeds
- High quality CAT5E or higher (ideally CAT6A or CAT7) cabling should be used for modern networks
- In some cases firewall, anti-virus, malware, or EDR (enhanced detection and response) software may interfere with network traffic; Windows Defender and Sophos Endpoint Protection are reported to work without issue

View File

@ -29,14 +29,14 @@ For any problem visit the [troubleshooting page](https://github.com/alvr-org/ALV
There is also a portable version for the PC that requires more manual steps to make it work.
* Install SteamVR and launch it once.
* Download `alvr_server_windows.zip` from the latest release [download page](https://github.com/alvr-org/ALVR/releases/latest).
* Download `alvr_streamer_windows.zip` from the latest release [download page](https://github.com/alvr-org/ALVR/releases/latest).
* Unzip into a path that contains only ASCII characters and has edit permissions without administrator rights.
### Nightly
If you want to get new features early or you want to help with testing you can install a nightly version.
Download the latest nightly server [here](https://github.com/alvr-org/ALVR-nightly/releases/latest). Download the latest nightly client from Sidequest ([Quest version](https://sidequestvr.com/app/2281), [Go version](https://sidequestvr.com/app/2580)).
Download the latest nightly streamer [here](https://github.com/alvr-org/ALVR-nightly/releases/latest). Download the latest nightly client from Sidequest ([Quest version](https://sidequestvr.com/app/2281), [Go version](https://sidequestvr.com/app/2580)).
Since nightly releases can be unstable, for maximum compatibility always use matching versions for PC and headset. They are updated once a day.
@ -77,12 +77,12 @@ Unless you are using a nightly version, make sure all audio streaming options ar
### Other
* Install FFmpeg with VAAPI/NVENC + DRM + Vulkan + x264/x265 support. You can use this [ppa:savoury1/ffmpeg5](https://launchpad.net/~savoury1/+archive/ubuntu/ffmpeg5) under Ubuntu, or download `alvr_server_portable.tar.gz` which has ffmpeg bundled.
* Install FFmpeg with VAAPI/NVENC + DRM + Vulkan + x264/x265 support. You can use this [ppa:savoury1/ffmpeg5](https://launchpad.net/~savoury1/+archive/ubuntu/ffmpeg5) under Ubuntu, or download `alvr_streamer_portable.tar.gz` which has ffmpeg bundled.
* Install SteamVR, **launch it once** then close it.
* Download `alvr_server_linux(_portable).tar.gz` from the release [download page](https://github.com/alvr-org/ALVR/releases/latest).
* Download `alvr_streamer_linux(_portable).tar.gz` from the release [download page](https://github.com/alvr-org/ALVR/releases/latest).
* Run `bin/alvr_launcher`
If you do not install the correct version of FFmpeg systemwide, a common problem is the server crashing or failing to show images on the headset because SteamVR loads the wrong version of FFmpeg.
If you do not install the correct version of FFmpeg systemwide, a common problem is the streamer crashing or failing to show images on the headset because SteamVR loads the wrong version of FFmpeg.
### Audio Setup

View File

@ -13,7 +13,7 @@ The PR in the last log was proceeded by [#604](https://github.com/alvr-org/ALVR/
A [PR](https://github.com/alvr-org/ALVR/pull/569) has been made integrating Xytovl's vulkan layer into the main ALVR tree. It doesn't actually stream video yet but it provides a solid base for future work and is compatible with nVidia GPUs.
After you've checked the PR's branch out and [built the server](https://github.com/alvr-org/ALVR/wiki/Build-from-source#build-server), you can build and install the Vulkan layer like this:
After you've checked the PR's branch out and [built the streamer](https://github.com/alvr-org/ALVR/wiki/Build-from-source#build-streamer), you can build and install the Vulkan layer like this:
```
cd alvr/server/cpp/tools/vulkan-layer
mkdir build && cd build
@ -48,7 +48,7 @@ We use SteamVR direct rendering mode on a fake screen, and capture the output of
See [build from source](Build-from-source)
## Usage
Run `build/alvr_server_linux/ALVR Launcher`
Run `build/alvr_streamer_linux/ALVR Launcher`
On first setup, SteamVR will probably show the VR display on your screen, with the configuration window. If you have dual screen, you can move the configuration window to a visible area (with Alt + drag on most desktop environments).
@ -56,7 +56,7 @@ In the setup, deactivate audio streaming, switch connection to UDP, and deactiva
On the headset, launch the application, then click trust on the configuration window, which will quit.
The headset says that the server will restart, but it will not. You must relaunch it manually.
The headset says that the streamer will restart, but it will not. You must relaunch it manually.
If you are here, once it is all restarted, you should be able to get the stream on the headset.
## 2021-01-15

View File

@ -7,7 +7,7 @@ as well as give you some pointers to troubleshoot common configuration issues.
## Prerequisites
* You have installed the ALVR server on your PC, and the ALVR client on your HMD.
* You have installed the ALVR streamer on your PC, and the ALVR client on your HMD.
* You can reach the SteamVR void (or the SteamVR home) and are able to launch games.
## Step 1: choose resolution, refresh rate, codec
@ -26,8 +26,8 @@ A few notes on codec choices:
Enable foveated encoding. Go to the SteamVR void and look closely at the framerate graph under the latency graph in the statistics tab.
* If the server FPS matches the refresh rate you chose in step 1, you can reduce the foveation settings (by increasing the center width/height, or reducing the strength).
* If the server FPS is lower than the refresh rate you chose in step 1, increase the foveation settings (by decreasing the center width/height, or increasing the strength).
* If the streamer FPS matches the refresh rate you chose in step 1, you can reduce the foveation settings (by increasing the center width/height, or reducing the strength).
* If the streamer FPS is lower than the refresh rate you chose in step 1, increase the foveation settings (by decreasing the center width/height, or increasing the strength).
Repeat until you are at the maximum of what your encoder can do.

View File

@ -42,7 +42,7 @@ This section has some advice for when ALVR shows an error (or sometimes warning)
If you get a warning pop-up inside the `ALVR Launcher.exe` window saying `clientFoundInvalid`, make sure the version of ALVR you installed on your headset is compatible with the version you're trying to run on your PC.
The latest release can be found [here](https://github.com/alvr-org/ALVR/releases/latest) and contains both the `alvr_client.apk` file for your headset and the `alvr_server_windows.zip` archive with the application for your PC.
The latest release can be found [here](https://github.com/alvr-org/ALVR/releases/latest) and contains both the `alvr_client.apk` file for your headset and the `alvr_streamer_windows.zip` archive with the application for your PC.
The version of ALVR available on the SideQuest store is compatible with the latest release on GitHub (the previous link). Keep in mind that the version on SideQuest might take us a while to update after a new version is released on GitHub.
@ -71,7 +71,7 @@ ALVR can't see my headset
Here is some advice for issues that can come up even though you don't see any error popup from ALVR.
ALVR on the headset stuck on `Searching for server...`
ALVR on the headset stuck on `Searching for streamer...`
---
This issue can have multiple causes. It is likely that the issue is with the PC ALVR application. See below for more specific issues.
@ -91,7 +91,7 @@ To fix this, you can try the following:
* You can also try disabling your firewall for testing, but you shouldn't leave it disabled to use ALVR
* Open ports 9943 and 9944 on your firewall
If pinging works but you still don't see the client on the server app, then headset and PC might be on separate subnets. To solve this you can add the client manually.
If pinging works but you still don't see the client on the streamer app, then headset and PC might be on separate subnets. To solve this you can add the client manually.
In the Connection tab press `Add client manually`. Fill in the fields with a name for your headset (you can use the name you want), the hostname (you can read it in the welcome screen in your headset when you open the ALVR app), the IP of the headset and then press `Add client`.
SteamVR says "headset not detected"
@ -111,7 +111,7 @@ If you're still getting this message (or otherwise not getting a headset icon in
`Skipping duplicate external driver alvr_server` - This line means another ALVR driver is registered. Go to the installation tab in ALVR and remove all drivers.
`Skipping external driver X:\path\to\your\alvr_server_windows because it is not a directory` - This can happen if you put ALVR in a OneDrive (or a similar service) directory or the path to ALVR contains characters not in UTF-8. Try putting ALVR elsewhere, preferably so that the path to ALVR contains only ASCII characters.
`Skipping external driver X:\path\to\your\alvr_streamer_windows because it is not a directory` - This can happen if you put ALVR in a OneDrive (or a similar service) directory or the path to ALVR contains characters not in UTF-8. Try putting ALVR elsewhere, preferably so that the path to ALVR contains only ASCII characters.
If you have trouble looking through the logs, none of the tips work, or don't apply to you, feel free to ask on our [Discord](https://discord.gg/KbKk3UM) in the #help channel (you may be asked to post the log there).
@ -124,7 +124,7 @@ This is a situation where you have ALVR open on both headset and PC, you can see
First make sure that SteamVR (more specifically, vrserver.exe) is allowed incoming connections (UDP, port 9944) in your firewall. You can also try disabling your firewall for testing, but you keep it disabled to use ALVR.
You can try restarting ALVR on both the headset and the PC. On the headset, when connecting, you should see the view lagging behind when you turn your head (it drops below 1 fps), this means the headset is getting a response from the server when connecting and is waiting for the video stream to start. If you get no lag in the headset, response from the PC isn't reaching the headset.
You can try restarting ALVR on both the headset and the PC. On the headset, when connecting, you should see the view lagging behind when you turn your head (it drops below 1 fps), this means the headset is getting a response from the streamer when connecting and is waiting for the video stream to start. If you get no lag in the headset, response from the PC isn't reaching the headset.
## Common performance-related problems
@ -132,7 +132,7 @@ You can try restarting ALVR on both the headset and the PC. On the headset, when
![latency graph of overloaded encoder](images/latency-graphs/overloaded-encoder.png)
Symptoms: stuttery playback in the client, server FPS is stable but below the target refresh rate.
Symptoms: stuttery playback in the client, streamer FPS is stable but below the target refresh rate.
Solution: increase foveation settings or decrease refresh rate.
@ -152,11 +152,11 @@ Symptoms: stream freezes, image is glitchy.
Solution: check that HMD is using 5G frequency and that no other device is connected to the 5G band on your AP, reduce bitrate or use a cable.
### Overloaded server
### Overloaded streamer
![latency graph of overloaded server](images/latency-graphs/overloaded-server.png)
![latency graph of overloaded streamer](images/latency-graphs/overloaded-streamer.png)
Symptoms: stuttery playback in the client, server FPS dips or fluctuates below the target refresh rate.
Symptoms: stuttery playback in the client, streamer FPS dips or fluctuates below the target refresh rate.
Solution:

View File

@ -4,9 +4,9 @@
### ALVR Client (Headset):
* WiFi must be turned on and connected, otherwise ALVR will not search for the server.
* WiFi must be turned on and connected, otherwise ALVR will not search for the streamer.
### ALVR Server (PC):
### ALVR Streamer (PC):
* If your headset is detected, click "Trust." Click "Configure" and add the IP address `127.0.0.1`. Remove the other IP address.
* If your headset is not detected, click "Add client manually" and use the IP address `127.0.0.1`. Use the hostname displayed on your headset screen.

View File

@ -16,7 +16,7 @@
* [Information and Recommendations](https://github.com/alvr-org/ALVR/wiki/Information-and-Recommendations)
* [ALVR client and server on separate networks](https://github.com/alvr-org/ALVR/wiki/ALVR-client-and-server-on-separate-networks)
* [ALVR client and streamer on separate networks](https://github.com/alvr-org/ALVR/wiki/ALVR-client-and-streamer-on-separate-networks)
* [Fixed Foveated Rendering (FFR)](https://github.com/alvr-org/ALVR/wiki/Fixed-Foveated-Rendering-(FFR))

View File

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 114 KiB