-function createHlsJobIfEnabled (payload?: { videoUUID: string, resolution: number, isPortraitMode?: boolean }) {
- // Generate HLS playlist?
- if (payload && CONFIG.TRANSCODING.HLS.ENABLED) {
- const hlsTranscodingPayload = {
- type: 'hls' as 'hls',
- videoUUID: payload.videoUUID,
- resolution: payload.resolution,
- isPortraitMode: payload.isPortraitMode
+async function createHlsJobIfEnabled (user: MUserId, payload: {
+ videoUUID: string
+ resolution: number
+ isPortraitMode?: boolean
+ copyCodecs: boolean
+ isMaxQuality: boolean
+}) {
+ if (!payload || CONFIG.TRANSCODING.HLS.ENABLED !== true) return false
+
+ const jobOptions = {
+ priority: await getTranscodingJobPriority(user)
+ }
+
+ const hlsTranscodingPayload: HLSTranscodingPayload = {
+ type: 'new-resolution-to-hls',
+ videoUUID: payload.videoUUID,
+ resolution: payload.resolution,
+ isPortraitMode: payload.isPortraitMode,
+ copyCodecs: payload.copyCodecs,
+ isMaxQuality: payload.isMaxQuality
+ }
+
+ JobQueue.Instance.createJob({ type: 'video-transcoding', payload: hlsTranscodingPayload }, jobOptions)
+
+ return true
+}
+
+async function createLowerResolutionsJobs (
+ video: MVideoFullLight,
+ user: MUserId,
+ videoFileResolution: number,
+ isPortraitMode: boolean,
+ type: 'hls' | 'webtorrent'
+) {
+ // Create transcoding jobs if there are enabled resolutions
+ const resolutionsEnabled = computeResolutionsToTranscode(videoFileResolution, 'vod')
+ const resolutionCreated: number[] = []
+
+ for (const resolution of resolutionsEnabled) {
+ let dataInput: VideoTranscodingPayload
+
+ if (CONFIG.TRANSCODING.WEBTORRENT.ENABLED && type === 'webtorrent') {
+ // WebTorrent will create subsequent HLS job
+ dataInput = {
+ type: 'new-resolution-to-webtorrent',
+ videoUUID: video.uuid,
+ resolution,
+ isPortraitMode
+ }
+ }
+
+ if (CONFIG.TRANSCODING.HLS.ENABLED && type === 'hls') {
+ dataInput = {
+ type: 'new-resolution-to-hls',
+ videoUUID: video.uuid,
+ resolution,
+ isPortraitMode,
+ copyCodecs: false,
+ isMaxQuality: false
+ }