--- title: "IVION Streaming API Sample Application" slug: "ivion-streaming-api-sample-application" updated: 2026-11-03T16:42:47Z published: 2026-11-03T16:42:47Z canonical: "knowledge.navvis.com/ivion-streaming-api-sample-application" --- > ## Documentation Index > Fetch the complete documentation index at: https://knowledge.navvis.com/llms.txt > Use this file to discover all available pages before exploring further. # IVION Streaming API Sample Application ## Overview Use this application when you integrate IVION point clouds, panoramas or maps into your own software and want working code to start from. You need access to an IVION instance with API access. Run the application to see the streaming APIs in action, and read its source code to see how each step of the usage guides is implemented. The application shows the point clouds, panoramas and maps of a site together in one 3D scene in site coordinates. It consists of two parts: - **libivion**: a C++ library that handles logging in, listing sites and datasets, pre-signed download URLs, point cloud streaming, NVR archives, panorama tiles and map tiles. - **sample-app**: an OpenGL application that uses libivion to display the data. ![Sample application showing a point cloud of the NavVis headquarters kitchen above the floor maps of the site, with the point cloud and map settings in the side panel](https://cdn.document360.io/bf174766-fa1a-4fe1-a4d7-b1db1e7cb996/Images/Documentation/sample_app_point_cloud_and_maps.jpg?sv=2026-02-06&spr=https&st=2026-11-04T06%3A30%3A04Z&se=2026-11-04T07%3A30%3A04Z&sr=c&sp=r&sig=jqLm54RwB%2FVCwDV9%2F4kWvRsq9cJt3l%2F%2BNOoHi5TT2UI%3D) *Point cloud and floor maps of a site in the same view* > [!NOTE] > **Note:** > > - The streaming APIs require API access, which is included in IVION Professional and IVION Enterprise but not in IVION Core. On an instance without API access, the application shows a message instead of the site list. > - The source code is licensed under the Zero-Clause BSD (0BSD) license. You can copy any part of it into your own application. The application implements the steps described in these articles: - [Point Streaming API Usage Guide](/docs/en/point-streaming-api-usage-guide) - [Panorama Streaming API Usage Guide](/docs/en/panorama-streaming-api-usage-guide) - [Map Streaming API Usage Guide](/docs/en/map-streaming-api-usage-guide) - [NVR File Format Specification](/docs/en/nvr-file-format-specification) ## Downloads The source code builds on macOS, Windows and Linux. The prebuilt applications for macOS and Windows let you try the streaming APIs without building anything first. | **Download** | **Content** | | --- | --- | | [Source code (ZIP)](https://cdn.document360.io/bf174766-fa1a-4fe1-a4d7-b1db1e7cb996/Images/Documentation/ivion-streaming-api-sample-2026-11-02.zip?sv=2026-02-06&spr=https&st=2026-11-04T06%3A30%3A04Z&se=2026-11-04T07%3A30%3A04Z&sr=c&sp=r&sig=jqLm54RwB%2FVCwDV9%2F4kWvRsq9cJt3l%2F%2BNOoHi5TT2UI%3D) | libivion and the sample application, with build instructions in `README.md` | | [macOS (Apple silicon)](https://cdn.document360.io/bf174766-fa1a-4fe1-a4d7-b1db1e7cb996/Images/Documentation/ivion-streaming-api-sample-macos-2026-11-02.zip?sv=2026-02-06&spr=https&st=2026-11-04T06%3A30%3A04Z&se=2026-11-04T07%3A30%3A04Z&sr=c&sp=r&sig=jqLm54RwB%2FVCwDV9%2F4kWvRsq9cJt3l%2F%2BNOoHi5TT2UI%3D) | Application bundle | | [Windows (x64)](https://cdn.document360.io/bf174766-fa1a-4fe1-a4d7-b1db1e7cb996/Images/Documentation/ivion-streaming-api-sample-windows-x64-2026-11-02.zip?sv=2026-02-06&spr=https&st=2026-11-04T06%3A30%3A04Z&se=2026-11-04T07%3A30%3A04Z&sr=c&sp=r&sig=jqLm54RwB%2FVCwDV9%2F4kWvRsq9cJt3l%2F%2BNOoHi5TT2UI%3D) | Executable | | [Windows (ARM64)](https://cdn.document360.io/bf174766-fa1a-4fe1-a4d7-b1db1e7cb996/Images/Documentation/ivion-streaming-api-sample-windows-arm64-2026-11-02.zip?sv=2026-02-06&spr=https&st=2026-11-04T06%3A30%3A04Z&se=2026-11-04T07%3A30%3A04Z&sr=c&sp=r&sig=jqLm54RwB%2FVCwDV9%2F4kWvRsq9cJt3l%2F%2BNOoHi5TT2UI%3D) | Executable | ## Connecting to an instance 1. Start the application. 2. Enter the URL of your IVION instance, for example `https://{instance_name}.iv.navvis.com`, or select a recently used one. 3. Click the **Connect and log in** button. A browser window opens. 4. Log in to IVION in the browser and allow the application to access the instance. 5. Select a site. The application loads the site and enables the first dataset that has panoramas. The application stores the credentials in the file `.ivion-sample-app` in your home directory and reuses them for the next login. To log in as a different user, delete this file. To connect to an instance that allows anonymous access without logging in, click the **Anonymous access** checkbox before you connect. To open another site or connect to another instance, click the **Change site** or **Change instance** button at the top of the panel. ## Exploring a site The panel on the side of the window controls what the scene shows: - **Datasets**: switch datasets on and off. Click the **Go to** button to view a dataset from above. - **Point clouds**: the application streams the point cloud level by level up to an adjustable octree level. You can apply Hide Overlap and Point Cloud Cleanup separately. - **Panoramas**: a marker on the floor shows the position of each panorama. Click a marker to enter the panorama. You can blend the panorama over the point cloud. If the dataset has depth images, the panel shows the distance and the site coordinate of the point under the cursor. - **Maps**: you can switch each map on and off individually. Outdoor maps are shown by default. - **Debugging**: show the octree node bounds of point clouds and the tile borders and resolution levels of panoramas and maps. Slow down tile downloads to watch the order in which tiles load. ![Sample application inside a panorama of a kitchen, with the markers of the neighboring panoramas on the floor and the distance and site coordinate under the cursor in the side panel](https://cdn.document360.io/bf174766-fa1a-4fe1-a4d7-b1db1e7cb996/Images/Documentation/sample_app_panorama.jpg?sv=2026-02-06&spr=https&st=2026-11-04T06%3A30%3A04Z&se=2026-11-04T07%3A30%3A04Z&sr=c&sp=r&sig=jqLm54RwB%2FVCwDV9%2F4kWvRsq9cJt3l%2F%2BNOoHi5TT2UI%3D) *Inside a panorama: the markers show the neighboring panoramas, and the panel shows the distance and site coordinate under the cursor* Use the following controls to move through the scene: | **Input** | **Action** | | --- | --- | | Drag | Look around | | W and S | Move forward and backward | | A and D | Move left and right | | Q and E | Move up and down on the screen | | Shift | Move faster | | Mouse wheel | Move forward and backward. Inside a panorama, zoom. | | Click | Enter the panorama under the cursor | | N and P | Enter the next or previous panorama | | Esc | Leave the panorama. Moving with W, A, S, D, Q or E also leaves it. | | T | Look straight down | ## Building from source To build the application, you need CMake 3.21 or newer, Conan 2 and a C++17 compiler. Conan installs all other dependencies, except SDL2 on Linux, which comes from your distribution. Build the library first, then the application: ```plaintext cd libivion conan create . --build=missing cd ../sample-app conan build . --build=missing ``` The file `README.md` in the source code describes the build for each platform in detail, including Visual Studio on Windows. ## Where to look in the code Most of the application's code is about rendering and the user interface. The calls to libivion that the usage guides describe are in the following functions, all in the `sample-app/src` directory: | **Topic** | **Code** | | --- | --- | | Logging in, refreshing the access token and anonymous access | `login()` and `ConnectionPanel::connect()` in `connection_panel.cpp`, the credential cache in `credential_cache.cpp`. During the session, libivion refreshes the access token automatically before it expires. | | Datasets, floors, maps and panoramas of a site | `loadSiteData()` and the `Scene` constructor in `scene.cpp` | | Site transformation and bounding box of a dataset | `DatasetPanel::request()` and `DatasetPanel::siteExtent()` in `dataset_panel.cpp` | | Point streaming: hierarchy, point data, visibility and site coordinates | `PointCloudLayer::load()` in `point_cloud_layer.cpp` | | Opening a panorama archive and generating the tile geometry | `PanoramaLayer::enter()` and `PanoramaLayer::opened()` in `panorama_layer.cpp` | | Choosing panorama resolution levels by view direction and field of view | `PanoramaLayer::update()` and `PanoramaLayer::requestTile()` | | Placing a panorama in site coordinates | `PanoramaLayer::renderPanorama()` | | Depth under the cursor | `PanoramaLayer::updateCursor()` | | Map streaming: opening the archive, choosing tiles by level of detail and placing them in site coordinates | `MapLayer::open()`, `MapLayer::renderTile()`, `MapLayer::request()` and `MapLayer::drawQuad()` in `map_layer.cpp` | ## FAQ #### Why does the application show "This instance does not include API access"? The instance does not have API access. The streaming APIs are included in IVION Professional and IVION Enterprise. #### Can I use the code in my own application? Yes. The source code is licensed under the Zero-Clause BSD (0BSD) license, which allows any use without attribution. #### How do I log in as a different user? Delete the file `.ivion-sample-app` in your home directory and connect again.