This fork of ALVR v20.6.0 introduces several enhancements to ALVR for monitoring and optimizing VR streaming performance.
In particular, our project integrates additional metrics to characterize the network state during streaming, providing insights into video frame (VF) delivery and network performance. Our metrics are logged in the session_log.txt
file when the Log to disk
setting is enabled and are also displayed in real time on the Statistics
tab of the ALVR dashboard:
Our project also implements the Network-aware Step-wise ABR algorithm (NeSt-VR), an Adaptive BitRate (ABR) algorithm designed to optimize streaming quality based on real-time network conditions.
This algorithm is implemented as a new bitrate mode in ALVR, named NeSt vr
:
For a comprehensive validation of several metrics and a detailed introduction and evaluation of the NeSt-VR algorithm, please refer to our paper: "Experimenting with Adaptive Bitrate Algorithms for Virtual Reality Streaming over Wi-Fi".
Note: Our client-side reported statistics —essential for obtaining the added metrics— are sent from the head-mounted diplay (HMD) to the server over TCP immediately after the client receives a VF. This feedback is received at the server significantly sooner than ALVR’s native statistics packet, which is delayed until the VF is ready for display
-
Client-side frame span (
frame_span_ms
inGraphNetworkStatistics
): time interval between the reception of the first packet to the reception of the last packet of a VF -
Frame inter-arrival time (
frame_interarrival_ms
inGraphNetworkStatistics
): time interval between the reception of the last packet of a VF and the last packet of the previous received VF -
Video Frame Round-Trip Time (VF-RTT) (
rtt_ms
inGraphNetworkStatistics
): time it takes for a complete VF to travel from the server to the client and for our supplementary UL packet —promptly sent upon the complete reception of the VF— to reach the server
-
Packets lost (
shards_lost
inGraphNetworkStatistics
): number of packets lost in the interval between two VF receptions -
Packets duplicated (
shards_duplicated
inGraphNetworkStatistics
): number of packets duplicated in the interval between two VF receptions -
Frames skipped (
frames_skipped
inGraphNetworkStatistics
): number of VFs lost prior to decoding, i.e., after network transmission due to packet losses or significant delays -
Frames dropped (
frames_dropped
inGraphStatistics
): number of decoded VFs lost before visualization
-
Instantaneous video network throughput (
instant_network_throughput_bps
inGraphNetworkStatistics
): rate at which video data is received by the client, measured in the interval between two VFs receptions -
Peak network throughput (
peak_network_throughput_bps
inGraphNetworkStatistics
): ratio between the VF’s size and its client-side frame span, used in NeSt-VR to estimate the network capacity
-
VF jitter (
frame_jitter_ms
inGraphNetworkStatistics
): variation in VF time deliveries, computed as the sample standard deviation of frame inter-arrival times -
Video packet jitter (
interarrival_jitter_ms
inGraphNetworkStatistics
): variability in video packet arrival times as defined in RFC 3550 -
Filtered one-way delay gradient and One-way delay gradient (
filtered_ow_delay_ms
andow_delay_ms
, respectively, inGraphNetworkStatistics
) : rate of change in one-way delay (OWD) between two consecutive VFs, smoothed using a Kalman filter as described in "Analysis and design of the google congestion control for web real-time communication (WebRTC)" and a state noise variance of$10^{−7}$
NeSt-VR applies a hierarchical decision-making process, operating every
Note: NFR is computed as
fps_rx / fps_tx
, wherefps_rx
denotes the average frame delivery rate andfps_tx
denotes the average frame transmission rate (network_heur_fps
andserver_fps
, respectively, inHeuristicStats
)
Note:
$\sigma$ is computed as$\varsigma/{\overline{\Delta_{\rm tx}}}$ .$\varsigma$ is a configurable parameter and$\overline{\Delta_{\rm tx}}$ denotes the average interval between consecutive VFs transmissions
Note:
$\gamma$ serves as a configurable exploration parameter to assess whether higher bitrates can be sustained and moderating the frequency of bitrate adjustments due to high VF-RTTs
Note:
HeuristicStats
event is logged at each NeSt-VR adjustment period, including the considered step size ($\beta$ :steps_bps
), the average interval between consecutive VFs transmissions ($\overline{\Delta_{\rm tx}}$ :frame_interval_s
), the considered ($\overline{\text{NFR}}$ :network_heur_fps
), the considered ($\overline{\text{VF-RTT}}$ :rtt_avg_heur_s
), the considered threshold for NFR ($\rho$ :threshold_fps
), the considered threshold for VF-RTT ($\sigma$ :threshold_rtt_s
), the random value drawn from a uniform distribution in the interval [0, 1] (threshold_u
), and the requested target bitrate ($B_{\text{v}}$ :requested_bitrate_bps
)
NeSt-VR configurable parameters are outlined in the following table:
Adjustment Period | Step Size | ||
Sliding Window Size | Estimated Capacity Scaling Factor | ||
Minimum Bitrate | VF-RTT Exploration Probability | ||
Maximum Bitrate | NFR Threshold | ||
Initial Bitrate | VF-RTT Threshold Scaling Factor | ||
For detailed requirements, please refer to the ALVR GitHub repository.
To build this fork, follow the installation guide provided in the ALVR wiki, specifically for Windows operating systems: ALVR Installation Guide.
For further details on how ALVR works, consult their wiki: How ALVR Works.
This project is developed with partial financial support of:
|
|
MAX-R Project (HORIZON) | Wi-XR Project (PID2021-123995NB-I00) |