mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00

This is an attempt to improve video performance when encoding does not keep up with frames. This situation can be reproduced by running multiple encoders at the same time. Added `utils/video_stress.js` to manually reproduce this issue. Observing ffmpeg logs, it does not do any encoding initially and instead does "input analysis / probing" that detects fps and other parameters. By the time it starts encoding (launches vpx and creates the video file), we already have many frames in the buffer. Reducing probing helps: `-avioflags direct -fpsprobesize 0 -probesize 32 -analyzeduration 0` Another issue observed is questionable default `-threads` value. We compile without threads support, so logs say "using emulated threads". For some reason, setting explicit `-threads 1` (or any other value) makes it better when cpu is loaded.
25 lines
840 B
JavaScript
25 lines
840 B
JavaScript
const { chromium } = require('..');
|
|
const videoDir = require('path').join(__dirname, '..', '.tmp');
|
|
|
|
async function go(browser) {
|
|
console.log(`Creating context`);
|
|
const context = await browser.newContext({ recordVideo: { dir: videoDir } });
|
|
const page = await context.newPage();
|
|
await page.goto('https://webkit.org/blog-files/3d-transforms/poster-circle.html');
|
|
await page.waitForTimeout(10000);
|
|
const time = Date.now();
|
|
await context.close();
|
|
console.log(`Closing context for ${Date.now() - time}ms`);
|
|
const video = await page.video();
|
|
console.log(`Recorded video at ${await video.path()}`);
|
|
}
|
|
|
|
(async () => {
|
|
const browser = await chromium.launch({ headless: true });
|
|
const promises = [];
|
|
for (let i = 0; i < 10; i++)
|
|
promises.push(go(browser));
|
|
await Promise.all(promises);
|
|
await browser.close();
|
|
})();
|