diff options
Diffstat (limited to 'server/lib/transcoding')
-rw-r--r-- | server/lib/transcoding/shared/job-builders/transcoding-job-queue-builder.ts | 19 | ||||
-rw-r--r-- | server/lib/transcoding/web-transcoding.ts | 16 |
2 files changed, 21 insertions, 14 deletions
diff --git a/server/lib/transcoding/shared/job-builders/transcoding-job-queue-builder.ts b/server/lib/transcoding/shared/job-builders/transcoding-job-queue-builder.ts index 7c892718b..c09c6b8ce 100644 --- a/server/lib/transcoding/shared/job-builders/transcoding-job-queue-builder.ts +++ b/server/lib/transcoding/shared/job-builders/transcoding-job-queue-builder.ts | |||
@@ -76,9 +76,10 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder { | |||
76 | 76 | ||
77 | nextTranscodingSequentialJobPayloads = [ ...nextTranscodingSequentialJobPayloads, ...lowerResolutionJobPayloads ] | 77 | nextTranscodingSequentialJobPayloads = [ ...nextTranscodingSequentialJobPayloads, ...lowerResolutionJobPayloads ] |
78 | 78 | ||
79 | const hasChildren = nextTranscodingSequentialJobPayloads.length !== 0 | ||
79 | mergeOrOptimizePayload = videoFile.isAudio() | 80 | mergeOrOptimizePayload = videoFile.isAudio() |
80 | ? this.buildMergeAudioPayload({ videoUUID: video.uuid, isNewVideo }) | 81 | ? this.buildMergeAudioPayload({ videoUUID: video.uuid, isNewVideo, hasChildren }) |
81 | : this.buildOptimizePayload({ videoUUID: video.uuid, isNewVideo, quickTranscode }) | 82 | : this.buildOptimizePayload({ videoUUID: video.uuid, isNewVideo, quickTranscode, hasChildren }) |
82 | }) | 83 | }) |
83 | } finally { | 84 | } finally { |
84 | mutexReleaser() | 85 | mutexReleaser() |
@@ -100,7 +101,9 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder { | |||
100 | 101 | ||
101 | const mergeOrOptimizeJob = await this.buildTranscodingJob({ payload: mergeOrOptimizePayload, user }) | 102 | const mergeOrOptimizeJob = await this.buildTranscodingJob({ payload: mergeOrOptimizePayload, user }) |
102 | 103 | ||
103 | return JobQueue.Instance.createSequentialJobFlow(...[ mergeOrOptimizeJob, transcodingJobBuilderJob ]) | 104 | await JobQueue.Instance.createSequentialJobFlow(...[ mergeOrOptimizeJob, transcodingJobBuilderJob ]) |
105 | |||
106 | await VideoJobInfoModel.increaseOrCreate(video.uuid, 'pendingTranscode') | ||
104 | } | 107 | } |
105 | 108 | ||
106 | // --------------------------------------------------------------------------- | 109 | // --------------------------------------------------------------------------- |
@@ -279,15 +282,17 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder { | |||
279 | private buildMergeAudioPayload (options: { | 282 | private buildMergeAudioPayload (options: { |
280 | videoUUID: string | 283 | videoUUID: string |
281 | isNewVideo: boolean | 284 | isNewVideo: boolean |
285 | hasChildren: boolean | ||
282 | }): MergeAudioTranscodingPayload { | 286 | }): MergeAudioTranscodingPayload { |
283 | const { videoUUID, isNewVideo } = options | 287 | const { videoUUID, isNewVideo, hasChildren } = options |
284 | 288 | ||
285 | return { | 289 | return { |
286 | type: 'merge-audio-to-webtorrent', | 290 | type: 'merge-audio-to-webtorrent', |
287 | resolution: DEFAULT_AUDIO_RESOLUTION, | 291 | resolution: DEFAULT_AUDIO_RESOLUTION, |
288 | fps: VIDEO_TRANSCODING_FPS.AUDIO_MERGE, | 292 | fps: VIDEO_TRANSCODING_FPS.AUDIO_MERGE, |
289 | videoUUID, | 293 | videoUUID, |
290 | isNewVideo | 294 | isNewVideo, |
295 | hasChildren | ||
291 | } | 296 | } |
292 | } | 297 | } |
293 | 298 | ||
@@ -295,13 +300,15 @@ export class TranscodingJobQueueBuilder extends AbstractJobBuilder { | |||
295 | videoUUID: string | 300 | videoUUID: string |
296 | quickTranscode: boolean | 301 | quickTranscode: boolean |
297 | isNewVideo: boolean | 302 | isNewVideo: boolean |
303 | hasChildren: boolean | ||
298 | }): OptimizeTranscodingPayload { | 304 | }): OptimizeTranscodingPayload { |
299 | const { videoUUID, quickTranscode, isNewVideo } = options | 305 | const { videoUUID, quickTranscode, isNewVideo, hasChildren } = options |
300 | 306 | ||
301 | return { | 307 | return { |
302 | type: 'optimize-to-webtorrent', | 308 | type: 'optimize-to-webtorrent', |
303 | videoUUID, | 309 | videoUUID, |
304 | isNewVideo, | 310 | isNewVideo, |
311 | hasChildren, | ||
305 | quickTranscode | 312 | quickTranscode |
306 | } | 313 | } |
307 | } | 314 | } |
diff --git a/server/lib/transcoding/web-transcoding.ts b/server/lib/transcoding/web-transcoding.ts index d43d03b2a..22bd238ae 100644 --- a/server/lib/transcoding/web-transcoding.ts +++ b/server/lib/transcoding/web-transcoding.ts | |||
@@ -14,6 +14,7 @@ import { buildFileMetadata } from '../video-file' | |||
14 | import { VideoPathManager } from '../video-path-manager' | 14 | import { VideoPathManager } from '../video-path-manager' |
15 | import { buildFFmpegVOD } from './shared' | 15 | import { buildFFmpegVOD } from './shared' |
16 | import { computeResolutionsToTranscode } from './transcoding-resolutions' | 16 | import { computeResolutionsToTranscode } from './transcoding-resolutions' |
17 | import { VideoModel } from '@server/models/video/video' | ||
17 | 18 | ||
18 | // Optimize the original video file and replace it. The resolution is not changed. | 19 | // Optimize the original video file and replace it. The resolution is not changed. |
19 | export async function optimizeOriginalVideofile (options: { | 20 | export async function optimizeOriginalVideofile (options: { |
@@ -32,6 +33,7 @@ export async function optimizeOriginalVideofile (options: { | |||
32 | 33 | ||
33 | try { | 34 | try { |
34 | await video.reload() | 35 | await video.reload() |
36 | await inputVideoFile.reload() | ||
35 | 37 | ||
36 | const fileWithVideoOrPlaylist = inputVideoFile.withVideoOrPlaylist(video) | 38 | const fileWithVideoOrPlaylist = inputVideoFile.withVideoOrPlaylist(video) |
37 | 39 | ||
@@ -88,16 +90,15 @@ export async function transcodeNewWebTorrentResolution (options: { | |||
88 | fps: number | 90 | fps: number |
89 | job: Job | 91 | job: Job |
90 | }) { | 92 | }) { |
91 | const { video, resolution, fps, job } = options | 93 | const { video: videoArg, resolution, fps, job } = options |
92 | 94 | ||
93 | const transcodeDirectory = CONFIG.STORAGE.TMP_DIR | 95 | const transcodeDirectory = CONFIG.STORAGE.TMP_DIR |
94 | const newExtname = '.mp4' | 96 | const newExtname = '.mp4' |
95 | 97 | ||
96 | const inputFileMutexReleaser = await VideoPathManager.Instance.lockFiles(video.uuid) | 98 | const inputFileMutexReleaser = await VideoPathManager.Instance.lockFiles(videoArg.uuid) |
97 | 99 | ||
98 | try { | 100 | try { |
99 | await video.reload() | 101 | const video = await VideoModel.loadFull(videoArg.uuid) |
100 | |||
101 | const file = video.getMaxQualityFile().withVideoOrPlaylist(video) | 102 | const file = video.getMaxQualityFile().withVideoOrPlaylist(video) |
102 | 103 | ||
103 | const result = await VideoPathManager.Instance.makeAvailableVideoFile(file, async videoInputPath => { | 104 | const result = await VideoPathManager.Instance.makeAvailableVideoFile(file, async videoInputPath => { |
@@ -141,16 +142,15 @@ export async function mergeAudioVideofile (options: { | |||
141 | fps: number | 142 | fps: number |
142 | job: Job | 143 | job: Job |
143 | }) { | 144 | }) { |
144 | const { video, resolution, fps, job } = options | 145 | const { video: videoArg, resolution, fps, job } = options |
145 | 146 | ||
146 | const transcodeDirectory = CONFIG.STORAGE.TMP_DIR | 147 | const transcodeDirectory = CONFIG.STORAGE.TMP_DIR |
147 | const newExtname = '.mp4' | 148 | const newExtname = '.mp4' |
148 | 149 | ||
149 | const inputFileMutexReleaser = await VideoPathManager.Instance.lockFiles(video.uuid) | 150 | const inputFileMutexReleaser = await VideoPathManager.Instance.lockFiles(videoArg.uuid) |
150 | 151 | ||
151 | try { | 152 | try { |
152 | await video.reload() | 153 | const video = await VideoModel.loadFull(videoArg.uuid) |
153 | |||
154 | const inputVideoFile = video.getMinQualityFile() | 154 | const inputVideoFile = video.getMinQualityFile() |
155 | 155 | ||
156 | const fileWithVideoOrPlaylist = inputVideoFile.withVideoOrPlaylist(video) | 156 | const fileWithVideoOrPlaylist = inputVideoFile.withVideoOrPlaylist(video) |