diff --git a/server/src/browser-management/classes/RemoteBrowser.ts b/server/src/browser-management/classes/RemoteBrowser.ts index b502b255..5573a540 100644 --- a/server/src/browser-management/classes/RemoteBrowser.ts +++ b/server/src/browser-management/classes/RemoteBrowser.ts @@ -128,4 +128,33 @@ export class RemoteBrowser { } }); } + + /** + * Subscribes the remote browser for a screencast session + * on [CDP](https://chromedevtools.github.io/devtools-protocol/) level, + * where screenshot is being sent through the socket + * every time the browser's active page updates. + * @returns {Promise} + */ + public subscribeToScreencast = async() : Promise => { + await this.startScreencast(); + if (!this.client) { + logger.log('warn','client is not initialized'); + return; + } + this.client.on('Page.screencastFrame', ({ data: base64, sessionId }) => { + this.emitScreenshot(base64); + setTimeout(async () => { + try { + if (!this.client) { + logger.log('warn','client is not initialized'); + return; + } + await this.client.send('Page.screencastFrameAck', { sessionId: sessionId }); + } catch (e) { + logger.log('error', e); + } + }, 100); + }); + }; }