aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2022-06-24 09:34:56 +0200
committerChocobozzz <me@florianbigard.com>2022-06-24 09:57:55 +0200
commit92083e42289e19033425672dfbe2234aef03c6df (patch)
tree01746b73d351f2a44932794549532b6a5ead1cbd /server/lib
parent383dbdec67fc474652c4e59440238da0b2fb6e8c (diff)
downloadPeerTube-92083e42289e19033425672dfbe2234aef03c6df.tar.gz
PeerTube-92083e42289e19033425672dfbe2234aef03c6df.tar.zst
PeerTube-92083e42289e19033425672dfbe2234aef03c6df.zip
Fix removed sha segments on fast restream
Diffstat (limited to 'server/lib')
-rw-r--r--server/lib/job-queue/handlers/video-live-ending.ts13
-rw-r--r--server/lib/live/live-manager.ts5
-rw-r--r--server/lib/live/live-utils.ts15
3 files changed, 15 insertions, 18 deletions
diff --git a/server/lib/job-queue/handlers/video-live-ending.ts b/server/lib/job-queue/handlers/video-live-ending.ts
index 450bda2fd..b2c42664a 100644
--- a/server/lib/job-queue/handlers/video-live-ending.ts
+++ b/server/lib/job-queue/handlers/video-live-ending.ts
@@ -4,13 +4,8 @@ import { join } from 'path'
4import { ffprobePromise, getAudioStream, getVideoStreamDimensionsInfo, getVideoStreamDuration } from '@server/helpers/ffmpeg' 4import { ffprobePromise, getAudioStream, getVideoStreamDimensionsInfo, getVideoStreamDuration } from '@server/helpers/ffmpeg'
5import { getLocalVideoActivityPubUrl } from '@server/lib/activitypub/url' 5import { getLocalVideoActivityPubUrl } from '@server/lib/activitypub/url'
6import { federateVideoIfNeeded } from '@server/lib/activitypub/videos' 6import { federateVideoIfNeeded } from '@server/lib/activitypub/videos'
7import { cleanupUnsavedNormalLive, cleanupPermanentLive, cleanupTMPLiveFiles, LiveSegmentShaStore } from '@server/lib/live' 7import { cleanupPermanentLive, cleanupTMPLiveFiles, cleanupUnsavedNormalLive } from '@server/lib/live'
8import { 8import { generateHLSMasterPlaylistFilename, generateHlsSha256SegmentsFilename, getLiveReplayBaseDirectory } from '@server/lib/paths'
9 generateHLSMasterPlaylistFilename,
10 generateHlsSha256SegmentsFilename,
11 getLiveDirectory,
12 getLiveReplayBaseDirectory
13} from '@server/lib/paths'
14import { generateVideoMiniature } from '@server/lib/thumbnail' 9import { generateVideoMiniature } from '@server/lib/thumbnail'
15import { generateHlsPlaylistResolutionFromTS } from '@server/lib/transcoding/transcoding' 10import { generateHlsPlaylistResolutionFromTS } from '@server/lib/transcoding/transcoding'
16import { moveToNextState } from '@server/lib/video-state' 11import { moveToNextState } from '@server/lib/video-state'
@@ -44,8 +39,6 @@ async function processVideoLiveEnding (job: Job) {
44 return 39 return
45 } 40 }
46 41
47 LiveSegmentShaStore.Instance.cleanupShaSegments(liveVideo.uuid)
48
49 if (live.saveReplay !== true) { 42 if (live.saveReplay !== true) {
50 return cleanupLiveAndFederate({ live, video: liveVideo, streamingPlaylistId: payload.streamingPlaylistId }) 43 return cleanupLiveAndFederate({ live, video: liveVideo, streamingPlaylistId: payload.streamingPlaylistId })
51 } 44 }
@@ -137,7 +130,7 @@ async function replaceLiveByReplay (options: {
137}) { 130}) {
138 const { liveVideo, liveSession, live, replayDirectory } = options 131 const { liveVideo, liveSession, live, replayDirectory } = options
139 132
140 await cleanupTMPLiveFiles(getLiveDirectory(liveVideo)) 133 await cleanupTMPLiveFiles(liveVideo)
141 134
142 await live.destroy() 135 await live.destroy()
143 136
diff --git a/server/lib/live/live-manager.ts b/server/lib/live/live-manager.ts
index f2f064b49..d499b4b1a 100644
--- a/server/lib/live/live-manager.ts
+++ b/server/lib/live/live-manager.ts
@@ -27,7 +27,6 @@ import { JobQueue } from '../job-queue'
27import { generateHLSMasterPlaylistFilename, generateHlsSha256SegmentsFilename, getLiveReplayBaseDirectory } from '../paths' 27import { generateHLSMasterPlaylistFilename, generateHlsSha256SegmentsFilename, getLiveReplayBaseDirectory } from '../paths'
28import { PeerTubeSocket } from '../peertube-socket' 28import { PeerTubeSocket } from '../peertube-socket'
29import { LiveQuotaStore } from './live-quota-store' 29import { LiveQuotaStore } from './live-quota-store'
30import { LiveSegmentShaStore } from './live-segment-sha-store'
31import { cleanupPermanentLive } from './live-utils' 30import { cleanupPermanentLive } from './live-utils'
32import { MuxingSession } from './shared' 31import { MuxingSession } from './shared'
33 32
@@ -219,9 +218,7 @@ class LiveManager {
219 return this.abortSession(sessionId) 218 return this.abortSession(sessionId)
220 } 219 }
221 220
222 // Cleanup old potential live files (could happen with a permanent live) 221 // Cleanup old potential live (could happen with a permanent live)
223 LiveSegmentShaStore.Instance.cleanupShaSegments(video.uuid)
224
225 const oldStreamingPlaylist = await VideoStreamingPlaylistModel.loadHLSPlaylistByVideo(video.id) 222 const oldStreamingPlaylist = await VideoStreamingPlaylistModel.loadHLSPlaylistByVideo(video.id)
226 if (oldStreamingPlaylist) { 223 if (oldStreamingPlaylist) {
227 if (!videoLive.permanentLive) throw new Error('Found previous session in a non permanent live: ' + video.uuid) 224 if (!videoLive.permanentLive) throw new Error('Found previous session in a non permanent live: ' + video.uuid)
diff --git a/server/lib/live/live-utils.ts b/server/lib/live/live-utils.ts
index 6305a97a8..bba876642 100644
--- a/server/lib/live/live-utils.ts
+++ b/server/lib/live/live-utils.ts
@@ -3,6 +3,7 @@ import { basename, join } from 'path'
3import { logger } from '@server/helpers/logger' 3import { logger } from '@server/helpers/logger'
4import { MStreamingPlaylist, MVideo } from '@server/types/models' 4import { MStreamingPlaylist, MVideo } from '@server/types/models'
5import { getLiveDirectory } from '../paths' 5import { getLiveDirectory } from '../paths'
6import { LiveSegmentShaStore } from './live-segment-sha-store'
6 7
7function buildConcatenatedName (segmentOrPlaylistPath: string) { 8function buildConcatenatedName (segmentOrPlaylistPath: string) {
8 const num = basename(segmentOrPlaylistPath).match(/^(\d+)(-|\.)/) 9 const num = basename(segmentOrPlaylistPath).match(/^(\d+)(-|\.)/)
@@ -11,9 +12,7 @@ function buildConcatenatedName (segmentOrPlaylistPath: string) {
11} 12}
12 13
13async function cleanupPermanentLive (video: MVideo, streamingPlaylist: MStreamingPlaylist) { 14async function cleanupPermanentLive (video: MVideo, streamingPlaylist: MStreamingPlaylist) {
14 const hlsDirectory = getLiveDirectory(video) 15 await cleanupTMPLiveFiles(video)
15
16 await cleanupTMPLiveFiles(hlsDirectory)
17 16
18 await streamingPlaylist.destroy() 17 await streamingPlaylist.destroy()
19} 18}
@@ -24,11 +23,19 @@ async function cleanupUnsavedNormalLive (video: MVideo, streamingPlaylist: MStre
24 await remove(hlsDirectory) 23 await remove(hlsDirectory)
25 24
26 await streamingPlaylist.destroy() 25 await streamingPlaylist.destroy()
26
27 LiveSegmentShaStore.Instance.cleanupShaSegments(video.uuid)
27} 28}
28 29
29async function cleanupTMPLiveFiles (hlsDirectory: string) { 30async function cleanupTMPLiveFiles (video: MVideo) {
31 const hlsDirectory = getLiveDirectory(video)
32
33 LiveSegmentShaStore.Instance.cleanupShaSegments(video.uuid)
34
30 if (!await pathExists(hlsDirectory)) return 35 if (!await pathExists(hlsDirectory)) return
31 36
37 logger.info('Cleanup TMP live files of %s.', hlsDirectory)
38
32 const files = await readdir(hlsDirectory) 39 const files = await readdir(hlsDirectory)
33 40
34 for (const filename of files) { 41 for (const filename of files) {