]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Force ffmpeg to exit on abort
authorChocobozzz <me@florianbigard.com>
Wed, 17 May 2023 14:52:56 +0000 (16:52 +0200)
committerChocobozzz <me@florianbigard.com>
Wed, 17 May 2023 14:52:56 +0000 (16:52 +0200)
server/lib/live/shared/transcoding-wrapper/ffmpeg-transcoding-wrapper.ts

index c82970b88f0019474deba1763c3670c79c0ac1f2..3c2cf51b7231a51e91aaf56eff92c7d742ca03c0 100644 (file)
@@ -10,6 +10,9 @@ import { AbstractTranscodingWrapper } from './abstract-transcoding-wrapper'
 
 export class FFmpegTranscodingWrapper extends AbstractTranscodingWrapper {
   private ffmpegCommand: FfmpegCommand
+
+  private aborted = false
+  private errored = false
   private ended = false
 
   async run () {
@@ -63,7 +66,12 @@ export class FFmpegTranscodingWrapper extends AbstractTranscodingWrapper {
   }
 
   abort () {
-    // Nothing to do, ffmpeg will automatically exit
+    if (this.ended || this.errored || this.aborted) return
+
+    this.ffmpegCommand.kill('SIGINT')
+
+    this.aborted = true
+    this.emit('end')
   }
 
   private onFFmpegError (options: {
@@ -76,14 +84,16 @@ export class FFmpegTranscodingWrapper extends AbstractTranscodingWrapper {
 
     // Don't care that we killed the ffmpeg process
     if (err?.message?.includes('Exiting normally')) return
+    if (this.ended || this.errored || this.aborted) return
 
     logger.error('FFmpeg transcoding error.', { err, stdout, stderr, ffmpegShellCommand, ...this.lTags() })
 
+    this.errored = true
     this.emit('error', { err })
   }
 
   private onFFmpegEnded () {
-    if (this.ended) return
+    if (this.ended || this.errored || this.aborted) return
 
     this.ended = true
     this.emit('end')