diff options
| author | Jibon Costa <jiboncosta57@gmail.com> | 2020-03-26 13:39:02 +0600 |
|---|---|---|
| committer | Jibon Costa <jiboncosta57@gmail.com> | 2020-03-26 13:39:02 +0600 |
| commit | e000c457c8f0b6b58d6b1575ad69e0e30bc7f1c8 (patch) | |
| tree | d11f5c1beb94c7339b947421848f018ecca275eb /export.js | |
| download | bbb-recorder-e000c457c8f0b6b58d6b1575ad69e0e30bc7f1c8.tar.gz bbb-recorder-e000c457c8f0b6b58d6b1575ad69e0e30bc7f1c8.zip | |
first commit
Diffstat (limited to 'export.js')
| -rw-r--r-- | export.js | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/export.js b/export.js new file mode 100644 index 0000000..a2c4ddc --- /dev/null +++ b/export.js @@ -0,0 +1,143 @@ +const puppeteer = require('puppeteer'); +const Xvfb = require('xvfb'); +var exec = require('child_process').exec; +const fs = require('fs'); +const homedir = require('os').homedir(); + +var xvfb = new Xvfb({silent: true}); +var width = 1280; +var height = 720; +var options = { + headless: false, + args: [ + '--enable-usermedia-screen-capturing', + '--allow-http-screen-capture', + '--auto-select-desktop-capture-source=bbbrecorder', + '--load-extension=' + __dirname, + '--disable-extensions-except=' + __dirname, + '--disable-infobars', + '--no-sandbox', + '--shm-size=1gb', + '--disable-dev-shm-usage', + `--window-size=${width},${height}`, + ], +} + +async function main() { + try{ + xvfb.startSync() + var url = process.argv[2], + exportname = process.argv[3], + duration = process.argv[4], + convert = process.argv[5] + + if(!url){ url = 'http://tobiasahlin.com/spinkit/' } + if(!exportname){ exportname = 'spinner.webm' } + if(!duration){ duration = 10 } + if(!convert){ convert = false } + + const browser = await puppeteer.launch(options) + const pages = await browser.pages() + + const page = pages[0] + + page.on('console', msg => console.log('PAGE LOG:', msg.text())); + + await page._client.send('Emulation.clearDeviceMetricsOverride') + await page.goto(url, {waitUntil: 'networkidle2'}) + await page.setBypassCSP(true) + + await page.click('button[class=acorn-play-button]', {waitUntil: 'domcontentloaded'}); + await page.$eval('#navbar', element => element.parentNode.removeChild(element)); + await page.$eval('.acorn-controls', element => element.parentNode.removeChild(element)); + await page.$eval('#copyright', element => element.parentNode.removeChild(element)); + + //const form = await page.$('.acorn-play-button'); + //await form.evaluate( form => form.click() ); + + // Perform any actions that have to be captured in the exported video + await page.waitFor((duration * 1000)) + + await page.evaluate(filename=>{ + window.postMessage({type: 'SET_EXPORT_PATH', filename: filename}, '*') + window.postMessage({type: 'REC_STOP'}, '*') + }, exportname) + + // Wait for download of webm to complete + await page.waitForSelector('html.downloadComplete', {timeout: 0}) + await page.close() + await browser.close() + xvfb.stopSync() + + if(convert){ + convertAndCopy(exportname) + }else{ + copyOnly(exportname) + } + + }catch(err) { + console.log(err) + } +} + +main() + +function convertAndCopy(filename){ + + var copyFromPath = homedir + "/Downloads"; + var copyToPath = "/var/www/bigbluebutton-default/record"; + var onlyfileName = filename.split(".webm") + var mp4File = onlyfileName[0] + ".mp4" + var copyFrom = copyFromPath + "/" + filename + "" + var copyTo = copyToPath + "/" + mp4File; + + if(!fs.existsSync(copyToPath)){ + fs.mkdirSync(copyToPath); + } + + console.log(copyTo); + console.log(copyFrom); + + var cmd = "ffmpeg -y -i '" + copyFrom + "' -preset veryfast -movflags faststart -profile:v high -level 4.2 '" + copyTo + "'"; + + console.log("converting using: " + cmd); + + exec(cmd, function(err, stdout, stderr) { + + if (err) console.log('err:\n' + err); + //if (stderr) console.log('stderr:\n' + stderr); + + if(!err){ + console.log("Now deleting " + copyFrom) + try { + fs.unlinkSync(copyFrom); + console.log('successfully deleted ' + copyFrom); + } catch (err) { + console.log(err) + } + } + }); +} + +function copyOnly(filename){ + + var copyFrom = homedir + "/Downloads/" + filename; + var copyToPath = "/var/www/bigbluebutton-default/record"; + var copyTo = copyToPath + "/" + filename; + + if(!fs.existsSync(copyToPath)){ + fs.mkdirSync(copyToPath); + } + + try { + + fs.copyFileSync(copyFrom, copyTo) + console.log('successfully copied ' + copyTo); + + fs.unlinkSync(copyFrom); + console.log('successfully delete ' + copyFrom); + } catch (err) { + console.log(err) + } +} + |
