diff options
author | Chocobozzz <me@florianbigard.com> | 2022-06-16 13:39:57 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2022-06-16 13:39:57 +0200 |
commit | cdd838168d617f70fc04fe7f23846810e7e07082 (patch) | |
tree | f563eccdd927babf82d25c6f2cd8ba343fb67a21 | |
parent | bffee1d538aa7b51b78d646a0d372b352c073cd8 (diff) | |
download | PeerTube-cdd838168d617f70fc04fe7f23846810e7e07082.tar.gz PeerTube-cdd838168d617f70fc04fe7f23846810e7e07082.tar.zst PeerTube-cdd838168d617f70fc04fe7f23846810e7e07082.zip |
Fix live ending job that breaks new live session
-rw-r--r-- | server/lib/job-queue/handlers/video-live-ending.ts | 19 | ||||
-rw-r--r-- | server/lib/live/live-manager.ts | 1 | ||||
-rw-r--r-- | server/tests/api/live/live-save-replay.ts | 7 | ||||
-rw-r--r-- | shared/models/server/job.model.ts | 1 |
4 files changed, 20 insertions, 8 deletions
diff --git a/server/lib/job-queue/handlers/video-live-ending.ts b/server/lib/job-queue/handlers/video-live-ending.ts index 7607267f8..feec257fc 100644 --- a/server/lib/job-queue/handlers/video-live-ending.ts +++ b/server/lib/job-queue/handlers/video-live-ending.ts | |||
@@ -45,13 +45,13 @@ async function processVideoLiveEnding (job: Job) { | |||
45 | LiveSegmentShaStore.Instance.cleanupShaSegments(liveVideo.uuid) | 45 | LiveSegmentShaStore.Instance.cleanupShaSegments(liveVideo.uuid) |
46 | 46 | ||
47 | if (live.saveReplay !== true) { | 47 | if (live.saveReplay !== true) { |
48 | return cleanupLiveAndFederate({ live, video: liveVideo }) | 48 | return cleanupLiveAndFederate({ live, video: liveVideo, streamingPlaylistId: payload.streamingPlaylistId }) |
49 | } | 49 | } |
50 | 50 | ||
51 | if (live.permanentLive) { | 51 | if (live.permanentLive) { |
52 | await saveReplayToExternalVideo({ liveVideo, liveSession, publishedAt: payload.publishedAt, replayDirectory: payload.replayDirectory }) | 52 | await saveReplayToExternalVideo({ liveVideo, liveSession, publishedAt: payload.publishedAt, replayDirectory: payload.replayDirectory }) |
53 | 53 | ||
54 | return cleanupLiveAndFederate({ live, video: liveVideo }) | 54 | return cleanupLiveAndFederate({ live, video: liveVideo, streamingPlaylistId: payload.streamingPlaylistId }) |
55 | } | 55 | } |
56 | 56 | ||
57 | return replaceLiveByReplay({ liveVideo, live, liveSession, replayDirectory: payload.replayDirectory }) | 57 | return replaceLiveByReplay({ liveVideo, live, liveSession, replayDirectory: payload.replayDirectory }) |
@@ -233,15 +233,18 @@ async function assignReplayFilesToVideo (options: { | |||
233 | async function cleanupLiveAndFederate (options: { | 233 | async function cleanupLiveAndFederate (options: { |
234 | live: MVideoLive | 234 | live: MVideoLive |
235 | video: MVideo | 235 | video: MVideo |
236 | streamingPlaylistId: number | ||
236 | }) { | 237 | }) { |
237 | const { live, video } = options | 238 | const { live, video, streamingPlaylistId } = options |
238 | 239 | ||
239 | const streamingPlaylist = await VideoStreamingPlaylistModel.loadHLSPlaylistByVideo(video.id) | 240 | const streamingPlaylist = await VideoStreamingPlaylistModel.loadWithVideo(streamingPlaylistId) |
240 | 241 | ||
241 | if (live.permanentLive) { | 242 | if (streamingPlaylist) { |
242 | await cleanupPermanentLive(video, streamingPlaylist) | 243 | if (live.permanentLive) { |
243 | } else { | 244 | await cleanupPermanentLive(video, streamingPlaylist) |
244 | await cleanupNormalLive(video, streamingPlaylist) | 245 | } else { |
246 | await cleanupNormalLive(video, streamingPlaylist) | ||
247 | } | ||
245 | } | 248 | } |
246 | 249 | ||
247 | try { | 250 | try { |
diff --git a/server/lib/live/live-manager.ts b/server/lib/live/live-manager.ts index 0f14a6851..f2f064b49 100644 --- a/server/lib/live/live-manager.ts +++ b/server/lib/live/live-manager.ts | |||
@@ -416,6 +416,7 @@ class LiveManager { | |||
416 | : undefined, | 416 | : undefined, |
417 | 417 | ||
418 | liveSessionId: liveSession.id, | 418 | liveSessionId: liveSession.id, |
419 | streamingPlaylistId: fullVideo.getHLSPlaylist()?.id, | ||
419 | 420 | ||
420 | publishedAt: fullVideo.publishedAt.toISOString() | 421 | publishedAt: fullVideo.publishedAt.toISOString() |
421 | } | 422 | } |
diff --git a/server/tests/api/live/live-save-replay.ts b/server/tests/api/live/live-save-replay.ts index 007af51e9..99d500711 100644 --- a/server/tests/api/live/live-save-replay.ts +++ b/server/tests/api/live/live-save-replay.ts | |||
@@ -12,6 +12,7 @@ import { | |||
12 | createMultipleServers, | 12 | createMultipleServers, |
13 | doubleFollow, | 13 | doubleFollow, |
14 | findExternalSavedVideo, | 14 | findExternalSavedVideo, |
15 | makeRawRequest, | ||
15 | PeerTubeServer, | 16 | PeerTubeServer, |
16 | setAccessTokensToServers, | 17 | setAccessTokensToServers, |
17 | setDefaultVideoChannel, | 18 | setDefaultVideoChannel, |
@@ -457,6 +458,12 @@ describe('Save replay setting', function () { | |||
457 | // Streaming session #2 | 458 | // Streaming session #2 |
458 | ffmpegCommand = await servers[0].live.sendRTMPStreamInVideo({ videoId: liveVideoUUID }) | 459 | ffmpegCommand = await servers[0].live.sendRTMPStreamInVideo({ videoId: liveVideoUUID }) |
459 | await waitUntilLivePublishedOnAllServers(servers, liveVideoUUID) | 460 | await waitUntilLivePublishedOnAllServers(servers, liveVideoUUID) |
461 | |||
462 | await wait(5000) | ||
463 | const video = await servers[0].videos.get({ id: liveVideoUUID }) | ||
464 | expect(video.streamingPlaylists).to.have.lengthOf(1) | ||
465 | await makeRawRequest(video.streamingPlaylists[0].playlistUrl) | ||
466 | |||
460 | await stopFfmpeg(ffmpegCommand) | 467 | await stopFfmpeg(ffmpegCommand) |
461 | await waitUntilLiveWaitingOnAllServers(servers, liveVideoUUID) | 468 | await waitUntilLiveWaitingOnAllServers(servers, liveVideoUUID) |
462 | 469 | ||
diff --git a/shared/models/server/job.model.ts b/shared/models/server/job.model.ts index bc5ffa570..073f15872 100644 --- a/shared/models/server/job.model.ts +++ b/shared/models/server/job.model.ts | |||
@@ -161,6 +161,7 @@ export interface VideoLiveEndingPayload { | |||
161 | videoId: number | 161 | videoId: number |
162 | publishedAt: string | 162 | publishedAt: string |
163 | liveSessionId: number | 163 | liveSessionId: number |
164 | streamingPlaylistId: number | ||
164 | 165 | ||
165 | replayDirectory?: string | 166 | replayDirectory?: string |
166 | } | 167 | } |