1 个不稳定版本
0.0.1 | 2023年8月14日 |
---|
#15 在 #playstation
12KB
76 行
关于
此工具用于将固件安装到Playstation 5摄像头:https://www.playstation.com/en-us/accessories/hd-camera/
尽管名字如此,它也可以在PlayStation 4 摄像头上使用。
将自定义固件加载到摄像头上的主要原因是可以将其用作 UVC 设备,即网络摄像头。
这是OrbisEyeCam的Linux版本,OrbisEyeCam是为Windows设计的。向@psxdev致敬,感谢其在逆向工程方面的初始努力。
网络摄像头设置
要将此用作网络摄像头,我们需要将自定义固件安装到设备上(默认固件不支持UVC)。
您可以在Github上找到Playstation摄像头的自定义固件,以下是我使用的一些
- https://github.com/prosperodev/hdcamera/blob/main/firmware/21.01-03.20.00.04-00.00.00.bin
- https://github.com/Hackinside/PS5_camera_files/blob/main/firmware.bin
(更多固件版本可在这里找到)
连接设备
将您的PS摄像头连接到计算机的USB 3.0端口。(如果您有PS4摄像头,您需要购买一个AUX到USB适配器)
确保您在dmesg日志中看到以下内容
usb 2-4.4.4.4: new SuperSpeed Gen 1 USB device number 7 using xhci_hcd
usb 2-4.4.4.4: New USB device found, idVendor=05a9, idProduct=0580, bcdDevice= 1.00
usb 2-4.4.4.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 2-4.4.4.4: Product: USB Boot
usb 2-4.4.4.4: Manufacturer: OmniVision Technologies, Inc.
保持dmesg窗口打开,我们稍后需要它。
设置权限
libusb 需要权限才能写入USB设备。
- 确保您的用户是
plugdev
组的成员。最简单的方法是检查您的/etc/group
文件。如果您不是plugdev组的成员,请运行
$ sudo usermod -a -G plugdev $USER
-
将udev规则(
100-playstation-camera.rules
)复制到/etc/udev/rules.d
-
通过运行来重新加载udev规则
$ sudo udevadm control --reload ; sudo udevadm trigger
运行脚本
此产品有两个“后端”,一个用C++编写,另一个用Rust编写。C++版本已弃用,但它仍然有效,并且未来,我将只支持Rust版本。
要构建和运行C++版本
$ cmake CMakeLists.txt
$ make
$ ./ps5_camera_firmware_loader <firmware-file-path>
要构建和运行Rust版本
$ cargo build --manifest-path=Cargo.toml
$ ./target/debug/ps5_camera_firmware_loader <firmware-file-path>
成功 ✔️
回到之前打开的dmesg窗口。您应该看到以下行
uvcvideo: Found UVC 1.00 device USB Camera-OV580 (05a9:058c)
打开您喜欢的网络摄像头程序,现在您已经设置好了。请注意,每次设备断电后都必须重新安装固件。
这是PS5摄像头的测试图像
如果您使用的是上面链接的固件,那么它支持的格式和参数如下
User Controls
brightness 0x00980900 (int) : min=0 max=8 step=1 default=4 value=4
contrast 0x00980901 (int) : min=0 max=8 step=1 default=4 value=4
saturation 0x00980902 (int) : min=0 max=8 step=1 default=4 value=4
hue 0x00980903 (int) : min=0 max=11 step=1 default=0 value=0
white_balance_automatic 0x0098090c (bool) : default=1 value=1
gain 0x00980913 (int) : min=0 max=8 step=1 default=4 value=4
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1 (50 Hz)
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=100 default=4600 value=4600 flags=inactive
sharpness 0x0098091b (int) : min=0 max=8 step=1 default=4 value=4
Camera Controls
auto_exposure 0x009a0901 (menu) : min=0 max=3 default=2 value=2 (Shutter Priority Mode)
exposure_time_absolute 0x009a0902 (int) : min=1 max=5000 step=1 default=1000 value=1000 flags=inactive
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 896x256
Interval: Discrete 0.008s (120.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.125s (8.000 fps)
Size: Discrete 960x520
Interval: Discrete 0.017s (60.000 fps)
Size: Discrete 448x256
Interval: Discrete 0.008s (120.000 fps)
Size: Discrete 1280x800
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.125s (8.000 fps)
Size: Discrete 640x376
Interval: Discrete 0.008s (120.000 fps)
Size: Discrete 320x184
Interval: Discrete 0.004s (240.004 fps)
Size: Discrete 5148x1088
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.125s (8.000 fps)
Size: Discrete 3840x1080
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.125s (8.000 fps)
Size: Discrete 1920x520
Interval: Discrete 0.017s (60.000 fps)
Size: Discrete 2560x800
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.067s (15.000 fps)
Interval: Discrete 0.125s (8.000 fps)
Size: Discrete 1280x376
Interval: Discrete 0.008s (120.000 fps)
Size: Discrete 640x184
Interval: Discrete 0.004s (240.004 fps)
故障排除
UVC设备已识别,但我看到的全是黑屏
尝试降低帧率。我注意到有时自动曝光控制似乎不起作用。
依赖项
~365KB