Rename video-file job to video-transcoding
This commit is contained in:
parent
1ed9b8ee69
commit
a0327eedb0
|
@ -42,6 +42,6 @@ async function run () {
|
||||||
}
|
}
|
||||||
|
|
||||||
await JobQueue.Instance.init()
|
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)
|
console.log('Transcoding job for video %s created.', video.uuid)
|
||||||
}
|
}
|
||||||
|
|
|
@ -283,7 +283,7 @@ async function addVideo (req: express.Request, res: express.Response) {
|
||||||
isNewVideo: true
|
isNewVideo: true
|
||||||
}
|
}
|
||||||
|
|
||||||
await JobQueue.Instance.createJob({ type: 'video-file', payload: dataInput })
|
await JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput })
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.json({
|
return res.json({
|
||||||
|
|
|
@ -100,36 +100,40 @@ const REMOTE_SCHEME = {
|
||||||
WS: 'wss'
|
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-broadcast': 5,
|
||||||
'activitypub-http-unicast': 5,
|
'activitypub-http-unicast': 5,
|
||||||
'activitypub-http-fetcher': 5,
|
'activitypub-http-fetcher': 5,
|
||||||
'activitypub-follow': 5,
|
'activitypub-follow': 5,
|
||||||
'video-file-import': 1,
|
'video-file-import': 1,
|
||||||
|
'video-transcoding': 1,
|
||||||
'video-file': 1,
|
'video-file': 1,
|
||||||
'video-import': 1,
|
'video-import': 1,
|
||||||
'email': 5,
|
'email': 5,
|
||||||
'videos-views': 1,
|
'videos-views': 1,
|
||||||
'activitypub-refresher': 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-broadcast': 1,
|
||||||
'activitypub-http-unicast': 5,
|
'activitypub-http-unicast': 5,
|
||||||
'activitypub-http-fetcher': 1,
|
'activitypub-http-fetcher': 1,
|
||||||
'activitypub-follow': 3,
|
'activitypub-follow': 3,
|
||||||
'video-file-import': 1,
|
'video-file-import': 1,
|
||||||
|
'video-transcoding': 1,
|
||||||
'video-file': 1,
|
'video-file': 1,
|
||||||
'video-import': 1,
|
'video-import': 1,
|
||||||
'email': 5,
|
'email': 5,
|
||||||
'videos-views': 1,
|
'videos-views': 1,
|
||||||
'activitypub-refresher': 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-broadcast': 60000 * 10, // 10 minutes
|
||||||
'activitypub-http-unicast': 60000 * 10, // 10 minutes
|
'activitypub-http-unicast': 60000 * 10, // 10 minutes
|
||||||
'activitypub-http-fetcher': 60000 * 10, // 10 minutes
|
'activitypub-http-fetcher': 60000 * 10, // 10 minutes
|
||||||
'activitypub-follow': 60000 * 10, // 10 minutes
|
'activitypub-follow': 60000 * 10, // 10 minutes
|
||||||
'video-file-import': 1000 * 3600, // 1 hour
|
'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-file': 1000 * 3600 * 48, // 2 days, transcoding could be long
|
||||||
'video-import': 1000 * 3600 * 2, // hours
|
'video-import': 1000 * 3600 * 2, // hours
|
||||||
'email': 60000 * 10, // 10 minutes
|
'email': 60000 * 10, // 10 minutes
|
||||||
|
|
|
@ -207,7 +207,7 @@ async function processFile (downloader: () => Promise<string>, videoImport: Vide
|
||||||
isNewVideo: true
|
isNewVideo: true
|
||||||
}
|
}
|
||||||
|
|
||||||
await JobQueue.Instance.createJob({ type: 'video-file', payload: dataInput })
|
await JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput })
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { computeResolutionsToTranscode } from '../../../helpers/ffmpeg-utils'
|
||||||
import { generateHlsPlaylist, importVideoFile, optimizeVideofile, transcodeOriginalVideofile } from '../../video-transcoding'
|
import { generateHlsPlaylist, importVideoFile, optimizeVideofile, transcodeOriginalVideofile } from '../../video-transcoding'
|
||||||
import { Notifier } from '../../notifier'
|
import { Notifier } from '../../notifier'
|
||||||
|
|
||||||
export type VideoFilePayload = {
|
export type VideoTranscodingPayload = {
|
||||||
videoUUID: string
|
videoUUID: string
|
||||||
resolution?: VideoResolution
|
resolution?: VideoResolution
|
||||||
isNewVideo?: boolean
|
isNewVideo?: boolean
|
||||||
|
@ -41,8 +41,8 @@ async function processVideoFileImport (job: Bull.Job) {
|
||||||
return video
|
return video
|
||||||
}
|
}
|
||||||
|
|
||||||
async function processVideoFile (job: Bull.Job) {
|
async function processVideoTranscoding (job: Bull.Job) {
|
||||||
const payload = job.data as VideoFilePayload
|
const payload = job.data as VideoTranscodingPayload
|
||||||
logger.info('Processing video file in job %d.', job.id)
|
logger.info('Processing video file in job %d.', job.id)
|
||||||
|
|
||||||
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(payload.videoUUID)
|
const video = await VideoModel.loadAndPopulateAccountAndServerAndTags(payload.videoUUID)
|
||||||
|
@ -83,7 +83,7 @@ async function onHlsPlaylistGenerationSuccess (video: VideoModel) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onVideoFileTranscoderOrImportSuccess (video: VideoModel, payload?: VideoFilePayload) {
|
async function onVideoFileTranscoderOrImportSuccess (video: VideoModel, payload?: VideoTranscodingPayload) {
|
||||||
if (video === undefined) return undefined
|
if (video === undefined) return undefined
|
||||||
|
|
||||||
const { videoDatabase, videoPublished } = await sequelizeTypescript.transaction(async t => {
|
const { videoDatabase, videoPublished } = await sequelizeTypescript.transaction(async t => {
|
||||||
|
@ -118,7 +118,7 @@ async function onVideoFileTranscoderOrImportSuccess (video: VideoModel, payload?
|
||||||
await createHlsJobIfEnabled(payload)
|
await createHlsJobIfEnabled(payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onVideoFileOptimizerSuccess (videoArg: VideoModel, payload: VideoFilePayload) {
|
async function onVideoFileOptimizerSuccess (videoArg: VideoModel, payload: VideoTranscodingPayload) {
|
||||||
if (videoArg === undefined) return undefined
|
if (videoArg === undefined) return undefined
|
||||||
|
|
||||||
// Outside the transaction (IO on disk)
|
// Outside the transaction (IO on disk)
|
||||||
|
@ -148,7 +148,7 @@ async function onVideoFileOptimizerSuccess (videoArg: VideoModel, payload: Video
|
||||||
resolution
|
resolution
|
||||||
}
|
}
|
||||||
|
|
||||||
const p = JobQueue.Instance.createJob({ type: 'video-file', payload: dataInput })
|
const p = JobQueue.Instance.createJob({ type: 'video-transcoding', payload: dataInput })
|
||||||
tasks.push(p)
|
tasks.push(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -182,13 +182,13 @@ async function onVideoFileOptimizerSuccess (videoArg: VideoModel, payload: Video
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
export {
|
export {
|
||||||
processVideoFile,
|
processVideoTranscoding,
|
||||||
processVideoFileImport
|
processVideoFileImport
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
function createHlsJobIfEnabled (payload?: VideoFilePayload) {
|
function createHlsJobIfEnabled (payload?: VideoTranscodingPayload) {
|
||||||
// Generate HLS playlist?
|
// Generate HLS playlist?
|
||||||
if (payload && CONFIG.TRANSCODING.HLS.ENABLED) {
|
if (payload && CONFIG.TRANSCODING.HLS.ENABLED) {
|
||||||
const hlsTranscodingPayload = {
|
const hlsTranscodingPayload = {
|
||||||
|
@ -199,6 +199,6 @@ function createHlsJobIfEnabled (payload?: VideoFilePayload) {
|
||||||
generateHlsPlaylist: true
|
generateHlsPlaylist: true
|
||||||
}
|
}
|
||||||
|
|
||||||
return JobQueue.Instance.createJob({ type: 'video-file', payload: hlsTranscodingPayload })
|
return JobQueue.Instance.createJob({ type: 'video-transcoding', payload: hlsTranscodingPayload })
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,7 +7,12 @@ import { ActivitypubHttpBroadcastPayload, processActivityPubHttpBroadcast } from
|
||||||
import { ActivitypubHttpFetcherPayload, processActivityPubHttpFetcher } from './handlers/activitypub-http-fetcher'
|
import { ActivitypubHttpFetcherPayload, processActivityPubHttpFetcher } from './handlers/activitypub-http-fetcher'
|
||||||
import { ActivitypubHttpUnicastPayload, processActivityPubHttpUnicast } from './handlers/activitypub-http-unicast'
|
import { ActivitypubHttpUnicastPayload, processActivityPubHttpUnicast } from './handlers/activitypub-http-unicast'
|
||||||
import { EmailPayload, processEmail } from './handlers/email'
|
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 { ActivitypubFollowPayload, processActivityPubFollow } from './handlers/activitypub-follow'
|
||||||
import { processVideoImport, VideoImportPayload } from './handlers/video-import'
|
import { processVideoImport, VideoImportPayload } from './handlers/video-import'
|
||||||
import { processVideosViews } from './handlers/video-views'
|
import { processVideosViews } from './handlers/video-views'
|
||||||
|
@ -19,19 +24,20 @@ type CreateJobArgument =
|
||||||
{ type: 'activitypub-http-fetcher', payload: ActivitypubHttpFetcherPayload } |
|
{ type: 'activitypub-http-fetcher', payload: ActivitypubHttpFetcherPayload } |
|
||||||
{ type: 'activitypub-follow', payload: ActivitypubFollowPayload } |
|
{ type: 'activitypub-follow', payload: ActivitypubFollowPayload } |
|
||||||
{ type: 'video-file-import', payload: VideoFileImportPayload } |
|
{ type: 'video-file-import', payload: VideoFileImportPayload } |
|
||||||
{ type: 'video-file', payload: VideoFilePayload } |
|
{ type: 'video-transcoding', payload: VideoTranscodingPayload } |
|
||||||
{ type: 'email', payload: EmailPayload } |
|
{ type: 'email', payload: EmailPayload } |
|
||||||
{ type: 'video-import', payload: VideoImportPayload } |
|
{ type: 'video-import', payload: VideoImportPayload } |
|
||||||
{ type: 'activitypub-refresher', payload: RefreshPayload } |
|
{ type: 'activitypub-refresher', payload: RefreshPayload } |
|
||||||
{ type: 'videos-views', payload: {} }
|
{ 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-broadcast': processActivityPubHttpBroadcast,
|
||||||
'activitypub-http-unicast': processActivityPubHttpUnicast,
|
'activitypub-http-unicast': processActivityPubHttpUnicast,
|
||||||
'activitypub-http-fetcher': processActivityPubHttpFetcher,
|
'activitypub-http-fetcher': processActivityPubHttpFetcher,
|
||||||
'activitypub-follow': processActivityPubFollow,
|
'activitypub-follow': processActivityPubFollow,
|
||||||
'video-file-import': processVideoFileImport,
|
'video-file-import': processVideoFileImport,
|
||||||
'video-file': processVideoFile,
|
'video-transcoding': processVideoTranscoding,
|
||||||
|
'video-file': processVideoTranscoding, // TODO: remove it (changed in 1.3)
|
||||||
'email': processEmail,
|
'email': processEmail,
|
||||||
'video-import': processVideoImport,
|
'video-import': processVideoImport,
|
||||||
'videos-views': processVideosViews,
|
'videos-views': processVideosViews,
|
||||||
|
@ -44,7 +50,7 @@ const jobTypes: JobType[] = [
|
||||||
'activitypub-http-fetcher',
|
'activitypub-http-fetcher',
|
||||||
'activitypub-http-unicast',
|
'activitypub-http-unicast',
|
||||||
'email',
|
'email',
|
||||||
'video-file',
|
'video-transcoding',
|
||||||
'video-file-import',
|
'video-file-import',
|
||||||
'video-import',
|
'video-import',
|
||||||
'videos-views',
|
'videos-views',
|
||||||
|
|
|
@ -5,7 +5,7 @@ export type JobType = 'activitypub-http-unicast' |
|
||||||
'activitypub-http-fetcher' |
|
'activitypub-http-fetcher' |
|
||||||
'activitypub-follow' |
|
'activitypub-follow' |
|
||||||
'video-file-import' |
|
'video-file-import' |
|
||||||
'video-file' |
|
'video-transcoding' |
|
||||||
'email' |
|
'email' |
|
||||||
'video-import' |
|
'video-import' |
|
||||||
'videos-views' |
|
'videos-views' |
|
||||||
|
|
Loading…
Reference in New Issue