discord.js/src/client/voice/pcm/FfmpegConverterEngine.js
Schuyler Cebulskie 9682adb9fe Clean up PR a bit
2016-09-08 22:59:10 -04:00

40 lines
1.1 KiB
JavaScript

const ConverterEngine = require('./ConverterEngine');
const ChildProcess = require('child_process');
class FfmpegConverterEngine extends ConverterEngine {
constructor(player) {
super(player);
this.command = chooseCommand();
}
handleError(encoder, err) {
if (encoder.destroy) encoder.destroy();
this.emit('error', err);
}
createConvertStream(seek = 0) {
super.createConvertStream();
const encoder = ChildProcess.spawn(this.command, [
'-analyzeduration', '0',
'-loglevel', '0',
'-i', '-',
'-f', 's16le',
'-ar', '48000',
'-ss', String(seek),
'pipe:1',
], { stdio: ['pipe', 'pipe', 'ignore'] });
encoder.on('error', e => this.handleError(encoder, e));
encoder.stdin.on('error', e => this.handleError(encoder, e));
encoder.stdout.on('error', e => this.handleError(encoder, e));
return encoder;
}
}
function chooseCommand() {
for (const cmd of ['ffmpeg', 'avconv', './ffmpeg', './avconv']) {
if (!ChildProcess.spawnSync(cmd, ['-h']).error) return cmd;
}
return null;
}
module.exports = FfmpegConverterEngine;