-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
+ hasAudio: boolean
+ isPortraitMode?: boolean
+ copyCodecs: boolean
+ isMaxQuality: boolean
+ isNewVideo?: boolean
+}) {
+ if (!payload || CONFIG.TRANSCODING.ENABLED !== true || CONFIG.TRANSCODING.HLS.ENABLED !== true) return false
+
+ const jobOptions = {
+ priority: await getTranscodingJobPriority(user)
+ }
+
+ const hlsTranscodingPayload: HLSTranscodingPayload = {
+ type: 'new-resolution-to-hls',
+ autoDeleteWebTorrentIfNeeded: true,
+
+ ...pick(payload, [ 'videoUUID', 'resolution', 'isPortraitMode', 'copyCodecs', 'isMaxQuality', 'isNewVideo', 'hasAudio' ])
+ }
+
+ await addTranscodingJob(hlsTranscodingPayload, jobOptions)
+
+ return true
+}
+
+async function createLowerResolutionsJobs (options: {
+ video: MVideoFullLight
+ user: MUserId
+ videoFileResolution: number
+ isPortraitMode: boolean
+ hasAudio: boolean
+ isNewVideo: boolean
+ type: 'hls' | 'webtorrent'
+}) {
+ const { video, user, videoFileResolution, isPortraitMode, isNewVideo, hasAudio, type } = options
+
+ // Create transcoding jobs if there are enabled resolutions
+ const resolutionsEnabled = computeLowerResolutionsToTranscode(videoFileResolution, 'vod')
+ const resolutionCreated: string[] = []
+
+ for (const resolution of resolutionsEnabled) {
+ if (resolution === VideoResolution.H_NOVIDEO && hasAudio === false) continue
+
+ 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,
+ hasAudio,
+ createHLSIfNeeded: true,
+ isNewVideo
+ }
+
+ resolutionCreated.push('webtorrent-' + resolution)
+ }
+
+ if (CONFIG.TRANSCODING.HLS.ENABLED && type === 'hls') {
+ dataInput = {
+ type: 'new-resolution-to-hls',
+ videoUUID: video.uuid,
+ resolution,
+ isPortraitMode,
+ hasAudio,
+ copyCodecs: false,
+ isMaxQuality: false,
+ autoDeleteWebTorrentIfNeeded: true,
+ isNewVideo
+ }
+
+ resolutionCreated.push('hls-' + resolution)