#playstation #uvc #ps4-camera #omnivision #ps5-camera

app ps5_camera_firmware_loader

用于在Playstation 4或5摄像头上安装固件的工具

1 个不稳定版本

0.0.1 2023年8月14日

#15#playstation

MIT 许可证

12KB
76

build-badge

关于

此工具用于将固件安装到Playstation 5摄像头:https://www.playstation.com/en-us/accessories/hd-camera/

尽管名字如此,它也可以在PlayStation 4 摄像头上使用。

将自定义固件加载到摄像头上的主要原因是可以将其用作 UVC 设备,即网络摄像头。

这是OrbisEyeCam的Linux版本,OrbisEyeCam是为Windows设计的。向@psxdev致敬,感谢其在逆向工程方面的初始努力。

网络摄像头设置

要将此用作网络摄像头,我们需要将自定义固件安装到设备上(默认固件不支持UVC)。

您可以在Github上找到Playstation摄像头的自定义固件,以下是我使用的一些

(更多固件版本可在这里找到)

连接设备

将您的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设备。

  1. 确保您的用户是 plugdev 组的成员。最简单的方法是检查您的 /etc/group 文件。如果您不是plugdev组的成员,请运行
$ sudo usermod -a -G plugdev $USER
  1. 将udev规则(100-playstation-camera.rules)复制到 /etc/udev/rules.d

  2. 通过运行来重新加载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摄像头的测试图像

test-image

如果您使用的是上面链接的固件,那么它支持的格式和参数如下

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