Java (nozzle.java)

nozzle.java provides Java JNI bindings for nozzle.

Setup

git clone --recursive https://github.com/nozzle-io/nozzle.java.git
cd nozzle.java
make
./gradlew build

Requirements

  • Java 11+
  • C++17 compiler (clang / MSVC)
  • macOS 12+ / Windows 10+ / Linux

Sender

try (Sender sender = Sender.create(new SenderDesc("java-sender", "MyApp", 3))) {
    try (WritableFrame frame = sender.acquireWritableFrame(1920, 1080, TextureFormat.RGBA8_UNORM)) {
        MappedPixels pixels = frame.lockWritablePixels(TextureOrigin.TOP_LEFT);
        for (int y = 0; y < pixels.getHeight(); y++) {
            byte[] row = pixels.row(y);
            Arrays.fill(row, (byte) 0xFF);
        }
        pixels.unmap();
        sender.commitFrame(frame);
    }
}

Receiver

try (Receiver receiver = Receiver.create(new ReceiverDesc("java-sender", "MyViewer"))) {
    try (Frame frame = receiver.acquireFrame(5000)) {
        FrameInfo info = frame.getInfo();
        System.out.printf("%dx%d frame #%d%n", info.getWidth(), info.getHeight(), info.getFrameIndex());
    }
}

Error Handling

All fallible operations throw NozzleException with an ErrorCode:

try {
    Sender.create(new SenderDesc("", "test"));
} catch (NozzleException e) {
    if (e.getErrorCode() == ErrorCode.INVALID_ARGUMENT) {
        // handle bad args
    }
}

Platform Notes

  • macOS: Links Metal, IOSurface, Foundation, Accelerate, OpenGL via JNI
  • Windows: Links d3d11, dxgi, opengl32, bcrypt via JNI
  • Linux: Links drm, gbm, EGL, GL via JNI