handle string ffmpeg input (#2064)

* handle string ffmpeg input

* rename stuff for new purpose

* file prefix isn't needed

* pass tests

* remove dumb spaces in dispatcher docs
This commit is contained in:
Will Nelson
2017-10-27 14:42:21 -07:00
committed by Amish Shah
parent 8a87cbf404
commit dbf4ef9a7c
7 changed files with 18 additions and 15 deletions

View File

@@ -41,7 +41,7 @@ class VoiceBroadcast extends EventEmitter {
* .catch(console.error); * .catch(console.error);
*/ */
playFile(file, options) { playFile(file, options) {
return this.player.playUnknownStream(`file:${file}`, options); return this.player.playUnknown(file, options);
} }
/** /**
@@ -51,7 +51,7 @@ class VoiceBroadcast extends EventEmitter {
* @returns {StreamDispatcher} * @returns {StreamDispatcher}
*/ */
playArbitraryInput(input, options) { playArbitraryInput(input, options) {
return this.player.playUnknownStream(input, options); return this.player.playUnknown(input, options);
} }
/** /**
@@ -71,7 +71,7 @@ class VoiceBroadcast extends EventEmitter {
* .catch(console.error); * .catch(console.error);
*/ */
playStream(stream, options) { playStream(stream, options) {
return this.player.playUnknownStream(stream, options); return this.player.playUnknown(stream, options);
} }
/** /**

View File

@@ -457,7 +457,7 @@ class VoiceConnection extends EventEmitter {
* .catch(console.error); * .catch(console.error);
*/ */
playFile(file, options) { playFile(file, options) {
return this.player.playUnknownStream(`file:${file}`, options); return this.player.playUnknown(file, options);
} }
/** /**
@@ -467,7 +467,7 @@ class VoiceConnection extends EventEmitter {
* @returns {StreamDispatcher} * @returns {StreamDispatcher}
*/ */
playArbitraryInput(input, options) { playArbitraryInput(input, options) {
return this.player.playUnknownStream(input, options); return this.player.playUnknown(input, options);
} }
/** /**
@@ -487,7 +487,7 @@ class VoiceConnection extends EventEmitter {
* .catch(console.error); * .catch(console.error);
*/ */
playStream(stream, options) { playStream(stream, options) {
return this.player.playUnknownStream(stream, options); return this.player.playUnknown(stream, options);
} }
/** /**

View File

@@ -1,4 +1,3 @@
const Collection = require('../../../util/Collection');
const StreamDispatcher = require('./StreamDispatcher'); const StreamDispatcher = require('./StreamDispatcher');
/** /**

View File

@@ -147,7 +147,7 @@ class StreamDispatcher extends Writable {
/** /**
* Sets the expected packet loss percentage if using a compatible Opus stream. * Sets the expected packet loss percentage if using a compatible Opus stream.
* @param {number} value between 0 and 1 * @param {number} value between 0 and 1
* @returns {boolean} Returns true if it was successfully set. * @returns {boolean} Returns true if it was successfully set.
*/ */
setPLP(value) { setPLP(value) {
@@ -158,7 +158,7 @@ class StreamDispatcher extends Writable {
/** /**
* Enables or disables forward error correction if using a compatible Opus stream. * Enables or disables forward error correction if using a compatible Opus stream.
* @param {boolean} enabled true to enable * @param {boolean} enabled true to enable
* @returns {boolean} Returns true if it was successfully set. * @returns {boolean} Returns true if it was successfully set.
*/ */
setFEC(enabled) { setFEC(enabled) {

View File

@@ -1,4 +1,5 @@
const EventEmitter = require('events').EventEmitter; const EventEmitter = require('events').EventEmitter;
const { Readable: ReadableStream } = require('stream');
const prism = require('prism-media'); const prism = require('prism-media');
const StreamDispatcher = require('../dispatcher/StreamDispatcher'); const StreamDispatcher = require('../dispatcher/StreamDispatcher');
@@ -16,7 +17,7 @@ const FFMPEG_ARGUMENTS = [
* @extends {EventEmitter} * @extends {EventEmitter}
*/ */
class BasePlayer extends EventEmitter { class BasePlayer extends EventEmitter {
constructor(voiceConnection) { constructor() {
super(); super();
this.dispatcher = null; this.dispatcher = null;
@@ -39,10 +40,14 @@ class BasePlayer extends EventEmitter {
} }
} }
playUnknownStream(stream, options) { playUnknown(input, options) {
this.destroyDispatcher(); this.destroyDispatcher();
const ffmpeg = new prism.FFmpeg({ args: FFMPEG_ARGUMENTS });
stream.pipe(ffmpeg); const isStream = input instanceof ReadableStream;
const args = isStream ? FFMPEG_ARGUMENTS : ['-i', input, ...FFMPEG_ARGUMENTS];
const ffmpeg = new prism.FFmpeg({ args });
if (isStream) input.pipe(ffmpeg);
return this.playPCMStream(ffmpeg, options, { ffmpeg }); return this.playPCMStream(ffmpeg, options, { ffmpeg });
} }

View File

@@ -1,4 +1,3 @@
const prism = require('prism-media');
const BroadcastDispatcher = require('../dispatcher/BroadcastDispatcher'); const BroadcastDispatcher = require('../dispatcher/BroadcastDispatcher');
const BasePlayer = require('./BasePlayer'); const BasePlayer = require('./BasePlayer');

Submodule typings updated: 697fc933de...5131e88ffe