-
-
Save h3/47e9998a8b0fbe7c301c500513273507 to your computer and use it in GitHub Desktop.
Streaming a webcam to a Jitsi Meet room
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const puppeteer = require('puppeteer'); | |
// Streams the first webcam in the system to the specified Jitsi Meet room. Audio is currently | |
// not sent, but it can be easily enabled by disabling the corresponding setting in `meetArgs`. | |
// | |
// TODO | |
// - Detect if we are kicked from the room | |
// - Support authenticated deployments | |
// | |
// NOTE: only tested on GNU/Linux. | |
async function main(room, baseUrl='https://meet.jit.si') { | |
const chromeArgs = [ | |
// Disable sandboxing, gives an error on Linux | |
'--no-sandbox', | |
'--disable-setuid-sandbox', | |
// Automatically give permission to use media devices | |
'--use-fake-ui-for-media-stream', | |
// Silence all output, just in case | |
'--alsa-output-device=plug:null' | |
]; | |
const meetArgs = [ | |
// Disable receiving of video | |
'config.channelLastN=0', | |
// Mute our audio | |
'config.startWithAudioMuted=true', | |
// Don't use simulcast to save resources on the sender (our) side | |
'config.disableSimulcast=true', | |
// No need to process audio levels | |
'config.disableAudioLevels=true', | |
// Disable P2P mode due to a bug in Jitsi Meet | |
'config.p2p.enabled=false' | |
]; | |
const url = `${baseUrl}/${room}#${meetArgs.join('&')}`; | |
console.log(`Loading ${url}`); | |
const browser = await puppeteer.launch({ args: chromeArgs, handleSIGINT: false }); | |
const page = await browser.newPage(); | |
// Manual handling on SIGINT to gracefully hangup and exit | |
process.on('SIGINT', async () => { | |
console.log('Exiting...'); | |
await page.evaluate('APP.conference.hangup();'); | |
await page.close(); | |
browser.close(); | |
console.log('Done!'); | |
process.exit(); | |
}); | |
await page.goto(url); | |
// Set some friendly display name | |
await page.evaluate('APP.conference._room.setDisplayName("Streamer");'); | |
console.log('Running...'); | |
} | |
main(process.argv[2] || 'test123'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment