From d4d0f3ba0e3577e2725f2e7e7e004478ce30a371 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 23 May 2023 08:31:02 +0200 Subject: [PATCH] Don't send an error on live abort --- .../server/process/shared/process-live.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/peertube-runner/server/process/shared/process-live.ts b/packages/peertube-runner/server/process/shared/process-live.ts index fae79e485..e1fc0e34e 100644 --- a/packages/peertube-runner/server/process/shared/process-live.ts +++ b/packages/peertube-runner/server/process/shared/process-live.ts @@ -77,7 +77,7 @@ export class ProcessLiveRTMPHLSTranscoding { try { await this.sendPendingChunks() } catch (err) { - this.onUpdateError(err, rej) + this.onUpdateError({ err, rej, res }) } const playlistName = this.getPlaylistIdFromTS(p) @@ -90,7 +90,7 @@ export class ProcessLiveRTMPHLSTranscoding { tsWatcher.on('unlink', p => { this.sendDeletedChunkUpdate(p) - .catch(err => this.onUpdateError(err, rej)) + .catch(err => this.onUpdateError({ err, rej, res })) }) this.ffmpegCommand = await buildFFmpegLive().getLiveTranscodingCommand({ @@ -134,23 +134,32 @@ export class ProcessLiveRTMPHLSTranscoding { // --------------------------------------------------------------------------- - private onUpdateError (err: Error, reject: (reason?: any) => void) { + private onUpdateError (options: { + err: Error + res: () => void + rej: (reason?: any) => void + }) { + const { err, res, rej } = options + if (this.errored) return if (this.ended) return this.errored = true - reject(err) this.ffmpegCommand.kill('SIGINT') const type = ((err as any).res?.body as PeerTubeProblemDocument)?.code if (type === ServerErrorCode.RUNNER_JOB_NOT_IN_PROCESSING_STATE) { logger.info({ err }, 'Stopping transcoding as the job is not in processing state anymore') + + res() } else { logger.error({ err }, 'Cannot send update after added/deleted chunk, stopping live transcoding') this.sendError(err) .catch(subErr => logger.error({ err: subErr }, 'Cannot send error')) + + rej(err) } this.cleanup()