import { ConfigManager, downloadFile, logger } from 'packages/peertube-runner/shared'
import { join } from 'path'
import { buildUUID } from '@shared/extra-utils'
-import { FFmpegLive, FFmpegVOD } from '@shared/ffmpeg'
+import { FFmpegEdition, FFmpegLive, FFmpegVOD } from '@shared/ffmpeg'
import { RunnerJob, RunnerJobPayload } from '@shared/models'
import { PeerTubeServer } from '@shared/server-commands'
import { getTranscodingLogger } from './transcoding-logger'
import { getAvailableEncoders, getEncodersToTry } from './transcoding-profiles'
+import { remove } from 'fs-extra'
export type JobWithToken <T extends RunnerJobPayload = RunnerJobPayload> = RunnerJob<T> & { jobToken: string }
const { url, job, runnerToken } = options
const destination = join(ConfigManager.Instance.getTranscodingDirectory(), buildUUID())
- await downloadFile({ url, jobToken: job.jobToken, runnerToken, destination })
+ try {
+ await downloadFile({ url, jobToken: job.jobToken, runnerToken, destination })
+ } catch (err) {
+ remove(destination)
+ .catch(err => logger.error({ err }, `Cannot remove ${destination}`))
+
+ throw err
+ }
return destination
}
return server.runnerJobs.update({ jobToken: job.jobToken, jobUUID: job.uuid, runnerToken, progress })
}
+// ---------------------------------------------------------------------------
+
export function buildFFmpegVOD (options: {
server: PeerTubeServer
runnerToken: string
.catch(err => logger.error({ err }, 'Cannot send job progress'))
}, updateInterval, { trailing: false })
- const config = ConfigManager.Instance.getConfig()
-
return new FFmpegVOD({
- niceness: config.ffmpeg.nice,
- threads: config.ffmpeg.threads,
- tmpDirectory: ConfigManager.Instance.getTranscodingDirectory(),
- profile: 'default',
- availableEncoders: {
- available: getAvailableEncoders(),
- encodersToTry: getEncodersToTry()
- },
- logger: getTranscodingLogger(),
+ ...getCommonFFmpegOptions(),
+
updateJobProgress
})
}
export function buildFFmpegLive () {
+ return new FFmpegLive(getCommonFFmpegOptions())
+}
+
+export function buildFFmpegEdition () {
+ return new FFmpegEdition(getCommonFFmpegOptions())
+}
+
+function getCommonFFmpegOptions () {
const config = ConfigManager.Instance.getConfig()
- return new FFmpegLive({
+ return {
niceness: config.ffmpeg.nice,
threads: config.ffmpeg.threads,
tmpDirectory: ConfigManager.Instance.getTranscodingDirectory(),
encodersToTry: getEncodersToTry()
},
logger: getTranscodingLogger()
- })
+ }
}