From c42919e374fa05106cbc49c521769298354e12f9 Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Sat, 1 Jun 2024 10:58:23 +0530 Subject: [PATCH] feat: subscribe to screencast on CDP --- .../classes/RemoteBrowser.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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); + }); + }; }