import * as Bull from 'bull'
import { readdir, remove } from 'fs-extra'
import { join } from 'path'
-import { getVideoFileResolution, hlsPlaylistToFragmentedMP4 } from '@server/helpers/ffmpeg-utils'
+import { getDurationFromVideoFile, getVideoFileResolution, hlsPlaylistToFragmentedMP4 } from '@server/helpers/ffmpeg-utils'
+import { publishAndFederateIfNeeded } from '@server/lib/video'
import { getHLSDirectory } from '@server/lib/video-paths'
import { generateHlsPlaylist } from '@server/lib/video-transcoding'
import { VideoModel } from '@server/models/video/video'
const playlistFiles = files.filter(f => f.endsWith('.m3u8') && f !== 'master.m3u8')
const resolutions: number[] = []
+ let duration: number
for (const playlistFile of playlistFiles) {
const playlistPath = join(hlsDirectory, playlistFile)
const segmentFiles = files.filter(f => f.startsWith(shouldStartWith) && f.endsWith('.ts'))
await hlsPlaylistToFragmentedMP4(hlsDirectory, segmentFiles, mp4TmpName)
+ if (!duration) {
+ duration = await getDurationFromVideoFile(mp4TmpName)
+ }
+
resolutions.push(videoFileResolution)
}
video.isLive = false
video.state = VideoState.TO_TRANSCODE
+ video.duration = duration
+
await video.save()
const videoWithFiles = await VideoModel.loadWithFiles(video.id)
video.state = VideoState.PUBLISHED
await video.save()
+
+ await publishAndFederateIfNeeded(video)
}
async function cleanupLive (video: MVideo, streamingPlaylist: MStreamingPlaylist) {