feat: use png throughout emission

This commit is contained in:
Rohit
2025-03-24 01:10:30 +05:30
parent 241031471b
commit 35e6570006

View File

@@ -557,35 +557,28 @@ export class RemoteBrowser {
private async optimizeScreenshot(screenshot: Buffer): Promise<Buffer> { private async optimizeScreenshot(screenshot: Buffer): Promise<Buffer> {
try { try {
// Use JPEG format with optimized settings
return await sharp(screenshot) return await sharp(screenshot)
.jpeg({ .png({
quality: Math.round(SCREENCAST_CONFIG.compressionQuality * 100), quality: Math.round(SCREENCAST_CONFIG.compressionQuality * 100),
progressive: true, // Better streaming performance compressionLevel: 6,
force: true // Force JPEG even if PNG input adaptiveFiltering: true,
force: true
}) })
.resize({ .resize({
width: SCREENCAST_CONFIG.maxWidth, width: SCREENCAST_CONFIG.maxWidth,
height: SCREENCAST_CONFIG.maxHeight, height: SCREENCAST_CONFIG.maxHeight,
fit: 'inside', fit: 'inside',
withoutEnlargement: true, withoutEnlargement: true,
kernel: 'lanczos3' // Better quality/performance balance kernel: 'lanczos3'
}) })
.toBuffer(); .toBuffer();
} catch (error) { } catch (error) {
logger.error('Screenshot optimization failed:', error); logger.error('Screenshot optimization failed:', error);
return screenshot;
// If sharp processing fails, do basic resize without sharp
try {
// Fallback to simpler processing
return screenshot;
} catch (fallbackError) {
logger.error('Fallback screenshot processing failed:', fallbackError);
return screenshot;
}
} }
} }
/** /**
* Makes and emits a single screenshot to the client side. * Makes and emits a single screenshot to the client side.
* @returns {Promise<void>} * @returns {Promise<void>}
@@ -841,7 +834,7 @@ export class RemoteBrowser {
logger.error('Screenshot emission failed:', error); logger.error('Screenshot emission failed:', error);
try { try {
const base64Data = payload.toString('base64'); const base64Data = payload.toString('base64');
const dataWithMimeType = `data:image/jpeg;base64,${base64Data}`; const dataWithMimeType = `data:image/png;base64,${base64Data}`;
this.socket.emit('screencast', { this.socket.emit('screencast', {
image: dataWithMimeType, image: dataWithMimeType,