Streaming

Pointcaster streams point clouds over the network to other applications in real time. Streams are received by Pointreceiver, a native library that the Integrations/Unity and Integrations/TouchDesigner plugins are built on.

Point clouds are sent by the Point Streamer, and scalar and vector data is sent separately by the Message Streamer.

Stream Channels

Every session, device and device group in the workspace is available as a stream channel. Channels are listed in the Streaming window (Window → Streaming), where they can be toggled on or off.

The dot beside each channel shows its status:

  • Grey: disabled.
  • Blue: live, but no clients are subscribed.
  • Green: at least one client is subscribed.

Point Streamer Properties

  • Address / Port: the interface and TCP port to listen on. Defaults to all interfaces on port 9992.
  • Publish Hz: the maximum number of frames sent per second.
  • Publish Every Frame: re-send every channel on every tick. Otherwise a channel only sends when its cloud has changed, or when a new client subscribes.
  • Max Queued Frames: when enabled, limits how many frames can queue for a slow client before new frames are dropped.
  • Codec: how point clouds are compressed before sending.
    • None: send raw points.
    • Meshopt: fast compression, with a Level from 0 (fastest) to 3 (smallest). This is the default.
    • Draco: higher compression at a greater CPU cost. Encode Speed and Decode Speed trade compression for speed, and Attribute Quantization sets the bits kept per point attribute.

Pointreceiver

Pointreceiver is a C library for receiving Pointcaster streams in your own software. It manages connections on background threads and queues incoming data. Clients pull the latest frame per channel when they're ready for it.

A typical client:

  1. Creates a context with pointreceiver_create_context.
  2. Starts the point receiver with the streamer's address, e.g. pointreceiver_start_point_receiver(ctx, "tcp://127.0.0.1:9992").
  3. Subscribes to a channel with pointreceiver_subscribe_to_point_cloud. An empty address subscribes to every channel.
  4. Polls pointreceiver_dequeue_point_cloud for frames. Each frame has positions (16-bit integer millimetres), colours and any point attributes such as point scale.

Messages from the Message Streamer are received the same way using pointreceiver_start_message_receiver, pointreceiver_subscribe_to_message and pointreceiver_dequeue_message.

Warning

Frame buffers are borrowed from the context and are only valid until the next dequeue, so copy anything you need to keep.

Pointreceiver builds for Windows, Linux and Android (armeabi-v7a and arm64-v8a) using the pointreceiver-* CMake presets. See Development/Building Pointcaster.


0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9