让手机秒变SteamVR头显的开源软件
PhoneVR是一款开源软件,可将智能手机变 为VR头显设备来体验SteamVR应用。它通过ALVR或PVRServer实现PC与手机间的低延迟视频传输,支持包括USB共享网络和移动热点在内的多种连接方式。作为同类商业软件的免费替代,PhoneVR让用户能够便捷地享受PC VR游戏体验。
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/60cad431-3262-4a08-a88c-0b4ab5f1e69f.png" width="50%"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/0bf26229-0b7f-4eee-9297-2a3c57194a41.jpg" width="50%"> <sup>图片仅用于展示目的</sup>
使用您的手机作为VR头戴显示器来运行Steam VR支持的应用程序。这是类似于VRidge、Riftcat、Trinus等商业软件包的唯一开源解决方案。"通用网络"可以是桌面和安卓应用之间的任何类型的网络,甚至支持USB网络共享和移动热点。 <br/>
标签 | 链接 |
---|---|
路线图/计划/未来待办事项 | 项目看板 |
最新发布 | 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应用程序图形操作<br>(亮度、分辨率、对比度等) | ✅ | (部分) |
代码后端 | Rust + C++ | C++ |
库 -> 工具 -> SteamVR
)。PhoneVR-Server-vX.X.X-xxxxx.zip
。driver
文件夹内的整个PVRServer
文件夹复制到您的SteamVR/drivers
文件夹中。(默认路径:C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers
)。发布
页面在您的手机上安装Android APK。FrameTextures
。然后这些纹理会被编码并以指定的 game_fps
通过 x264 编码器流式传输到移动设备。可以通过位于默认安装位置 C:\Program Files (x86)\Steam\steamapps\common\SteamVR\drivers\PVRServer\
的 pvrsettings.json
文件调整此编码器的一些配置。<br/>
默认设置:{ "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 才能生效。
"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)
只在必要时进行调整,并关注默认安装位置 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)Android 应用: 应用文件夹: <root>/code/mobile/android/PhoneVR
Android Studio 4.0.1
上编译/测试使用的外部供应商库(所有头文件都包含在各自的项目中):
代码风格
make format
自动修复 clang-format 相关问题./gradlew spotlessApply
,或者在 AndroidStudio/IDE 中使用 spotless-gradle 插件即使先打开手机应用再打开 Windows 上的 SteamVR,Android 应用也无法连接到 Windows Steam VR
配对端口(默认: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 应用时出现延迟
设置 -> 调试
时,所有相关组件的 FPS 都会显示在移动设备上。你可以找出从 Windows 上的 VR 应用到 Android 上的 GoogleVR SDK 渲染器整个链条中的瓶颈组件并解决它。如果上述方法对你没有帮助,那么你可能需要安装 APK 的调试版本,可以从 [PhoneVR.zip]/android/arm7/debug
获取,这可以帮助你/我们获得更详细的日志。
诊断统计数据命名(仅限 PhoneVR Server)(从 VR 应用帧创建到移动设备帧显示的顺序):<br/>
这些统计数据可以通过勾选 设置
->统计
选项启用。所有值都应该稳定,并且大致等于 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
。
为了快速解决,您可能需要在问题/缺陷报告中添加以下数据:
<ins>对于安装时或SteamVR和PhoneVR链接问题,</ins>
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
<ins>对于网络问题,</ins>
<ins>