import * as Bull from 'bull'
-import { move, readdir, remove } from 'fs-extra'
+import { copy, readdir, remove } from 'fs-extra'
import { join } from 'path'
import { hlsPlaylistToFragmentedMP4 } from '@server/helpers/ffmpeg-utils'
import { getDurationFromVideoFile, getVideoFileResolution } from '@server/helpers/ffprobe-utils'
+import { VIDEO_LIVE } from '@server/initializers/constants'
import { generateVideoMiniature } from '@server/lib/thumbnail'
import { publishAndFederateIfNeeded } from '@server/lib/video'
import { getHLSDirectory } from '@server/lib/video-paths'
import { MStreamingPlaylist, MVideo, MVideoLive } from '@server/types/models'
import { ThumbnailType, VideoLiveEndingPayload, VideoState } from '@shared/models'
import { logger } from '../../../helpers/logger'
-import { VIDEO_LIVE } from '@server/initializers/constants'
async function processVideoLiveEnding (job: Bull.Job) {
const payload = job.data as VideoLiveEndingPayload
const playlistFiles: string[] = []
for (const file of rootFiles) {
- if (file.endsWith('.m3u8') !== true) continue
-
- await move(join(hlsDirectory, file), join(replayDirectory, file))
+ // Move remaining files in the replay directory
+ if (file.endsWith('.ts') || file.endsWith('.m3u8')) {
+ await copy(join(hlsDirectory, file), join(replayDirectory, file))
+ }
- if (file !== 'master.m3u8') {
+ if (file.endsWith('.m3u8') && file !== 'master.m3u8') {
playlistFiles.push(file)
}
}
// Wait latest segments generation, and close watchers
Promise.all([ tsWatcher.close(), masterWatcher.close() ])
- .then(() => {
- // Process remaining segments hash
- for (const key of Object.keys(segmentsToProcessPerPlaylist)) {
- processSegments(segmentsToProcessPerPlaylist[key])
- }
- })
- .catch(err => logger.error('Cannot close watchers of %s or process remaining hash segments.', outPath, { err }))
+ .then(() => {
+ // Process remaining segments hash
+ for (const key of Object.keys(segmentsToProcessPerPlaylist)) {
+ processSegments(segmentsToProcessPerPlaylist[key])
+ }
+ })
+ .catch(err => logger.error('Cannot close watchers of %s or process remaining hash segments.', outPath, { err }))
this.onEndTransmuxing(videoLive.Video.id)
.catch(err => logger.error('Error in closed transmuxing.', { err }))