Onirix Screen Capture

This documentation offers you the possibility to easily add photo and video recording functionalities to your experiences. This is perfect for encouraging engagement by capturing images and sharing them on social networks.

With our library you will be able to include in your experiences:

  • Taking screenshots of users interacting with the experience.
  • Preview and share the user's images in the experience.
  • Record videos

Starting point:

In this tutorial we will show you how to add controls for capturing images and recording videos. We will also show you how easy it is to change the default appearance and texts.

Advanced options

If you need a higher level of control or want to use your own user interface we will show you how to use the library without our UI.

You should keep in mind that using this library ONLY with WebXR may generate a loss of performance and a white strip will also appear at the top of the navigation bar with your phone. Both issues are generated by Google and cannot be hidden or improved in any way.

Here we go!

Complete example in our experience library

Before we start, it is important to know that we have a complete example of this functionality in our experience library. With this example you can download the content and see the code of the experience.

featured-2

In this case you can place a 3D model of Elsa from Frozen on any surface, and take a picture with her. Access here to our experience library example screenshot with Elsa.

DYI: Onirix Screen Capture screens

First of all lets take a look to the Onirix Scree Capture screens and remember that you can customize all of then.

Default UI controls

A very simple interface! A single button to capture or to start and stop video recording.

screen_capture_default_ui

Preview component

If we are taking images or videos we will be able to preview them immediately in the experience itself. In addition, this component has options for the user to download or share it in networks (only if the browser is compatible).

screen_capture_preview

In Safari the downloading of the image or video must be done through the sharing options provided by the iOS operating system. In this browser the option to download the content behaves differently from other browsers as it loads the image or video in the open tab eliminating the experience.

Step 1: Use the default UI

Onirix Screen Capture uses Onirix Embed SDK to communicate with the experience. Therefore it is necessary to import and instantiate Onirix Embed SDK before using Onirix Screen Capture.

Once you have added the Onirix Embed SDK you just need to instantiate Onirix Screen Capture and call the addUI method.

import OnirixEmbedSDK from "https://unpkg.com/@onirix/embed-sdk@1.11.2/dist/ox-embed-sdk.esm.js";
import OxScreenCaptureLib from "https://unpkg.com/@onirix/screen-capture@1.3.0/dist/ox-screencapture-lib.esm.js";

const embedSDK = new OnirixEmbedSDK();
embedSDK.connect();

const oxScreenCapture = new OxScreenCaptureLib(embedSDK);
oxScreenCapture.addUI();

With this code you will be able to take screenshots and display them directly in the preview component.

But the addUI method allows you to do more things. This method supports three parameters: video, preview and uIText:

  • video: If you want to add a button to record video, you must pass the video parameter as true. By default it is false.
  • preview: If you want to show a preview component after screenshot, you must pass the preview parameter as true. By default it is true. Preview component is only available for screenshots, not for video.
  • uIText: If you want to customize the texts of the buttons, you must pass a JSON object with the texts you want to change. By default it is null. Take a look at the section on how to particularize the default ui.

Let's see some examples:

// Default config: take screenshot and show preview component.
oxScreenCapture.addUI();
// Take screenshot and NOT show preview component.
oxScreenCapture.addUI(false, false);
// Record video and customize texts
oxScreenCapture.addUI(true, false, {
    label_video: 'Record video',
    recording_video: 'Stop recording',
});

Step 2: Customize default UI

Customizing texts

When you use the default UI these are the texts that will be shown to the user:

Text Description
label_video Text of the button to record video
recording_video Text of the button to stop recording video
label_photo Text of the button to take photo
video_prefix Prefix for the video file name
photo_prefix Prefix for the photo file name

If you want to change any of these texts, you must pass a JSON object with the texts you want to change.

const CUSTOM_UI_TEXTS = {
    label_video: 'Start recording',
    recording_video: 'Stop recording',
    label_photo: 'Take a picture',
    video_prefix: 'recording_',
    photo_prefix: 'picture_',
};

oxScreenCapture.addUI(false, false, CUSTOM_UI_TEXTS);

This are the default texts:

const DEFAULT_UI_TEXTS = {
    label_video: 'Start video',
    recording_video: 'Press to stop',
    label_photo: 'Take photo',
    video_prefix: 'video_',
    photo_prefix: 'photo_',
}

Customizing CSS

The body has a css class called ox-screen-capture. And during screen capture or video recording the class ox-screen-capture--in--progress is added.

Default UI has ox-screen-capture__ui and the preview has a class called ox-screen-capture__preview. By employing these selectors, you will be able to customize the style of individual elements under them in the DOM.

To modify the look and feel of the UI controls and preview component you can add all the CSS you need to your experience through Onirix Studio's online code editor.

Let's change a few things in the preview component:

body.ox-screen-capture .ox-screen-capture__preview > div div > button {
    border-radius: 8px;
    border: 1px solid #580088;
    background-size: 50%;
    background-position: center center;
    width: 22px;
    height: 22px;
}

body.ox-screen-capture .ox-screen-capture__preview {
    background-color: rgba(0, 0, 0, 0.5);
}

body.ox-screen-capture .ox-screen-capture__preview > div{
    border: 3px solid #580088;
}

This is the result:

screen_capture_customized_preview

You can make infinite changes to the interface by adding the appropriate CSS selectors. Through your browser's development tools you can explore the names of the css classes used by the library and add your own custom selectors and rules.

Step 3: Create your own controls.

Onirix Screen Capture also allows you to directly call the functions that allow you to take screenshots and record videos. These are the following:

Take screenshot method

capturePhoto();

This method takes a screenshot of the experience and download a file with the image.

Take screenshot method with preview

capturePhotoPreview();

This method takes a screenshot of the experience and displays it in a preview popup with save and share options.

Start video recording method

captureVideoStart();

This method starts the screen recording.

Stop video recording method

captureVideoEnd(preview = true);

This method finish the screen recording and download the video. If preview is true the video will be loaded into preview component.

Example of custom UI

Through Onirix Studio's online code editor we will add a few html buttons, style them with CSS and give them functionality with a few lines of Javascript.

HTML

We add the buttons. Attention! the ids of each element are important. We will use them to link the Javascript functions.

<div class="my-custom-controls">
    <button id="my-capture-preview">Capture and preview</button>
    <button id="my-capture">Capture and download</button>
    <button id="my-video-start">Start recording</button>
    <button id="my-video-stop">Stop recording</button>
</div>

CSS

Let's give the buttons a little style. We use the ox-screen-capture and ox-screen-capture--in-progress classes to show and hide the buttons during recording.

.my-custom-controls {
    display: flex;
    flex-direction: column;
    position: fixed;
    bottom: 10px;
    left: 10px;
}

.my-custom-controls button {
    margin-bottom: 10px;
    border-radius: 8px;
    background-color: #580088;
    padding: 10px;
    color: #FFF;
}

.my-custom-controls button:last-child {
    margin-bottom: 0px;
}

body.ox-screen-capture:not(.ox-screen-capture--in-progress) .my-custom-controls #my-video-stop {
    display: none;
}

body.ox-screen-capture.ox-screen-capture--in-progress .my-custom-controls button:not(#my-video-stop) {
    display: none;
}

Javascript

document.getElementById("my-capture-preview").addEventListener("click", () => {
    oxScreenCapture.capturePhotoPreview();
});

document.getElementById("my-capture").addEventListener("click", () => {
    oxScreenCapture.capturePhoto();
});

document.getElementById("my-video-start").addEventListener("click", () => {
    oxScreenCapture.captureVideoStart();
});

document.getElementById("my-video-stop").addEventListener("click", () => {
    oxScreenCapture.captureVideoEnd();
});

This is how our new buttons look like:

screen_capture_custom_controls

Step 4: Add a watermark with your brand

Onirix Screen Capture allows you to add any image from your asset gallery to the screenshots of your experience. It's a very easy way to add your branding to the images.

import OnirixEmbedSDK from "https://unpkg.com/@onirix/embed-sdk@1.11.2/dist/ox-embed-sdk.esm.js";
import OxScreenCaptureLib from "https://unpkg.com/@onirix/screen-capture@1.3.0/dist/ox-screencapture-lib.esm.js";

const OVERLAY_ASSET_OID = '<your asset oid>';

const embedSDK = new OnirixEmbedSDK();
embedSDK.connect();
const oxScreenCapture = new OxScreenCaptureLib(embedSDK);

embedSDK.subscribe(OnirixEmbedSDK.Events.SCENE_LOAD_END, async (params) => {
    await oxScreenCapture.setOverlay(OVERLAY_ASSET_OID, { top: 10, right: 10, width: 200, height: 53 });
});

oxScreenCapture.addUI();

This is the result:

overlay_example

Set overlay image

setOverlay(overlay, params?)
  • overlay can be any type of object supported by createImageBitmap, including img, canvas elements or Blob instances. It can also be the OID of a Studio asset that is of type image.

  • params is optional. If provided it must be an object with zero or more of the following attributes:

    • top: distance in pixels to the top of the viewport.
    • right: distance in pixels to the right part of the viewport.
    • bottom: distance in pixels to the bottom of the viewport.
    • left: distance in pixels to the left side of the viewport.
    • width: width in pixels that the overlay will have.
    • height: height in pixels that the overlay will have.

There are incompatible data:

  • If you indicate the distance to the right side and to the left side, implicitly you are determining the width of the overlay. If you also add the width value, an exception will be thrown.
  • If you specify the distance to the top and to the bottom, you are implicitly determining the height of the overlay. If you also add the height value, an exception will be thrown.

Clear overlay image

clearOverlay()

Clears the current overlay. Captures made after calling this method will not show any overlay until an overlay is redefined.

Results