aboutsummaryrefslogtreecommitdiffhomepage
path: root/packages/peertube-runner
diff options
context:
space:
mode:
Diffstat (limited to 'packages/peertube-runner')
-rw-r--r--packages/peertube-runner/server/process/shared/process-live.ts17
1 files 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 {
77 try { 77 try {
78 await this.sendPendingChunks() 78 await this.sendPendingChunks()
79 } catch (err) { 79 } catch (err) {
80 this.onUpdateError(err, rej) 80 this.onUpdateError({ err, rej, res })
81 } 81 }
82 82
83 const playlistName = this.getPlaylistIdFromTS(p) 83 const playlistName = this.getPlaylistIdFromTS(p)
@@ -90,7 +90,7 @@ export class ProcessLiveRTMPHLSTranscoding {
90 90
91 tsWatcher.on('unlink', p => { 91 tsWatcher.on('unlink', p => {
92 this.sendDeletedChunkUpdate(p) 92 this.sendDeletedChunkUpdate(p)
93 .catch(err => this.onUpdateError(err, rej)) 93 .catch(err => this.onUpdateError({ err, rej, res }))
94 }) 94 })
95 95
96 this.ffmpegCommand = await buildFFmpegLive().getLiveTranscodingCommand({ 96 this.ffmpegCommand = await buildFFmpegLive().getLiveTranscodingCommand({
@@ -134,23 +134,32 @@ export class ProcessLiveRTMPHLSTranscoding {
134 134
135 // --------------------------------------------------------------------------- 135 // ---------------------------------------------------------------------------
136 136
137 private onUpdateError (err: Error, reject: (reason?: any) => void) { 137 private onUpdateError (options: {
138 err: Error
139 res: () => void
140 rej: (reason?: any) => void
141 }) {
142 const { err, res, rej } = options
143
138 if (this.errored) return 144 if (this.errored) return
139 if (this.ended) return 145 if (this.ended) return
140 146
141 this.errored = true 147 this.errored = true
142 148
143 reject(err)
144 this.ffmpegCommand.kill('SIGINT') 149 this.ffmpegCommand.kill('SIGINT')
145 150
146 const type = ((err as any).res?.body as PeerTubeProblemDocument)?.code 151 const type = ((err as any).res?.body as PeerTubeProblemDocument)?.code
147 if (type === ServerErrorCode.RUNNER_JOB_NOT_IN_PROCESSING_STATE) { 152 if (type === ServerErrorCode.RUNNER_JOB_NOT_IN_PROCESSING_STATE) {
148 logger.info({ err }, 'Stopping transcoding as the job is not in processing state anymore') 153 logger.info({ err }, 'Stopping transcoding as the job is not in processing state anymore')
154
155 res()
149 } else { 156 } else {
150 logger.error({ err }, 'Cannot send update after added/deleted chunk, stopping live transcoding') 157 logger.error({ err }, 'Cannot send update after added/deleted chunk, stopping live transcoding')
151 158
152 this.sendError(err) 159 this.sendError(err)
153 .catch(subErr => logger.error({ err: subErr }, 'Cannot send error')) 160 .catch(subErr => logger.error({ err: subErr }, 'Cannot send error'))
161
162 rej(err)
154 } 163 }
155 164
156 this.cleanup() 165 this.cleanup()