puppeteer-stream
An Extension for Puppeteer to retrieve audio and/or video streams of a page
Recording video/audio from video conferencing calls
If you’re looking to use this repo to retrieve video or audio streams from meeting platforms like Zoom, Google Meet, Microsoft Teams, consider checking out Recall.ai, an API for meeting recording.
Installation
npm i puppeteer-stream
# or "yarn add puppeteer-stream"
Usage
ES5 import
const { launch, getStream } = require("puppeteer-stream");
or ES6 import
import { launch, getStream } from "puppeteer-stream";
Notice: This will only work in headful mode
The method getStream(options)
takes the following options
{
audio: boolean;
video: boolean;
mimeType?: string;
audioBitsPerSecond?: number;
videoBitsPerSecond?: number;
bitsPerSecond?: number;
frameSize?: number;
videoConstraints: {
mandatory?: MediaTrackConstraints,
optional?: MediaTrackConstraints
},
audioConstraints: {
mandatory?: MediaTrackConstraints,
optional?: MediaTrackConstraints
},
}
getStream
returns a Promise<
Readable
>
For a detailed documentation of the mimeType
, audioBitsPerSecond
, videoBitsPerSecond
, bitsPerSecond
, frameSize
properties have a look at the HTML5 MediaRecorder Options and for the videoConstraints
and audioConstraints
properties have a look at the MediaTrackConstraints.
Launch
The method launch(options)
is just a slightly changed puppeteer launch function to start puppeteer in headful mode with this extension.
Example
const { launch, getStream, wss } = require("puppeteer-stream");
const fs = require("fs");
const file = fs.createWriteStream(__dirname + "/test.webm");
async function test() {
const browser = await launch({
defaultViewport: {
width: 1920,
height: 1080,
},
});
const page = await browser.newPage();
await page.goto("https://www.youtube.com/watch?v=dQw4w9WgXcQ");
const stream = await getStream(page, { audio: true, video: true });
console.log("recording");
stream.pipe(file);
setTimeout(async () => {
await stream.destroy();
file.close();
console.log("finished");
await browser.close();
(await wss).close();
}, 1000 * 10);
}
test();