X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Flive-manager.ts;h=fd9a859f901c1065234a0aad0fec0423cd671b56;hb=284ef529113ad61de30ff30a28c699b97d9ca02f;hp=3ff2434ff4b9e5507d25a41e24c7b55ecefc68c1;hpb=fb7194043d0486ce0a6a40b2ffbdf32878c33a6f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/live-manager.ts b/server/lib/live-manager.ts index 3ff2434ff..fd9a859f9 100644 --- a/server/lib/live-manager.ts +++ b/server/lib/live-manager.ts @@ -13,7 +13,7 @@ import { VideoModel } from '@server/models/video/video' import { VideoFileModel } from '@server/models/video/video-file' import { VideoLiveModel } from '@server/models/video/video-live' import { VideoStreamingPlaylistModel } from '@server/models/video/video-streaming-playlist' -import { MStreamingPlaylist, MUser, MUserId, MVideoLive, MVideoLiveVideo } from '@server/types/models' +import { MStreamingPlaylist, MUserId, MVideoLive, MVideoLiveVideo } from '@server/types/models' import { VideoState, VideoStreamingPlaylistType } from '@shared/models' import { federateVideoIfNeeded } from './activitypub/videos' import { buildSha256Segment } from './hls' @@ -84,7 +84,7 @@ class LiveManager { }) events.on('donePublish', sessionId => { - this.abortSession(sessionId) + logger.info('Live session ended.', { sessionId }) }) this.segmentsSha256Queue = queue((options, cb) => { @@ -145,10 +145,16 @@ class LiveManager { private abortSession (id: string) { const session = this.getContext().sessions.get(id) - if (session) session.stop() + if (session) { + session.stop() + this.getContext().sessions.delete(id) + } const transSession = this.transSessions.get(id) - if (transSession) transSession.kill('SIGKILL') + if (transSession) { + transSession.kill('SIGINT') + this.transSessions.delete(id) + } } private async handleSession (sessionId: string, streamPath: string, streamKey: string) { @@ -300,6 +306,8 @@ class LiveManager { const onFFmpegEnded = () => { logger.info('RTMP transmuxing for video %s ended. Scheduling cleanup', streamPath) + this.transSessions.delete(sessionId) + Promise.all([ tsWatcher.close(), masterWatcher.close() ]) .catch(err => logger.error('Cannot close watchers of %s.', outPath, { err })) @@ -311,7 +319,7 @@ class LiveManager { onFFmpegEnded() // Don't care that we killed the ffmpeg process - if (err?.message?.includes('SIGKILL')) return + if (err?.message?.includes('SIGINT')) return logger.error('Live transcoding error.', { err, stdout, stderr }) })