puppeteer-stream-controller
v1.0.1
Published
Capture tab audio and video stream while using puppeteer
Downloads
50
Maintainers
Readme
puppeteer-stream-controller
puppeteer-stream-controller
is a library that provides an easy-to-use API for managing media streams within a Puppeteer context. This library is particularly useful when building applications that handle audio and video streams, enabling developers to control the flow of media programmatically.
Installation
Install the library:
npm install puppeteer-stream-controller
# or
yarn add puppeteer-stream-controller
Features
- Start, pause, resume, and stop media streams within a puppeteer page.
- Manage multiple media streams simultaneously.
- Stream media over WebSocket server.
- Supports both audio and video streams.
- Configurable options for media types and frame sizes.
Usage
Here's a simple example of how to use puppeteer-stream-controller
:
import puppeteer from 'puppeteer';
import {
StreamController,
getLaunchArgs,
allowInIncognito,
} from 'puppeteer-stream-controller';
const opts = {
audio: true,
video: true,
mimeType: 'video/webm',
timeSlice: 20,
};
(async () => {
// ****** REQUIRED ******
// This will load the extension. If omitted, the extension won't be loaded and nothing will work.
const extensionLaunchArgs = getLaunchArgs(); // ** required **
const browser = await puppeteer.launch({ args: extensionLaunchArgs }); // ** required **
// ****** OPTIONAL ******
// Allow the extension to run in incognito mode
await allowInIncognito(browser);
const page = await browser.newPage();
await page.goto('https://example.com');
const streamController = new StreamController(page, {
audio: true,
video: true,
});
// getStream() returns a Node.js Transform stream
const stream = await streamController.getStream();
// Attach a 'data' event handler to the stream
stream.on('data', (chunk) => {
console.log('Received new stream data:', chunk);
});
// Pause or resume stream
streamController.pauseStream();
streamController.resumeStream();
// Don't forget to stop the stream and close the browser when you're done.
await streamController.stopStream();
await browser.close();
})();
API
StreamController
StreamController
is a class responsible for controlling the streaming process. It provides methods to start, pause, resume and stop the stream.
constructor(page: Page, opts: StreamOptions, wss?: Server)
Creates a new instance of StreamController
.
page
: A Puppeteer Page instance.opts
: An object with the following properties:audio
: A boolean indicating whether to include audio in the stream.video
: A boolean indicating whether to include video in the stream.mimeType
: The MIME type of the stream ('audio/webm' or 'video/webm').timeSlice
: The number of milliseconds to record into each Blob.
wss
: An optional WebSocket server to handle the streaming.
getStream(): Promise<Transform | null>
Initializes the stream and returns it. The stream is a Node.js Transform stream.
pauseStream(): Promise<void>
Pauses the stream.
resumeStream(): Promise<void>
Resumes the stream.
stopStream(): Promise<void>
Stops the stream.
getLaunchArgs(): string[]
Returns the launch arguments for Puppeteer.
allowInIncognito(browser: Browser | BrowserContext): Promise<void>
Allows the extension to run in incognito mode.
Contributing
Contributions are welcomed and appreciated. Please feel free to open an issue or submit a pull request.
Acknowledgements
This project is inspired by puppeteer-stream. Portions of the codebase are derived from this project and are covered under their original MIT License.
License
puppeteer-stream-controller
is Apache-2.0 licensed.