The X1 series and P2S printers run a RTSP server that streams video over the network.
- URL:
rtsps://{PRINTER_IP}:322/streaming/live/1 - TLS: yes
- Authentication: required
- Username:
bblp - Password:
dev_access_codefrom aDeviceobject (aka the LAN access code).
H2S and H2D printers also serve the same rtsps://{PRINTER_IP}:322/streaming/live/1
RTSPS feed, but on the firmwares observed (H2S 01.02.00.00, H2D
01.02.00.00) the LAN-RTSPS server appears to be off by default:
port 322 closes the TCP connection immediately and the printer's
push_status reports ipcam.rtsp_url = "disable".
To enable it, on the printer's touchscreen:
- Settings → General → LAN Mode Liveview (label varies by firmware track)
- Toggle "LAN Only Liveview" / "Local RTSP Stream" to on.
After the toggle, push_status reports ipcam.rtsp_url = "rtsps://{PRINTER_IP}:322/streaming/live/1" and the port begins
accepting connections. The same bblp + dev_access_code credentials
apply.
If the local toggle is left off, the printer is still reachable via
the proprietary cloud-relay transports (TUTK / Agora P2P) and the
slicer's MediaPlayCtrl path falls through to those automatically; only
the direct rtsps:// URL is gated.
The A1 and P1 series printers run a simple TCP server that streams 1280x720 JPEG images over the network. Integers are encoded in little-endian byte order.
- Host:
{PRINTER_IP}:6000 - TLS: yes
- Authentication: required
- Username:
bblp - Password:
dev_access_codefrom aDeviceobject (aka the LAN access code).
This packet must be sent when connecting to the server.
| Offset | Size | Value |
|---|---|---|
| 0 | 4 bytes | Inlined Payload size (0x40) |
| 4 | 4 bytes | Type (0x3000) |
| 8 | 4 bytes | Flags (0) |
| 12 | 4 bytes | 0 |
| 16 | 32 bytes | Username encoded as ASCII, right-padded with null bytes. |
| 48 | 32 bytes | Password encoded as ASCII, right-padded with null bytes. |
The server sends a 16-byte header for each frame.
| Offset | Size | Value |
|---|---|---|
| 0 | 4 bytes | Payload size |
| 4 | 4 bytes | itrack (0) |
| 8 | 4 bytes | Flags (1) |
| 12 | 4 bytes | 0 |
After the header, the server sends a total of payload size bytes containing the JPEG image.
The image data might be received in multiple chunks (e.g. up to 4096 bytes each), depending on the programming language and operating system. These chunks need to be concatenated to reconstruct the complete image.
The following magic bytes can be checked to verify that the image has been successfully received:
- Start of Image:
FF D8 - End of Image:
FF D9