}
await JobQueue.Instance.init()
- await JobQueue.Instance.createJob({ type: 'video-file', payload: dataInput })
+ await JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput })
console.log('Transcoding job for video %s created.', video.uuid)
}
isNewVideo: true
}
- await JobQueue.Instance.createJob({ type: 'video-file', payload: dataInput })
+ await JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput })
}
return res.json({
WS: 'wss'
}
-const JOB_ATTEMPTS: { [ id in JobType ]: number } = {
+// TODO: remove 'video-file'
+const JOB_ATTEMPTS: { [ id in (JobType | 'video-file') ]: number } = {
'activitypub-http-broadcast': 5,
'activitypub-http-unicast': 5,
'activitypub-http-fetcher': 5,
'activitypub-follow': 5,
'video-file-import': 1,
+ 'video-transcoding': 1,
'video-file': 1,
'video-import': 1,
'email': 5,
'videos-views': 1,
'activitypub-refresher': 1
}
-const JOB_CONCURRENCY: { [ id in JobType ]: number } = {
+const JOB_CONCURRENCY: { [ id in (JobType | 'video-file') ]: number } = {
'activitypub-http-broadcast': 1,
'activitypub-http-unicast': 5,
'activitypub-http-fetcher': 1,
'activitypub-follow': 3,
'video-file-import': 1,
+ 'video-transcoding': 1,
'video-file': 1,
'video-import': 1,
'email': 5,
'videos-views': 1,
'activitypub-refresher': 1
}
-const JOB_TTL: { [ id in JobType ]: number } = {
+const JOB_TTL: { [ id in (JobType | 'video-file') ]: number } = {
'activitypub-http-broadcast': 60000 * 10, // 10 minutes
'activitypub-http-unicast': 60000 * 10, // 10 minutes
'activitypub-http-fetcher': 60000 * 10, // 10 minutes
'activitypub-follow': 60000 * 10, // 10 minutes
'video-file-import': 1000 * 3600, // 1 hour
+ 'video-transcoding': 1000 * 3600 * 48, // 2 days, transcoding could be long
'video-file': 1000 * 3600 * 48, // 2 days, transcoding could be long
'video-import': 1000 * 3600 * 2, // hours
'email': 60000 * 10, // 10 minutes
isNewVideo: true
}
- await JobQueue.Instance.createJob({ type: 'video-file', payload: dataInput })
+ await JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput })
}
} catch (err) {
import { generateHlsPlaylist, importVideoFile, optimizeVideofile, transcodeOriginalVideofile } from '../../video-transcoding'
import { Notifier } from '../../notifier'
-export type VideoFilePayload = {
+export type VideoTranscodingPayload = {
videoUUID: string
resolution?: VideoResolution
isNewVideo?: boolean
return video
}
-async function processVideoFile (job: Bull.Job) {
- const payload = job.data as VideoFilePayload
+async function processVideoTranscoding (job: Bull.Job) {
+ const payload = job.data as VideoTranscodingPayload
logger.info('Processing video file in job %d.', job.id)
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(payload.videoUUID)
})
}
-async function onVideoFileTranscoderOrImportSuccess (video: VideoModel, payload?: VideoFilePayload) {
+async function onVideoFileTranscoderOrImportSuccess (video: VideoModel, payload?: VideoTranscodingPayload) {
if (video === undefined) return undefined
const { videoDatabase, videoPublished } = await sequelizeTypescript.transaction(async t => {
await createHlsJobIfEnabled(payload)
}
-async function onVideoFileOptimizerSuccess (videoArg: VideoModel, payload: VideoFilePayload) {
+async function onVideoFileOptimizerSuccess (videoArg: VideoModel, payload: VideoTranscodingPayload) {
if (videoArg === undefined) return undefined
// Outside the transaction (IO on disk)
resolution
}
- const p = JobQueue.Instance.createJob({ type: 'video-file', payload: dataInput })
+ const p = JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput })
tasks.push(p)
}
// ---------------------------------------------------------------------------
export {
- processVideoFile,
+ processVideoTranscoding,
processVideoFileImport
}
// ---------------------------------------------------------------------------
-function createHlsJobIfEnabled (payload?: VideoFilePayload) {
+function createHlsJobIfEnabled (payload?: VideoTranscodingPayload) {
// Generate HLS playlist?
if (payload && CONFIG.TRANSCODING.HLS.ENABLED) {
const hlsTranscodingPayload = {
generateHlsPlaylist: true
}
- return JobQueue.Instance.createJob({ type: 'video-file', payload: hlsTranscodingPayload })
+ return JobQueue.Instance.createJob({ type: 'video-transcoding', payload: hlsTranscodingPayload })
}
}
import { ActivitypubHttpFetcherPayload, processActivityPubHttpFetcher } from './handlers/activitypub-http-fetcher'
import { ActivitypubHttpUnicastPayload, processActivityPubHttpUnicast } from './handlers/activitypub-http-unicast'
import { EmailPayload, processEmail } from './handlers/email'
-import { processVideoFile, processVideoFileImport, VideoFileImportPayload, VideoFilePayload } from './handlers/video-file'
+import {
+ processVideoFileImport,
+ processVideoTranscoding,
+ VideoFileImportPayload,
+ VideoTranscodingPayload
+} from './handlers/video-transcoding'
import { ActivitypubFollowPayload, processActivityPubFollow } from './handlers/activitypub-follow'
import { processVideoImport, VideoImportPayload } from './handlers/video-import'
import { processVideosViews } from './handlers/video-views'
{ type: 'activitypub-http-fetcher', payload: ActivitypubHttpFetcherPayload } |
{ type: 'activitypub-follow', payload: ActivitypubFollowPayload } |
{ type: 'video-file-import', payload: VideoFileImportPayload } |
- { type: 'video-file', payload: VideoFilePayload } |
+ { type: 'video-transcoding', payload: VideoTranscodingPayload } |
{ type: 'email', payload: EmailPayload } |
{ type: 'video-import', payload: VideoImportPayload } |
{ type: 'activitypub-refresher', payload: RefreshPayload } |
{ type: 'videos-views', payload: {} }
-const handlers: { [ id in JobType ]: (job: Bull.Job) => Promise<any>} = {
+const handlers: { [ id in (JobType | 'video-file') ]: (job: Bull.Job) => Promise<any>} = {
'activitypub-http-broadcast': processActivityPubHttpBroadcast,
'activitypub-http-unicast': processActivityPubHttpUnicast,
'activitypub-http-fetcher': processActivityPubHttpFetcher,
'activitypub-follow': processActivityPubFollow,
'video-file-import': processVideoFileImport,
- 'video-file': processVideoFile,
+ 'video-transcoding': processVideoTranscoding,
+ 'video-file': processVideoTranscoding, // TODO: remove it (changed in 1.3)
'email': processEmail,
'video-import': processVideoImport,
'videos-views': processVideosViews,
'activitypub-http-fetcher',
'activitypub-http-unicast',
'email',
- 'video-file',
+ 'video-transcoding',
'video-file-import',
'video-import',
'videos-views',
'activitypub-http-fetcher' |
'activitypub-follow' |
'video-file-import' |
- 'video-file' |
+ 'video-transcoding' |
'email' |
'video-import' |
'videos-views' |