From c7703a2b7725b0df7ef31f9203537b8105b34275 Mon Sep 17 00:00:00 2001 From: vexorian Date: Sun, 17 Jan 2021 16:02:12 -0400 Subject: [PATCH] Try to play error stream when offline stream fails --- src/offline-player.js | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/offline-player.js b/src/offline-player.js index 4cd0361..802dd1f 100644 --- a/src/offline-player.js +++ b/src/offline-player.js @@ -37,7 +37,7 @@ class OfflinePlayer { } else { ff = await ffmpeg.spawnOffline(duration); } - ff.pipe(outStream); + ff.pipe(outStream, {'end':false} ); ffmpeg.on('end', () => { emitter.emit('end'); @@ -45,8 +45,32 @@ class OfflinePlayer { ffmpeg.on('close', () => { emitter.emit('close'); }); - ffmpeg.on('error', (err) => { - emitter.emit('error', err); + ffmpeg.on('error', async (err) => { + //wish this code wasn't repeated. + if (! this.error ) { + console.log("Replacing failed stream with error stream"); + ff.unpipe(outStream); + ffmpeg.removeAllListeners('data'); + ffmpeg.removeAllListeners('end'); + ffmpeg.removeAllListeners('error'); + ffmpeg.removeAllListeners('close'); + ffmpeg = new FFMPEG(this.context.ffmpegSettings, this.context.channel); // Set the transcoder options + ffmpeg.on('close', () => { + emitter.emit('close'); + }); + ffmpeg.on('end', () => { + emitter.emit('end'); + }); + ffmpeg.on('error', (err) => { + emitter.emit('error', err ); + }); + + ff = await ffmpeg.spawnError('oops', 'oops', Math.min(duration, 60000) ); + ff.pipe(outStream); + } else { + emitter.emit('error', err); + } + }); return emitter; } catch(err) {