IonImageryProvider not working with puppeteer + headless chrome

308 views
Skip to first unread message

Sb B

unread,
Nov 24, 2018, 8:01:26 PM11/24/18
to cesium-dev
Hi,
If I am running puppeteer with headed chrome, everything is fine.
However for headless I am not able to render with IonImageryProvider
I tried alternate providers like MapboxImageryProvider and it works perfectly well

I am trying to render a scene to a video
Using Cesium 50

Thanks in advance for help !
Best, Sid.


Console gives following error stream
an error occurred in "IonImageryProvider": Failed to obtain image tile X: 3 Y: 5 Level: 3.
Cesium.js:37792 An error occurred in "IonImageryProvider": Failed to obtain image tile X: 3 Y: 7 Level: 3.
Image (async)
Resource._Implementations.createImage @ Cesium.js:6316
request.requestFunction @ Cesium.js:5461
RequestScheduler.request @ Cesium.js:4209
fetchImage @ Cesium.js:5466
(anonymous) @ Cesium.js:5425
(anonymous) @ Cesium.js:1163
(anonymous) @ Cesium.js:1264
processQueue @ Cesium.js:1614
_resolve @ Cesium.js:1300
promiseResolve @ Cesium.js:1326
(anonymous) @ Cesium.js:1163
(anonymous) @ Cesium.js:1265
processQueue @ Cesium.js:1614
_resolve @ Cesium.js:1300
promiseResolve @ Cesium.js:1326
(anonymous) @ Cesium.js:1163
(anonymous) @ Cesium.js:1265
processQueue @ Cesium.js:1614
_resolve @ Cesium.js:1300
promiseResolve @ Cesium.js:1326
(anonymous) @ Cesium.js:4059
(anonymous) @ Cesium.js:1163
(anonymous) @ Cesium.js:1264
processQueue @ Cesium.js:1614
_resolve @ Cesium.js:1300
promiseResolve @ Cesium.js:1326
xhr.onload @ Cesium.js:6450
load (async)
Resource._Implementations.loadWithXhr @ Cesium.js:6419
request.requestFunction @ Cesium.js:5794
startRequest @ Cesium.js:4085
RequestScheduler.update @ Cesium.js:4161
Scene.render @ Cesium.js:240484
CesiumWidget.render @ Cesium.js:251309
render @ Cesium.js:250690
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
Cesium.js:37792 An error occurred in "IonImageryProvider": Failed to obtain image tile X: 2 Y: 7 Level: 3.
Image (async)
Resource._Implementations.createImage @ Cesium.js:6316
request.requestFunction @ Cesium.js:5461
RequestScheduler.request @ Cesium.js:4209
fetchImage @ Cesium.js:5466
(anonymous) @ Cesium.js:5425
(anonymous) @ Cesium.js:1163
(anonymous) @ Cesium.js:1264
processQueue @ Cesium.js:1614
_resolve @ Cesium.js:1300
promiseResolve @ Cesium.js:1326
(anonymous) @ Cesium.js:1163
(anonymous) @ Cesium.js:1265
processQueue @ Cesium.js:1614
_resolve @ Cesium.js:1300
promiseResolve @ Cesium.js:1326
(anonymous) @ Cesium.js:1163
(anonymous) @ Cesium.js:1265
processQueue @ Cesium.js:1614
_resolve @ Cesium.js:1300
promiseResolve @ Cesium.js:1326
(anonymous) @ Cesium.js:4059
(anonymous) @ Cesium.js:1163
(anonymous) @ Cesium.js:1264
processQueue @ Cesium.js:1614
_resolve @ Cesium.js:1300
promiseResolve @ Cesium.js:1326
xhr.onload @ Cesium.js:6450
load (async)
Resource._Implementations.loadWithXhr @ Cesium.js:6419
request.requestFunction @ Cesium.js:5794
startRequest @ Cesium.js:4085
RequestScheduler.update @ Cesium.js:4161
Scene.render @ Cesium.js:240484
CesiumWidget.render @ Cesium.js:251309
render @ Cesium.js:250690
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691
requestAnimationFrame (async)
requestAnimationFrame @ Cesium.js:83147
render @ Cesium.js:250691



Sb B

unread,
Nov 24, 2018, 8:22:20 PM11/24/18
to cesium-dev
Hi,
Please find the puppeteer code to reproduce this
const puppeteer = require('puppeteer');
var page;
var browser;
var blob;

async function run() {
  browser = await puppeteer.launch({
  headless: false,
  ignoreDefaultArgs: true,
  args:['--no-sandbox', 
'--disable-setuid-sandbox', 
'--remote-debugging-port=9222',
'--headless',
    '--hide-scrollbars',
    '--mute-audio',
"--proxy-server='direct://'",
"--proxy-bypass-list=*",
"--disable-gpu",
"--deterministic-fetch"
]
});
  page = await browser.newPage();
}
run();


Thanks for help,
Best,
Siddharth.

Omar Shehata

unread,
Nov 26, 2018, 10:20:36 AM11/26/18
to cesium-dev
Thanks for reporting this Siddharth! I think this might an issue with the Blob URL. I can see that IonResource and Resource have an option of whether or not to use the Blob protocol when requesting an image. I'm not sure that IonImageryProvider exposes this option, but if you edit the Resource.js source code to force `preferBlob` to be always false and see if that fixes the issue, that'll help move this forward a lot faster, and then we can open a GitHub issue detailing the issue and a possible fix.

Let me know if you're able to try that and how it goes!

Sb B

unread,
Nov 27, 2018, 7:39:16 PM11/27/18
to cesium-dev
Hello Omar,
Setting preferBlob to false has fixed this issue, 
I have mainly searched for preferBlob in Cesium,js and hard coded the same to false
Please start the process of opening issue on GitHub.

Thank you very much for the help ! 
Siddharth.

ling...@gmail.com

unread,
Dec 3, 2019, 11:17:08 PM12/3/19
to cesium-dev
There's a long-standing bug in Chromium regarding how links without protocols are handled. This error does not have a single solution till date because it arises due to a multitude of reasons. The ERR_UNKNOWN_URL_SCHEME error is commonly because of your browser issue . There's no application on your device which can handle that particular action. It is a Chromium bug . In Chrome version 40 and up, this bug has resurfaced, but only if you are manually entering the URL of the redirect page in the address bar. The bug in chromium is responsible, yet everytime a patch is added to solve, the error finds a new way to resurface. The issue is on the chromium issue tracker here.

Common solutions:
  • Prefixing your links with http:// (or https://) should resolve the issue in some cases
  • If Err_Unknown_Url_Scheme error occurs in mailto: or tel: links inside an iframe then you can try to add target="_blank" in your URL Scheme.






On Sunday, November 25, 2018 at 6:31:26 AM UTC+5:30, Sb B wrote:
Reply all
Reply to author
Forward
0 new messages