图片仅用于展示目的
使用您的手机作为VR头戴显示器来运行Steam VR支持的应用程序。这是类似于VRidge、Riftcat、Trinus等商业软件包的唯一开源解决方案。"通用网络"可以是桌面和安卓应用之间的任何类型的网络,甚至支持USB网络共享和移动热点。
标签 | 链接 |
---|---|
路线图/计划/未来待办事项 | 项目看板 |
最新发布 | GitHub 发布 |
之前的构建 | GitHub Actions |
问题 | GitHub 问题跟踪器 |
讨论/聊天/帮助/实时更新/任何问题 - Discord | Discord 服务器邀请链接 |
目录
要求
一台运行Windows 7或更高版本的PC,一部运行Android 5.0(棒棒糖)或更高版本的智能手机(ALVR需要Android 8.0或更高版本),支持OpenGL-ES 3.0或更高版本,安装了Steam和一些SteamVR应用程序。
安装
PhoneVR(PVR)可以与两种服务器一起使用:ALVR和PVRServer。推荐使用ALVR服务器而不是PVRServer,两者使用不同的API。
差异 | ALVR 服务器 | PhoneVR 服务器 |
---|---|---|
服务器/桌面端 | OpenVR API | OpenVR API |
移动端 | Google Cardboard API | Google VR API(已弃用) |
图形用户界面 | ✅ | ❌ |
用户友好的安装程序 | ✅ | ❌ |
服务器端硬件(GPU)编码 | ✅ | ❌ |
服务器端软件编码 | ✅ | ✅ |
自动防火墙设置 | ✅ | ❌ |
Linux 支持(部分) | ✅ | ❌ |
开发者 | Alvr-org | PhoneVR |
支持其他头戴显示器?如 Quest 等 | ✅ | ❌ |
开源 | ✅ | ✅ |
网络节流 | ✅ | ❌ |
平均延迟 | 150ms | 1500ms |
VR应用程序图形操作 (亮度、分辨率、对比度等) | ✅ | (部分) |
代码后端 | Rust + C++ | C++ |
A. 使用ALVR服务器安装
- 目前PhoneVR仅支持**ALVR v20.8.0**(最新稳定版)。
- 旧版本
- PhoneVR v1.4.0-beta -> ALVR v20.7.1
- PhoneVR v1.3.0-beta -> ALVR v20.6.1
- PhoneVR v1.2.0-beta -> ALVR v20.5.0
- PhoneVR v1.1.0-beta -> ALVR v20.2.1
- PhoneVR v1.0.0-beta -> ALVR v20.1.0
- 旧版本
- 请参考此处的ALVR服务器安装指南。
B. 使用传统PhoneVR服务器安装
- 确保已安装Steam和SteamVR(在Steam中找到SteamVR:
库 -> 工具 -> SteamVR
)。 - 下载本仓库的最新发布版本
PhoneVR-Server-vX.X.X-xxxxx.zip
。 - 将zip文件中
driver
文件夹内的整个PVRServer
文件夹复制到您的SteamVR/drivers
文件夹中。(默认路径:C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers
)。 - (仅适用于PhoneVR服务器)要玩游戏,首先打开手机应用(SteamVR也应该关闭),然后在PC上运行您选择的游戏。(显然,PC和手机应该在同一网络上,最好是5GHz Wi-Fi)
两种服务器的通用说明
- 从
发布
页面在您的手机上安装Android APK。 - 确保给予"后台运行"、"自动启动"(崩溃时重启)权限(如果您的设备上存在这些权限,特别是小米用户)。还要确保任何第三方电池节省应用不会在后台杀死PhoneVR。
- 打开安装的应用后,根据您安装的服务器选择ALVR(推荐)或PhoneVR服务器。
高级配置
ALVR服务器
Phone VR服务器
- Windows驱动程序设置
Windows SteamVR 驱动程序会随 SteamVR 自动加载,并通过 SteamVR 从 VR 应用程序(如 SteamVR Home、VRChat 等)获取
FrameTextures
。然后这些纹理会被编码并以指定的game_fps
通过 x264 编码器流式传输到移动设备。可以通过位于默认安装位置C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\PVRServer\
的pvrsettings.json
文件调整此编码器的一些配置。
默认设置:
{
"enable" : true,
"game_fps" : 65,
"video_stream_port" : 15243,
"pose_stream_port" : 51423,
"pairing_port" : 33333,
"encoder" : {
"preset" : "ultrafast",
"tune" : "zerolatency",
"qp" : 20,
"profile" : "baseline"
}
}
大多数设置都是不言自明的。任何设置的更改都需要重启 SteamVR 才能生效。
- "encoder" : 编码器 x264 设置
-
"preset" : 可设置为 "ultrafast"、"superfast"、"veryfast"、"faster"、"fast"、"medium"、"slow"、"slower"、"veryslow" 或 "placebo" 警告:这些预设的速度差异很大。Ultrafast 比 placebo 快整整 100 倍! 这些预设会影响编码速度。使用较慢的预设可以获得更好的压缩效果或更高的文件大小质量比,而较快的预设则会导致压缩效果较差。通常,你应该使用你能够接受等待时间的预设。
-
"tune" : 可设置为 "film"、"animation"、"grain"、"stillimage"、"psnr"、"ssim"、"fastdecode"、"zerolatency" Tune 会影响视频质量(和大小),film 质量最佳,向右依次递减
-
"profile" : 可设置为 "baseline"、"main"、"high"、"high10"、"high422"、"high444" 应用给定配置文件的限制。目前可用的配置文件如上所述,从最严格到最宽松。不保证会使用给定的配置文件:如果将 "High" 的限制应用于已经与 Baseline 兼容的设置,则流将保持 baseline。简而言之,它不会增加设置,只会减少设置。
-
"qp" : 量化数据包常数,范围 0-51,0 表示无损
-
"rc_method" : 速率控制方法,1/2/3 恒定 QP (CQP) - 0; 恒定速率因子 (CRF) - 1; 平均比特率 (ABR) - 2; 默认为 1,即 CRF,rf 为 24 (rf_max 为 26)
- "qcomp" : 默认 : 0
- "keyint_max" : 默认 : -1
- "intra_refresh" : 默认 : False
- "bitrate" : 默认 : -1 (最小 1000)
-
只在必要时进行调整,并关注默认安装位置 C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\PVRServer\logs\
中的 pvrlog.txt
文件中的 "Skipped frame! Please re-tune the encoder parameters" 消息。如果你频繁收到这些消息,你可能需要降低设置,因为 Windows 似乎没有足够的处理能力和资源来以现有设置进行渲染。
开发
该项目目前正在测试中。但欢迎提交 pull request。
-
Windows PhoneVR 驱动程序:
<root>/code/windows/PhoneVR.sln
- 在
Microsoft Visual Studio 2017
上编译/测试 - 构建后,将
driver_PhoveVR.dll
和其他文件从<solution root>/build/[win32 or x64]/
复制到本地驱动程序文件夹。 - 对于运行时调试,你需要将
MSVS JIT debugger
附加到vrserver.exe
(它实际加载 driver_PhonveVR.dll) - 为了测试,该项目有 2 个构建配置,Debug 和 Release。Debug 有大量调试输出到 local-driver-folder/pvrlog.txt 和 MSVS 调试器输出。
- 在
-
Android 应用: 应用文件夹:
<root>/code/mobile/android/PhoneVR
- 在
Android Studio 4.0.1
上编译/测试 - 为了测试,该项目有 2 个构建配置,Debug 和 Release。Debug 有大量来自 JAVA 和 JNI 的调试输出到 logcat。
- PhoneVR 与 Android AVD 兼容,虽然 PhoneVR Server 网络也与 AVD 兼容,但 ALVR Server 网络需要更多工作才能进行模拟。
- 当在 AVD 上运行 PhoneVR APK 时,会自动将 10.0.2.2(默认模拟器地址)分配给 pcIP
- 启动 AVD 模拟器后,需要在终端/命令行中运行 "adb forward tcp:33333 tcp:33333",这将启用 PVRServer -> 基于 Android 模拟器的 PVRAndroidApp 通信。
- 在
-
使用的外部供应商库(所有头文件都包含在各自的项目中):
- Json v3.8.0 (https://github.com/nlohmann/json) (code\windows\libs\json)
- Eigen v3.3.7 (https://gitlab.com/libeigen/eigen) (code\common\libs\eigen)
- Asio v1.12.2 (https://sourceforge.net/projects/asio/files/asio/1.12.2%20%28Stable%29/) (code\common\libs\asio)
- x264 0.161.r3015 MSVS15(2017) (https://github.com/ShiftMediaProject/x264)
- GoogleVR 1.200 (https://github.com/googlevr/gvr-android-sdk) (code\mobile\android\libraries\jni)
- ACRA v5.7 (https://github.com/ACRA/acra)
- ALVR (https://github.com/alvr-org/ALVR) (code\mobile\android\PhoneVR\ALVR)
-
代码风格
- 仓库强制执行 clang-format v16.0.0 (.clang-format) 用于 C/C++ 文件,spotless (.editorconfig, google-java-format, ktfmt) 用于 Java/Kotlin 文件
- 开发者可以使用
make format
自动修复 clang-format 相关问题 - 要自动修复 spotless 格式问题,开发者可以进入 PhoneVR android 项目文件夹并使用
./gradlew spotlessApply
,或者在 AndroidStudio/IDE 中使用 spotless-gradle 插件
故障排除
-
即使先打开手机应用再打开 Windows 上的 SteamVR,Android 应用也无法连接到 Windows Steam VR
- 确保 Windows 和 Android 设备在同一个局域网中。(连接到同一个路由器/WiFi 设备)
- 有时,PhoneVR 用于连接 win/mobile 设备的端口(也称为
配对端口(默认:33333)
)可能被设备(Windows/Android)上的其他服务使用。尝试在Android PhoneVR 应用
设置和Windows PVR 驱动程序
的C:\Program Files\PhoneVR\pvrsettings.json
中更改 "配对端口",然后重启 SteamVR。Windows 配对端口和 Android 配对端口应该相同。安全推荐的端口范围:30000 - 65535
-
使用一段时间 VR 应用后,Android 应用自动返回到 "发现"(主页/应用启动)页面
- 检查
Android 系统电池保护
或类似应用是否在应用处于后台时杀死了它。通常可以在Android 设置
->应用管理器
或应用设置
中找到,具体取决于你的 Android 设备品牌/OEM。
- 检查
-
在移动设备上使用 VR 应用时出现延迟
- 确保你没有使用 APK 的调试版本(除非你真的需要)。
- 当勾选
设置 -> 调试
时,所有相关组件的 FPS 都会显示在移动设备上。你可以找出从 Windows 上的 VR 应用到 Android 上的 GoogleVR SDK 渲染器整个链条中的瓶颈组件并解决它。
-
如果上述方法对你没有帮助,那么你可能需要安装 APK 的调试版本,可以从
[PhoneVR.zip]/android/arm7/debug
获取,这可以帮助你/我们获得更详细的日志。 -
诊断统计数据命名(仅限 PhoneVR Server)(从 VR 应用帧创建到移动设备帧显示的顺序):
这些统计数据可以通过勾选设置
->统计
选项启用。所有值都应该稳定,并且大致等于pvrsettings.json
中的game_fps
± 10 值。命名
--- @M - 移动端; @C - CPU/桌面端 ---
@FPS(秒) :
SR - 流接收器 @M
D - 媒体解码器 @M
R - 帧渲染器 @M
cR - 帧渲染器 @C
SS - 流发送器 @C
SW - 流写入器 @C
E - 媒体编码器 @C
VRa - VR应用FPS @C
@延迟(秒) :
tSS - 渲染器获取帧到渲染完成的时间延迟 @C
tE - 编码器获取帧到编码完成的时间延迟 @C
tND - 网络延迟 - @C发送数据包到@M接收数据包的时间延迟
tSR - 流接收器 - @C发送数据包到@M发送数据到媒体解码器的时间延迟
问题/缺陷报告
在报告问题/缺陷之前,请查看正在进行的问题(这里和这里)。如果您遇到相同的问题,可以加入并关注那些讨论。
您可以使用Github Issues
提交与本项目运行相关的PhoneVR问题/缺陷或任何查询。
要报告与ALVRServer相关的问题,请使用ALVR Github Issues
。
为了快速解决,您可能需要在问题/缺陷报告中添加以下数据:
对于安装时或SteamVR和PhoneVR链接问题,
- 默认位置为
C:\Program Files (x86)\Steam\config\steamvr.vrsettings
的steamvr.vrsettings
文件 - 默认位置为
C:\Program Files (x86)\Steam\logs\vrserver.txt
的vrserver.txt
文件 - 在以下默认目录中打开
cmd
并复制粘贴vrcmd
命令的输出。C:\Program Files (x86)\Steam\steamapps\common\SteamVR\bin\win64\vrcmd.exe
对于网络问题,
如果发生意外的Android应用崩溃(意外指的是,您没有看到 这个 当PhoneVR崩溃时的屏幕),
- 打开
PhoneVR
Android应用并让它崩溃。 - 从Android设备收集
bugreport-xxx.zip
(如何操作请参考这里的*"从设备捕获错误报告"*段落) - 将
bugreport-xxx.zip
文件附加到Discord或GitHub或发送邮件至*"phonevr.crash@gmail.com"*
所有类型问题都需要的常见文件,
- 如果使用PhoneVR Legacy服务器
- 默认Windows位置
C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\PVRServer\logs
中的pvrLog.txt
和/或pvrDebugLog.txt
文件 - 默认Android位置
.../Android/data/virtualis.phonevr/files/PVR/
中的pvrLog.txt
和/或pvrDebugLog.txt
文件。可选地,您也可以从应用的设置页面
附加日志
。
- 默认Windows位置
- 如果使用ALVR
- ALVR服务器的日志可在GUI中获取(如果您希望在关闭alvr后仍继续将日志保存到文件,可能需要启用设置 -> 日志记录 -> 记录到磁盘)
- 截图/视频对开发人员更快理解问题非常有帮助。
- 当然,还有如何重现问题的步骤 :)