Source: https://github.com/e3ds/E3DS-Iframe-Demo/tree/iframe-demo-html
Iframe Demo: https://iframe.eagle3dstreaming.com/
ReactJS Iframe Demo: https://iframe_react.eagle3dstreaming.com/
UE5 Iframe Demo: https://iframe_ue5.eagle3dstreaming.com/
Unreal project source code used in the demo: https://bitbucket.org/Eagle3DStreaming/e3dsfeaturestemplate/
Overview
Communication means the transmission of data between two people or entities. Where one will send data and another one will receive it and vice versa.
Part-1 :
Sending data from the parent webpage to the Unreal App
To communicate with the unreal app you must send data from the webpage to the unreal app and the app will send you a response. Data must be sent as a string to the unreal app. To send Integer data, we have to convert the integer into a string using toString()
method. To send JSON object, we have to stringify it using JSON.stringify()
method. For an array, we need to convert it to a JSON object and then stringify the object. Below is an example of how to send JSON data from the webpage to the unreal app.
From the Javascript client page:
let descriptor = { Teleport: "6" }; let obj = { cmd: "sendToUe4", value: descriptor } document.getElementById("iframe_1").contentWindow.postMessage(JSON.stringify(obj), "*"); //here "iframe_1" is the id of the HTML iframe element
Part-2 :
Manipulating style attribute of an HTML element
This can also be achieved by sending data from the webpage. But we need to make a few changes in the JSON object for that. Here’s an example that hides the settings button inside the streaming UI:
const toggleSettings = (id)=>{ let descriptor = { id, property: 'display', value: 'none' }; let obj = { cmd: "style", value: descriptor, } document.getElementById("iframe_1").contentWindow.postMessage(JSON.stringify(obj), "*"); }
Here id is the ID of the HTML element whose style you are trying to change.
Part-3 :
Receiving data from Unreal App to the parent webpage
After sending the data we will receive a response from the unreal app. This response can be caught by using message event handler defined in the page
. Here’s detailed example of that -
function HandleResponseFromUE4(jsonObj) { // Process the JSON object sent by the Unreal app to the webpage } const eventHandler = (event) => { // This function will receive all kinds of events the webpage receives // Check if event.data.type exists to identify if it was sent by the Unreal app if (!event.data.type) { // If event.data includes a field named cmd, then this data is coming from the Unreal app. // If your Unreal app uses a different field name, replace this field name with the one you have used in your Unreal app if (typeof event.data === 'string' && event.data.includes('cmd')) { // We are receiving data as a string. Now we try to parse it to check // if this string represents a JSON or not. // If you are sending a normal string from the Unreal app, then this is not needed const parsedData = JSON.parse(event.data); if (parsedData.cmd) { // It is JSON object data sent from UE4 HandleResponseFromUE4(parsedData); // Process the data sent by UE4 } } } } // We are binding eventHandler to receive all kinds of messages the webpage receives window.addEventListener("message", eventHandler);
Part-4 :
Set Custom Resolution from Webpage with Iframe
Go to the following document to learn about how to set custom resolution from your webpage.
Part-5:
How to send a Pixel Streaming Response from unreal app to webpage
Useful Events:
See this document on Useful Events in Iframe Solution.
More detailed doc to embed iframe to any webpage :
Refer to Multiplayer Demo, Embed Stream into Webpage using iFrame and communicate with Unreal App.
Need help? Contact Support
If you still need help, contact support to get your issue resolved quickly.
Submit a new request at E3DS support portal or send an Email at support@eagle3dstreaming.com.
Seek advice. Connect with others. Share your experiences. Join our lively Community Forum today.
Add Comment