puppeteer-stream
An Extension for Puppeteer to retrieve audio and/or video streams of a page
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();