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 {
private readonly bitrate: number
private readonly ratio: number
+ private readonly hasAudio: boolean
+
private readonly videoId: number
private readonly videoUUID: string
private readonly saveReplay: boolean
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 })
bitrate: number
ratio: number
allResolutions: number[]
+ hasAudio: boolean
}) {
super()
this.bitrate = options.bitrate
this.ratio = options.ratio
+ this.hasAudio = options.hasAudio
+
this.allResolutions = options.allResolutions
this.videoId = this.videoLive.Video.id
bitrate: this.bitrate,
ratio: this.ratio,
+ hasAudio: this.hasAudio,
+
availableEncoders: VideoTranscodingProfilesManager.Instance.getAvailableEncoders(),
profile: CONFIG.LIVE.TRANSCODING.PROFILE
})
abort () {
if (!this.ffmpegCommand) return
+ this.aborted = true
this.ffmpegCommand.kill('SIGINT')
}
private async isQuotaExceeded (segmentPath: string) {
if (this.saveReplay !== true) return false
+ if (this.aborted) return false
try {
const segmentStat = await stat(segmentPath)
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) {