]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/live/shared/muxing-session.ts
Merge branch 'release/4.3.0' into develop
[github/Chocobozzz/PeerTube.git] / server / lib / live / shared / muxing-session.ts
index 98a7b26135859222c0b831e296c35507927f88fd..505717dce0bf03fb9664e277d0932156005d178b 100644 (file)
@@ -21,16 +21,16 @@ import { buildConcatenatedName } from '../live-utils'
 import memoizee = require('memoizee')
 
 interface MuxingSessionEvents {
-  'master-playlist-created': ({ videoId: number }) => void
+  'master-playlist-created': (options: { videoId: number }) => void
 
-  'bad-socket-health': ({ videoId: number }) => void
-  'duration-exceeded': ({ videoId: number }) => void
-  'quota-exceeded': ({ videoId: number }) => void
+  'bad-socket-health': (options: { videoId: number }) => void
+  'duration-exceeded': (options: { videoId: number }) => void
+  'quota-exceeded': (options: { videoId: number }) => void
 
-  'ffmpeg-end': ({ videoId: number }) => void
-  'ffmpeg-error': ({ videoId: string }) => void
+  'ffmpeg-end': (options: { videoId: number }) => void
+  'ffmpeg-error': (options: { videoId: number }) => void
 
-  'after-cleanup': ({ videoId: number }) => void
+  'after-cleanup': (options: { videoId: number }) => void
 }
 
 declare interface MuxingSession {
@@ -59,6 +59,8 @@ class MuxingSession extends EventEmitter {
   private readonly bitrate: number
   private readonly ratio: number
 
+  private readonly hasAudio: boolean
+
   private readonly videoId: number
   private readonly videoUUID: string
   private readonly saveReplay: boolean
@@ -73,6 +75,8 @@ class MuxingSession extends EventEmitter {
   private tsWatcher: FSWatcher
   private masterWatcher: FSWatcher
 
+  private aborted = false
+
   private readonly isAbleToUploadVideoWithCache = memoizee((userId: number) => {
     return isAbleToUploadVideo(userId, 1000)
   }, { maxAge: MEMOIZE_TTL.LIVE_ABLE_TO_UPLOAD })
@@ -92,6 +96,7 @@ class MuxingSession extends EventEmitter {
     bitrate: number
     ratio: number
     allResolutions: number[]
+    hasAudio: boolean
   }) {
     super()
 
@@ -106,6 +111,8 @@ class MuxingSession extends EventEmitter {
     this.bitrate = options.bitrate
     this.ratio = options.ratio
 
+    this.hasAudio = options.hasAudio
+
     this.allResolutions = options.allResolutions
 
     this.videoId = this.videoLive.Video.id
@@ -138,6 +145,8 @@ class MuxingSession extends EventEmitter {
         bitrate: this.bitrate,
         ratio: this.ratio,
 
+        hasAudio: this.hasAudio,
+
         availableEncoders: VideoTranscodingProfilesManager.Instance.getAvailableEncoders(),
         profile: CONFIG.LIVE.TRANSCODING.PROFILE
       })
@@ -176,6 +185,7 @@ class MuxingSession extends EventEmitter {
   abort () {
     if (!this.ffmpegCommand) return
 
+    this.aborted = true
     this.ffmpegCommand.kill('SIGINT')
   }
 
@@ -280,6 +290,7 @@ class MuxingSession extends EventEmitter {
 
   private async isQuotaExceeded (segmentPath: string) {
     if (this.saveReplay !== true) return false
+    if (this.aborted) return false
 
     try {
       const segmentStat = await stat(segmentPath)
@@ -339,7 +350,11 @@ class MuxingSession extends EventEmitter {
       if (this.saveReplay) {
         await this.addSegmentToReplay(previousSegment)
       }
-    }).catch(err => logger.error('Cannot process segments', { err, ...this.lTags() }))
+    }).catch(err => {
+      if (this.aborted) return
+
+      logger.error('Cannot process segments', { err, ...this.lTags() })
+    })
   }
 
   private hasClientSocketInBadHealth (sessionId: string) {